@@ -1997,18 +1997,18 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
19971997
19981998// WriteBlockAndSetHead writes the given block and all associated state to the database,
19991999// and applies the block as the new chain head.
2000- func (bc * BlockChain ) WriteBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2000+ func (bc * BlockChain ) WriteBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux , delayBroadcast bool ) (status WriteStatus , err error ) {
20012001 if ! bc .chainmu .TryLock () {
20022002 return NonStatTy , errChainStopped
20032003 }
20042004 defer bc .chainmu .Unlock ()
20052005
2006- return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender )
2006+ return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender , delayBroadcast )
20072007}
20082008
20092009// writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead.
20102010// This function expects the chain mutex to be held.
2011- func (bc * BlockChain ) writeBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2011+ func (bc * BlockChain ) writeBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux , delayBroadcast bool ) (status WriteStatus , err error ) {
20122012 currentBlock := bc .CurrentBlock ()
20132013 reorg , err := bc .forker .ReorgNeededWithFastFinality (currentBlock , block .Header ())
20142014 if err != nil {
@@ -2017,7 +2017,7 @@ func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types
20172017 if reorg {
20182018 bc .highestVerifiedBlock .Store (types .CopyHeader (block .Header ()))
20192019 bc .highestVerifiedBlockFeed .Send (HighestVerifiedBlockEvent {Header : block .Header ()})
2020- if sealedBlockSender != nil {
2020+ if sealedBlockSender != nil && ! delayBroadcast {
20212021 // If the local DB is corrupted, writeBlockWithState may fail.
20222022 // It's fine — other nodes will persist the block.
20232023 //
@@ -2628,7 +2628,7 @@ func (bc *BlockChain) processBlock(parentRoot common.Hash, block *types.Block, s
26282628 // Don't set the head, only insert the block
26292629 err = bc .writeBlockWithState (block , res .Receipts , statedb )
26302630 } else {
2631- status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil )
2631+ status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil , false )
26322632 }
26332633 if err != nil {
26342634 return nil , err
0 commit comments