@@ -590,7 +590,7 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error {
590590 log .Crit ("Failed to write genesis block" , "err" , err )
591591 }
592592 bc .genesisBlock = genesis
593- bc .insert (bc .genesisBlock )
593+ bc .insert (bc .genesisBlock , false )
594594 bc .currentBlock .Store (bc .genesisBlock )
595595 bc .hc .SetGenesis (bc .genesisBlock .Header ())
596596 bc .hc .SetCurrentHeader (bc .genesisBlock .Header ())
@@ -680,7 +680,7 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error {
680680// or if they are on a different side chain.
681681//
682682// Note, this function assumes that the `mu` mutex is held!
683- func (bc * BlockChain ) insert (block * types.Block ) {
683+ func (bc * BlockChain ) insert (block * types.Block , writeBlock bool ) {
684684 // If the block is on a side chain or an unknown one, force other heads onto it too
685685 updateHeads := GetCanonicalHash (bc .db , block .NumberU64 ()) != block .Hash ()
686686
@@ -691,6 +691,11 @@ func (bc *BlockChain) insert(block *types.Block) {
691691 if err := WriteHeadBlockHash (bc .db , block .Hash ()); err != nil {
692692 log .Crit ("Failed to insert head block hash" , "err" , err )
693693 }
694+ if writeBlock {
695+ if err := WriteBlock (bc .db , block ); err != nil {
696+ log .Crit ("Failed to insert block" , "err" , err )
697+ }
698+ }
694699 bc .currentBlock .Store (block )
695700
696701 // save cache BlockSigners
@@ -1422,7 +1427,8 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types.
14221427
14231428 // Set new head.
14241429 if status == CanonStatTy {
1425- bc .insert (block )
1430+ // WriteBlock has already been called, no need to write again
1431+ bc .insert (block , false )
14261432 // prepare set of masternodes for the next epoch
14271433 if bc .chainConfig .XDPoS != nil && ((block .NumberU64 () % bc .chainConfig .XDPoS .Epoch ) == (bc .chainConfig .XDPoS .Epoch - bc .chainConfig .XDPoS .Gap )) {
14281434 err := bc .UpdateM1 ()
@@ -2265,7 +2271,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
22652271 var addedTxs types.Transactions
22662272 for i := len (newChain ) - 1 ; i >= 0 ; i -- {
22672273 // insert the block in the canonical way, re-writing history
2268- bc .insert (newChain [i ])
2274+ bc .insert (newChain [i ], true )
22692275 // write lookup entries for hash based transaction/receipt searches
22702276 if err := WriteTxLookupEntries (bc .db , newChain [i ]); err != nil {
22712277 return err
0 commit comments