Post
Topic
Board Bitcoin Discussion
Re: Blockchain split of 4 July 2015
by
JorgeStolfi
on 08/07/2015, 00:21:17 UTC
Why is this taking so long to resolve?
It actually was resolved pretty fast. (6 blocks ~ 1h)

There was a second incident on July 5th, with a 3-block orphan branch.  There are still v2 miners out there, and the v3 miners are still accepting recent block hashes from them, and mining new blocks on top of them before they have time to validate (or even see) those parent.  The fork was blotched.

Could you explain this further

I am not an expert, I am just learning from what is posted on forums, too.  But basically mining pools have a way to "steal" the hash of newly mined blocks from each other, even before those blocks get out to the relay nodes. They must immediately start to mine a new block Y with the stolen block X as the parent,  without waiting for X to propagate out to the relay nodes, otherwise the pool that mined X will have many seconds of head start.  If they are lucky, they will solve block Y even before the block X has finished propagating to the nodes and the nodes have validated it.

Those miners do validate the transactions that they put into block Y (in parallel with mining it), but they cannot start validating block X, or even check whether it was mined by a v3 miner, because they only have the hash of block X, nothing else.  Apparently they used to fetch and check block X, also in parallel with mining, once it became available; but F2Pool had stopped doing so,  because (they said) it had cost them a block reward once (perhaps by using up some of their internet bandwidth).

Usually this shortcut works, because the block X was verified by its miner, and is valid 99.99% of the time.  Hoever, just after the BIP66 rule became active, the miner BTCNuggets, that was still running v2 software, happened to mine the next block X. The BTC-China pool stole its hash from BTCNuggets, and F2Pool stole it from BTC-China.  F2Pool (who had upgraded to v3) mined a new block Y on top of X, without realizing that X was invalid because it was mined with v2 rules.  Then F2Pool mined another block Z on top of it, and AntPool mined another one on top of Z, and so on -- all without realizing that X was invalid.