From adb53876db1b526f474da2f4c3a5ff1dc6dd18d6 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Wed, 26 Mar 2025 12:10:15 +0530 Subject: [PATCH] core: add blockchain back to state processor for bor consensus --- core/blockchain.go | 2 +- core/state_processor.go | 16 ++++++++++------ core/stateless.go | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 993fbb2300..06a84f4264 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -363,7 +363,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis bc.statedb = state.NewDatabase(bc.triedb, nil) bc.validator = NewBlockValidator(chainConfig, bc) bc.prefetcher = newStatePrefetcher(chainConfig, bc.hc) - bc.processor = NewStateProcessor(chainConfig, bc.hc) + bc.processor = NewStateProcessor(chainConfig, bc.hc, bc) bc.genesisBlock = bc.GetBlockByNumber(0) if bc.genesisBlock == nil { diff --git a/core/state_processor.go b/core/state_processor.go index 6a68d95b6e..649f48f7bb 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -37,15 +37,17 @@ import ( // // StateProcessor implements Processor. type StateProcessor struct { - config *params.ChainConfig // Chain configuration options - chain *HeaderChain // Canonical header chain + config *params.ChainConfig // Chain configuration options + chain *HeaderChain // Canonical header chain + blockchain *BlockChain } // NewStateProcessor initialises a new StateProcessor. -func NewStateProcessor(config *params.ChainConfig, chain *HeaderChain) *StateProcessor { +func NewStateProcessor(config *params.ChainConfig, chain *HeaderChain, blockchain *BlockChain) *StateProcessor { return &StateProcessor{ - config: config, - chain: chain, + config: config, + chain: chain, + blockchain: blockchain, } } @@ -133,7 +135,9 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg } // Finalize the block, applying any consensus engine specific extras (e.g. block rewards) - p.chain.engine.Finalize(p.chain, header, tracingStateDB, block.Body()) + // Note that we specifically need `Blockchain` for `ChainHeaderReader` interface as it's + // typecasted in bor consensus for setting state-sync events. + p.chain.engine.Finalize(p.blockchain, header, tracingStateDB, block.Body()) return &ProcessResult{ Receipts: receipts, diff --git a/core/stateless.go b/core/stateless.go index 491b369a10..f40da29d49 100644 --- a/core/stateless.go +++ b/core/stateless.go @@ -64,7 +64,7 @@ func ExecuteStateless(config *params.ChainConfig, block *types.Block, witness *s headerCache: lru.NewCache[common.Hash, *types.Header](256), engine: beacon.New(ethash.NewFaker()), } - processor := NewStateProcessor(config, headerChain) + processor := NewStateProcessor(config, headerChain, nil) validator := NewBlockValidator(config, nil) // No chain, we only validate the state, not the block // Run the stateless blocks processing and self-validate certain fields