diff --git a/core/blockchain.go b/core/blockchain.go index 93c40591c6..8ead80c253 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -2202,11 +2202,17 @@ func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Block) error { // Delete useless indexes right now which includes the non-canonical // transaction indexes, canonical chain indexes which above the head. - indexesBatch := bc.db.NewBatch() - for _, tx := range types.HashDifference(deletedTxs, addedTxs) { + var ( + indexesBatch = bc.db.NewBatch() + diffs = types.HashDifference(deletedTxs, addedTxs) + ) + for _, tx := range diffs { rawdb.DeleteTxLookupEntry(indexesBatch, tx) } - + // Reset the tx lookup cache in case some indexes are removed. + if len(diffs) > 0 { + bc.txLookupCache.Purge() + } // Delete all hash markers that are not part of the new canonical chain. // Because the reorg function does not handle new chain head, all hash // markers greater than or equal to new chain head should be deleted.