@@ -2069,18 +2069,18 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
20692069
20702070// WriteBlockAndSetHead writes the given block and all associated state to the database,
20712071// and applies the block as the new chain head.
2072- func (bc * BlockChain ) WriteBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2072+ 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 ) {
20732073 if ! bc .chainmu .TryLock () {
20742074 return NonStatTy , errChainStopped
20752075 }
20762076 defer bc .chainmu .Unlock ()
20772077
2078- return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender )
2078+ return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender , delayBroadcast )
20792079}
20802080
20812081// writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead.
20822082// This function expects the chain mutex to be held.
2083- func (bc * BlockChain ) writeBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2083+ 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 ) {
20842084 currentBlock := bc .CurrentBlock ()
20852085 reorg , err := bc .forker .ReorgNeededWithFastFinality (currentBlock , block .Header ())
20862086 if err != nil {
@@ -2089,7 +2089,7 @@ func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types
20892089 if reorg {
20902090 bc .highestVerifiedBlock .Store (types .CopyHeader (block .Header ()))
20912091 bc .highestVerifiedBlockFeed .Send (HighestVerifiedBlockEvent {Header : block .Header ()})
2092- if sealedBlockSender != nil {
2092+ if sealedBlockSender != nil && ! delayBroadcast {
20932093 // If the local DB is corrupted, writeBlockWithState may fail.
20942094 // It's fine — other nodes will persist the block.
20952095 //
@@ -2711,7 +2711,7 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s
27112711 // Don't set the head, only insert the block
27122712 err = bc .writeBlockWithState (block , res .Receipts , statedb )
27132713 } else {
2714- status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil )
2714+ status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil , false )
27152715 }
27162716 if err != nil {
27172717 return nil , err
0 commit comments