-
Notifications
You must be signed in to change notification settings - Fork 89
Description
When the node manage to download a block from the future it is not adopted directly, rather it is tucked away with the hope that it can be adopted when the time comes. Any time a new block is downloaded or after a forged block is adopted the node checks to see if there are any old blocks-from-the-future that it could adopt. If there are such blocks they are adopted before the new block.
Notably it appears that a new slot/tick isn't enough to trigger the adoption of blocks-from-the-future, it is always dependent on another block being added.
This means that if all nodes in the network where to download a block early then the only way for the network to progress would be by a BP forging a new block on the current tip (that is without the block from the future). This would cause the BP to notice and adopt the old block-from the future, then it would attempt to adopt its forged block. If it lost due to vrf the TraceDidntAdoptBlock would be shown. If the BP lost it means that another BP would have to attempt to beat the block-from-the-future, since no new block was adopted nothing will cause the rest of the nodes in the network to adopt the block-from-the-future.
Suggestions:
- Before forging a new block
chainSelectionForFutureBlocks
should be run so that the node can forge its block on top of blocks-from-the-future. - Trigger adoption of blocks-from-the-future without depending on any new blocks. This could be done by having a 1s timeout on the
getBlockToAdd
inaddBlockRunner
. If there was a timeout callchainSelectionForFutureBlocks
and try again.
This would stop blocks from the future causing forks.
I suspect that this is at least partially the cause of IntersectMBO/cardano-node#4720
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Status