@@ -2066,18 +2066,18 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
20662066
20672067// WriteBlockAndSetHead writes the given block and all associated state to the database,
20682068// and applies the block as the new chain head.
2069- func (bc * BlockChain ) WriteBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2069+ 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 ) {
20702070 if ! bc .chainmu .TryLock () {
20712071 return NonStatTy , errChainStopped
20722072 }
20732073 defer bc .chainmu .Unlock ()
20742074
2075- return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender )
2075+ return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender , delayBroadcast )
20762076}
20772077
20782078// writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead.
20792079// This function expects the chain mutex to be held.
2080- func (bc * BlockChain ) writeBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2080+ 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 ) {
20812081 currentBlock := bc .CurrentBlock ()
20822082 reorg , err := bc .forker .ReorgNeededWithFastFinality (currentBlock , block .Header ())
20832083 if err != nil {
@@ -2086,7 +2086,7 @@ func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types
20862086 if reorg {
20872087 bc .highestVerifiedBlock .Store (types .CopyHeader (block .Header ()))
20882088 bc .highestVerifiedBlockFeed .Send (HighestVerifiedBlockEvent {Header : block .Header ()})
2089- if sealedBlockSender != nil {
2089+ if sealedBlockSender != nil && ! delayBroadcast {
20902090 // If the local DB is corrupted, writeBlockWithState may fail.
20912091 // It's fine — other nodes will persist the block.
20922092 //
@@ -2708,7 +2708,7 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s
27082708 // Don't set the head, only insert the block
27092709 err = bc .writeBlockWithState (block , res .Receipts , statedb )
27102710 } else {
2711- status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil )
2711+ status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil , false )
27122712 }
27132713 if err != nil {
27142714 return nil , err
0 commit comments