From 0aeec7f1b5de951832c3e03411181e360e8fbdf4 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Wed, 12 Jul 2023 16:44:00 +0200 Subject: [PATCH 1/3] mv td to OnBlockStart --- core/blockchain.go | 21 +++++++++++---------- eth/tracers/printer.go | 8 ++++---- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 42e35b3fa6..6db5be78e8 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -158,9 +158,11 @@ var defaultCacheConfig = &CacheConfig{ type BlockchainLogger interface { vm.EVMLogger state.StateLogger - OnBlockStart(*types.Block) - OnBlockEnd(td *big.Int, err error) - OnGenesisBlock(*types.Block) + // OnBlockStart is called before executing `block`. + // `td` is the total difficulty prior to `block`. + OnBlockStart(block *types.Block, td *big.Int) + OnBlockEnd(err error) + OnGenesisBlock(genesis *types.Block) } // BlockChain represents the canonical chain given a database with a genesis @@ -1775,14 +1777,15 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) pstart := time.Now() if bc.logger != nil { - bc.logger.OnBlockStart(block) + td := bc.GetTd(block.ParentHash(), block.NumberU64()-1) + bc.logger.OnBlockStart(block, td) } 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) + bc.logger.OnBlockEnd(err) } return it.index, err } @@ -1793,7 +1796,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.OnBlockEnd(new(big.Int), err) + bc.logger.OnBlockEnd(err) } return it.index, err } @@ -1830,7 +1833,7 @@ 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) + bc.logger.OnBlockEnd(err) } return it.index, err } @@ -1851,9 +1854,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) 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) + bc.logger.OnBlockEnd(nil) } if !setHead { diff --git a/eth/tracers/printer.go b/eth/tracers/printer.go index 98c7417831..f9ecf3b1dc 100644 --- a/eth/tracers/printer.go +++ b/eth/tracers/printer.go @@ -70,12 +70,12 @@ func (p *Printer) CaptureTxEnd(receipt *types.Receipt) { fmt.Printf("CaptureTxEnd: receipt=%s\n", buf) } -func (p *Printer) OnBlockStart(b *types.Block) { - fmt.Printf("OnBlockStart: b=%v\n", b.NumberU64()) +func (p *Printer) OnBlockStart(b *types.Block, td *big.Int) { + fmt.Printf("OnBlockStart: b=%v, td=%v\n", b.NumberU64(), td) } -func (p *Printer) OnBlockEnd(td *big.Int, err error) { - fmt.Printf("OnBlockEnd: td=%v, err=%v\n", td, err) +func (p *Printer) OnBlockEnd(err error) { + fmt.Printf("OnBlockEnd: err=%v\n", err) } func (p *Printer) OnGenesisBlock(b *types.Block) { From b692a68a3bff62041905ee4c7c8768477dd575be Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Wed, 12 Jul 2023 17:22:52 +0200 Subject: [PATCH 2/3] add final & safe headers to BlockStart --- core/blockchain.go | 4 ++-- eth/tracers/printer.go | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 6db5be78e8..4abf32ed80 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -160,7 +160,7 @@ type BlockchainLogger interface { state.StateLogger // OnBlockStart is called before executing `block`. // `td` is the total difficulty prior to `block`. - OnBlockStart(block *types.Block, td *big.Int) + OnBlockStart(block *types.Block, td *big.Int, finalized *types.Header, safe *types.Header) OnBlockEnd(err error) OnGenesisBlock(genesis *types.Block) } @@ -1778,7 +1778,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool) (int, error) if bc.logger != nil { td := bc.GetTd(block.ParentHash(), block.NumberU64()-1) - bc.logger.OnBlockStart(block, td) + bc.logger.OnBlockStart(block, td, bc.CurrentFinalBlock(), bc.CurrentSafeBlock()) } receipts, logs, usedGas, err := bc.processor.Process(block, statedb, bc.vmConfig) if err != nil { diff --git a/eth/tracers/printer.go b/eth/tracers/printer.go index f9ecf3b1dc..ce38f3b1a3 100644 --- a/eth/tracers/printer.go +++ b/eth/tracers/printer.go @@ -70,8 +70,12 @@ func (p *Printer) CaptureTxEnd(receipt *types.Receipt) { fmt.Printf("CaptureTxEnd: receipt=%s\n", buf) } -func (p *Printer) OnBlockStart(b *types.Block, td *big.Int) { - fmt.Printf("OnBlockStart: b=%v, td=%v\n", b.NumberU64(), td) +func (p *Printer) OnBlockStart(b *types.Block, td *big.Int, finalized, safe *types.Header) { + if finalized != nil && safe != nil { + fmt.Printf("OnBlockStart: b=%v, td=%v, finalized=%v, safe=%v\n", b.NumberU64(), td, finalized.Number.Uint64(), safe.Number.Uint64()) + } else { + fmt.Printf("OnBlockStart: b=%v, td=%v\n", b.NumberU64(), td) + } } func (p *Printer) OnBlockEnd(err error) { From 2a59d24b7368085d357aff00369203dd2af0c9c0 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Wed, 12 Jul 2023 17:38:19 +0200 Subject: [PATCH 3/3] add genesis alloc to hook --- core/blockchain.go | 2 +- core/genesis.go | 2 +- eth/tracers/printer.go | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 4abf32ed80..b72917f7b3 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -162,7 +162,7 @@ type BlockchainLogger interface { // `td` is the total difficulty prior to `block`. OnBlockStart(block *types.Block, td *big.Int, finalized *types.Header, safe *types.Header) OnBlockEnd(err error) - OnGenesisBlock(genesis *types.Block) + OnGenesisBlock(genesis *types.Block, alloc GenesisAlloc) } // BlockChain represents the canonical chain given a database with a genesis diff --git a/core/genesis.go b/core/genesis.go index 2d84efcfde..c5f615210b 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -485,7 +485,7 @@ func (g *Genesis) Commit(db ethdb.Database, triedb *trie.Database, bcLogger Bloc return nil, errors.New("can't start clique chain without signers") } if bcLogger != nil { - bcLogger.OnGenesisBlock(block) + bcLogger.OnGenesisBlock(block, g.Alloc) } // All the checks has passed, flush the states derived from the genesis // specification as well as the specification itself into the provided diff --git a/eth/tracers/printer.go b/eth/tracers/printer.go index ce38f3b1a3..3dcf2c1098 100644 --- a/eth/tracers/printer.go +++ b/eth/tracers/printer.go @@ -7,6 +7,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" ) @@ -82,8 +83,8 @@ func (p *Printer) OnBlockEnd(err error) { fmt.Printf("OnBlockEnd: err=%v\n", err) } -func (p *Printer) OnGenesisBlock(b *types.Block) { - fmt.Printf("OnGenesisBlock: b=%v\n", b.NumberU64()) +func (p *Printer) OnGenesisBlock(b *types.Block, alloc core.GenesisAlloc) { + fmt.Printf("OnGenesisBlock: b=%v, allocLength=%d\n", b.NumberU64(), len(alloc)) } func (p *Printer) OnBalanceChange(a common.Address, prev, new *big.Int) {