 |
December 24, 2025, 09:48:51 AM |
|
Hello everyone, I was inspired by a few papers on Bitcoin block propagation to build a small probe network that measures live block propagation on mainnet (currently Atlanta / Frankfurt / Singapore).
So far I’ve analyzed a bit over 2000 blocks, and I’m seeing some interesting and fairly consistent propagation patterns emerge (still crunching through most of that data). However, one fork in particular caught my attention, and I’m trying to understand what I’m actually observing.
This was a fork at height 928484, between GDPool and AntPool.
According to my probes, GDPool’s block was visible across all probe locations roughly a minute and a half before AntPool’s competing block. I initially assumed I was misunderstanding something, so I spent a few days digging into it.
At first I wondered whether AntPool’s block had some characteristic that caused it to be preferred by the network — for example a higher-weight block, or that it had already reached a larger share of nodes through some distribution path outside of my probes, despite the large timing difference I was observing. But when I looked at the next block, 928485, things got stranger.
When querying my database for 928485, I noticed that AntPool’s block at 928484 and its successor at 928485 appeared to my probes at essentially the same time (within ~10ms across all probes). As I understand it, once a block is mined on top of a competing block, the longer chain is selected regardless of which block arrived first, since there’s no global time authority.
So effectively, GDPool’s block arrived first, but AntPool’s block arrived together with its successor, and the fork resolved immediately.
At that point I thought maybe my probes just caught this in a strange way due to some network fluke or sampling artifact. However, after profiling thousands of blocks, I do see fairly stable regional and miner-specific propagation behavior.
For context, when I look at the global skew between probes (i.e. the time between the first probe seeing a block and the last probe seeing the same block), it’s usually on the order of 70–90 ms, and even at the extreme tail I see at most ~2 seconds globally. I’ve never seen anything remotely close to 90 seconds under normal conditions.
So I’m a bit stuck.
Does anyone here with deeper protocol or mining experience have insight into what might be going on in a case like this?
Is this a known artifact of how headers propagation or chain synchronization works? Am I misunderstanding how these announcements are observed at the network level?
|