On 04/21/2014 11:40 AM, Ashley Holman wrote:
I think the most important part is that nodes can reliably decide on
"first received", regardless of how they subsequently act on it. I
believe it would be fine for a node to receive a header and continue
mining the old block, or a subsequently-verified competing block,
until it has the necessary pieces to fully verify the first header
received. If that block data doesn't come, then it will be
naturally ignored. But if multiple blocks come at once, even if a
competing block "verifies" first, the node would still switch to
considering the first header received as the best block when it
later receives proof it is valid (which may only be a couple
seconds).
In other words, the node will always consider the header-received
time as the primary ordering criteria, but will not mine on anything
until it has full proof of validity, even if that is out of
order. This means that new blocks "effectively" propagate at the
speed of 80 bytes, which limits certain kinds of
block-injection/racing attacks.