diff --git a/core/block_validator.go b/core/block_validator.go index ca4b862525..ec8e039067 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -59,7 +59,7 @@ func NewBlockValidator(config *params.ChainConfig, blockchain *BlockChain, engin } type tracerWrapper interface { - CreateTraceEnvAndGetBlockTrace(*params.ChainConfig, ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Block, *types.Block, bool) (*types.BlockTrace, error) + CreateTraceEnvAndGetBlockTrace(*params.ChainConfig, ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Header, *types.Block, bool) (*types.BlockTrace, error) } func (v *BlockValidator) SetupTracerAndCircuitCapacityChecker(tracer tracerWrapper) { @@ -324,7 +324,7 @@ func (v *BlockValidator) createTraceEnvAndGetBlockTrace(block *types.Block) (*ty return nil, err } - return v.tracer.CreateTraceEnvAndGetBlockTrace(v.config, v.bc, v.engine, v.bc.db, statedb, parent, block, true) + return v.tracer.CreateTraceEnvAndGetBlockTrace(v.config, v.bc, v.engine, v.bc.db, statedb, parent.Header(), block, true) } func (v *BlockValidator) validateCircuitRowConsumption(block *types.Block) (*types.RowConsumption, error) { diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index 02e26c6a4f..c8dcbfb7d5 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -23,7 +23,7 @@ type TraceBlock interface { } type scrollTracerWrapper interface { - CreateTraceEnvAndGetBlockTrace(*params.ChainConfig, core.ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Block, *types.Block, bool) (*types.BlockTrace, error) + CreateTraceEnvAndGetBlockTrace(*params.ChainConfig, core.ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Header, *types.Block, bool) (*types.BlockTrace, error) } // GetBlockTraceByNumberOrHash replays the block and returns the structured BlockTrace by hash or number. @@ -108,5 +108,5 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac defer release() chaindb := api.backend.ChainDb() - return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(api.backend.ChainConfig(), api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) + return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(api.backend.ChainConfig(), api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent.Header(), block, true) } diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index 09a336e624..4e9760fa9d 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -36,8 +36,8 @@ func NewTracerWrapper() *TracerWrapper { } // CreateTraceEnvAndGetBlockTrace wraps the whole block tracing logic for a block -func (tw *TracerWrapper) CreateTraceEnvAndGetBlockTrace(chainConfig *params.ChainConfig, chainContext core.ChainContext, engine consensus.Engine, chaindb ethdb.Database, statedb *state.StateDB, parent *types.Block, block *types.Block, commitAfterApply bool) (*types.BlockTrace, error) { - traceEnv, err := CreateTraceEnv(chainConfig, chainContext, engine, chaindb, statedb, parent, block, commitAfterApply) +func (tw *TracerWrapper) CreateTraceEnvAndGetBlockTrace(chainConfig *params.ChainConfig, chainContext core.ChainContext, engine consensus.Engine, chaindb ethdb.Database, statedb *state.StateDB, parentHeader *types.Header, block *types.Block, finaliseStateAfterApply bool) (*types.BlockTrace, error) { + traceEnv, err := CreateTraceEnv(chainConfig, chainContext, engine, chaindb, statedb, parentHeader, block, finaliseStateAfterApply) if err != nil { return nil, err } @@ -46,9 +46,9 @@ func (tw *TracerWrapper) CreateTraceEnvAndGetBlockTrace(chainConfig *params.Chai } type TraceEnv struct { - logConfig *logger.Config - commitAfterApply bool - chainConfig *params.ChainConfig + logConfig *logger.Config + finaliseStateAfterApply bool + chainConfig *params.ChainConfig coinbase common.Address @@ -88,15 +88,15 @@ type txTraceTask struct { index int } -func CreateTraceEnvHelper(chainConfig *params.ChainConfig, logConfig *logger.Config, blockCtx vm.BlockContext, startL1QueueIndex uint64, coinbase common.Address, statedb *state.StateDB, rootBefore common.Hash, block *types.Block, commitAfterApply bool) *TraceEnv { +func CreateTraceEnvHelper(chainConfig *params.ChainConfig, logConfig *logger.Config, blockCtx vm.BlockContext, startL1QueueIndex uint64, coinbase common.Address, statedb *state.StateDB, rootBefore common.Hash, block *types.Block, finaliseStateAfterApply bool) *TraceEnv { return &TraceEnv{ - logConfig: logConfig, - commitAfterApply: commitAfterApply, - chainConfig: chainConfig, - coinbase: coinbase, - signer: types.MakeSigner(chainConfig, block.Number(), block.Time()), - state: statedb, - blockCtx: blockCtx, + logConfig: logConfig, + finaliseStateAfterApply: finaliseStateAfterApply, + chainConfig: chainConfig, + coinbase: coinbase, + signer: types.MakeSigner(chainConfig, block.Number(), block.Time()), + state: statedb, + blockCtx: blockCtx, StorageTrace: &types.StorageTrace{ RootBefore: rootBefore, RootAfter: block.Root(), @@ -110,7 +110,7 @@ func CreateTraceEnvHelper(chainConfig *params.ChainConfig, logConfig *logger.Con } } -func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainContext, engine consensus.Engine, chaindb ethdb.Database, statedb *state.StateDB, parent *types.Block, block *types.Block, commitAfterApply bool) (*TraceEnv, error) { +func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainContext, engine consensus.Engine, chaindb ethdb.Database, statedb *state.StateDB, parentHeader *types.Header, block *types.Block, finaliseStateAfterApply bool) (*TraceEnv, error) { var coinbase common.Address var err error @@ -134,10 +134,10 @@ func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainCont // block `C`. // `ReadFirstQueueIndexNotInL1Block(B)` will return the correct value // `10` on follower nodes. - startL1QueueIndex := rawdb.ReadFirstQueueIndexNotInL2Block(chaindb, parent.Hash()) + startL1QueueIndex := rawdb.ReadFirstQueueIndexNotInL2Block(chaindb, parentHeader.Hash()) if startL1QueueIndex == nil { - log.Error("missing FirstQueueIndexNotInL2Block for block during trace call", "number", parent.NumberU64(), "hash", parent.Hash()) - return nil, fmt.Errorf("missing FirstQueueIndexNotInL2Block for block during trace call: hash=%v, parentHash=%vv", block.Hash(), parent.Hash()) + log.Error("missing FirstQueueIndexNotInL2Block for block during trace call", "number", parentHeader.Number.Uint64(), "hash", parentHeader.Hash()) + return nil, fmt.Errorf("missing FirstQueueIndexNotInL2Block for block during trace call: hash=%v, parentHash=%vv", block.Hash(), parentHeader.Hash()) } env := CreateTraceEnvHelper( chainConfig, @@ -150,9 +150,9 @@ func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainCont *startL1QueueIndex, coinbase, statedb, - parent.Root(), + parentHeader.Root, block, - commitAfterApply, + finaliseStateAfterApply, ) key := coinbase.String() @@ -222,7 +222,7 @@ func (env *TraceEnv) GetBlockTrace(block *types.Block) (*types.BlockTrace, error failed = err break } - if env.commitAfterApply { + if env.finaliseStateAfterApply { env.state.Finalise(vmenv.ChainConfig().IsEIP158(block.Number())) } }