From 88afef2434c84fb1b64c12df0d5531e44802da58 Mon Sep 17 00:00:00 2001 From: zzzckck <152148891+zzzckck@users.noreply.github.com> Date: Tue, 26 Aug 2025 11:46:36 +0800 Subject: [PATCH] worker: fix a trie prefetch corner case During mining phase, if a new block was just imported, TransferPrefetcher could transfer a TriePrefetcher of previous block to the new block, which would cause later error on OpenTrieStorage of the TriePrefetch routine. --- miner/worker.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index ab5fe7223a..6bb64b42e5 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -705,8 +705,14 @@ func (w *worker) makeEnv(parent *types.Header, header *types.Header, coinbase co } else { if prevEnv == nil { state.StartPrefetcher("miner", nil) - } else { + } else if prevEnv.header.Number.Uint64() == header.Number.Uint64() { state.TransferPrefetcher(prevEnv.state) + } else { + // in some corner case, new block was just imported and preEnv was for the previous block + // in this case, the prefetcher can not be transferred + log.Debug("new block was just imported, start prefetcher from scratch", + "prev number", prevEnv.header.Number.Uint64(), "cur number", header.Number.Uint64()) + state.StartPrefetcher("miner", nil) } }