Skip to content

Commit b5de62b

Browse files
gzliudanwanwiset25
authored andcommitted
core: save new blocks during reorg (#596)
1 parent f9058d0 commit b5de62b

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

core/blockchain.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)