@@ -2021,18 +2021,18 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
20212021
20222022// WriteBlockAndSetHead writes the given block and all associated state to the database,
20232023// and applies the block as the new chain head.
2024- func (bc * BlockChain ) WriteBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2024+ 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 ) {
20252025 if ! bc .chainmu .TryLock () {
20262026 return NonStatTy , errChainStopped
20272027 }
20282028 defer bc .chainmu .Unlock ()
20292029
2030- return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender )
2030+ return bc .writeBlockAndSetHead (block , receipts , logs , state , sealedBlockSender , delayBroadcast )
20312031}
20322032
20332033// writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead.
20342034// This function expects the chain mutex to be held.
2035- func (bc * BlockChain ) writeBlockAndSetHead (block * types.Block , receipts []* types.Receipt , logs []* types.Log , state * state.StateDB , sealedBlockSender * event.TypeMux ) (status WriteStatus , err error ) {
2035+ 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 ) {
20362036 currentBlock := bc .CurrentBlock ()
20372037 reorg , err := bc .forker .ReorgNeededWithFastFinality (currentBlock , block .Header ())
20382038 if err != nil {
@@ -2041,7 +2041,7 @@ func (bc *BlockChain) writeBlockAndSetHead(block *types.Block, receipts []*types
20412041 if reorg {
20422042 bc .highestVerifiedBlock .Store (types .CopyHeader (block .Header ()))
20432043 bc .highestVerifiedBlockFeed .Send (HighestVerifiedBlockEvent {Header : block .Header ()})
2044- if sealedBlockSender != nil {
2044+ if sealedBlockSender != nil && ! delayBroadcast {
20452045 // If the local DB is corrupted, writeBlockWithState may fail.
20462046 // It's fine — other nodes will persist the block.
20472047 //
@@ -2661,7 +2661,7 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s
26612661 // Don't set the head, only insert the block
26622662 err = bc .writeBlockWithState (block , res .Receipts , statedb )
26632663 } else {
2664- status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil )
2664+ status , err = bc .writeBlockAndSetHead (block , res .Receipts , res .Logs , statedb , nil , false )
26652665 }
26662666 if err != nil {
26672667 return nil , err
0 commit comments