From add825e9c94dd17ecad5cc523e1834fa7a826f65 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Mon, 10 Jul 2023 19:01:55 +0200 Subject: [PATCH] fix BlockEnd in case of err --- core/blockchain.go | 19 +++++++++++++++++-- core/state_processor.go | 12 +----------- eth/tracers/printer.go | 4 ---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index a3c2fa6484..42e35b3fa6 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -160,7 +160,6 @@ type BlockchainLogger interface { state.StateLogger OnBlockStart(*types.Block) OnBlockEnd(td *big.Int, err error) - OnBlockValidationError(block *types.Block, err error) OnGenesisBlock(*types.Block) } @@ -1774,10 +1773,17 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) // Process block using the parent state as reference point pstart := time.Now() + + if bc.logger != nil { + bc.logger.OnBlockStart(block) + } receipts, logs, usedGas, err := bc.processor.Process(block, statedb, bc.vmConfig) if err != nil { bc.reportBlock(block, receipts, err) followupInterrupt.Store(true) + if bc.logger != nil { + bc.logger.OnBlockEnd(new(big.Int), err) + } return it.index, err } ptime := time.Since(pstart) @@ -1787,7 +1793,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) bc.reportBlock(block, receipts, err) followupInterrupt.Store(true) if bc.logger != nil { - bc.logger.OnBlockValidationError(block, err) + bc.logger.OnBlockEnd(new(big.Int), err) } return it.index, err } @@ -1823,6 +1829,9 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) } followupInterrupt.Store(true) if err != nil { + if bc.logger != nil { + bc.logger.OnBlockEnd(new(big.Int), err) + } return it.index, err } // Update the metrics touched during block commit @@ -1841,6 +1850,12 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) dirty, _ := bc.triedb.Size() stats.report(chain, it.index, dirty, setHead) + if bc.logger != nil { + td := bc.GetTd(block.ParentHash(), block.NumberU64()-1) + td.Add(td, block.Difficulty()) + bc.logger.OnBlockEnd(td, nil) + } + if !setHead { // After merge we expect few side chains. Simply count // all blocks the CL gives us for GC processing time diff --git a/core/state_processor.go b/core/state_processor.go index 7a4fd35e16..a5972f371b 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -68,17 +68,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg gp = new(GasPool).AddGas(block.GasLimit()) err error ) - if p.bc.logger != nil { - p.bc.logger.OnBlockStart(block) - defer func() { - var td *big.Int - if err == nil { - td = p.bc.GetTd(block.ParentHash(), block.NumberU64()-1) - td.Add(td, block.Difficulty()) - } - p.bc.logger.OnBlockEnd(td, err) - }() - } + // Mutate the block and state according to any hard-fork specs if p.config.DAOForkSupport && p.config.DAOForkBlock != nil && p.config.DAOForkBlock.Cmp(block.Number()) == 0 { misc.ApplyDAOHardFork(statedb) diff --git a/eth/tracers/printer.go b/eth/tracers/printer.go index 4c481cce3a..98c7417831 100644 --- a/eth/tracers/printer.go +++ b/eth/tracers/printer.go @@ -78,10 +78,6 @@ func (p *Printer) OnBlockEnd(td *big.Int, err error) { fmt.Printf("OnBlockEnd: td=%v, err=%v\n", td, err) } -func (p *Printer) OnBlockValidationError(block *types.Block, err error) { - fmt.Printf("OnBlockValidationError: b=%v, err=%v\n", block.NumberU64(), err) -} - func (p *Printer) OnGenesisBlock(b *types.Block) { fmt.Printf("OnGenesisBlock: b=%v\n", b.NumberU64()) }