From b423f02593e07016f85634533ccae0e8d8e077ca Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 19 Jun 2024 10:27:31 +0800 Subject: [PATCH 01/14] xx --- eth/tracers/api_blocktrace.go | 10 +++++++++- go.mod | 1 + go.sum | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index a52daa29983d..bc7de0bec2f9 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -3,7 +3,9 @@ package tracers import ( "context" "errors" + "fmt" + "dario.cat/mergo" "github.com/scroll-tech/go-ethereum/consensus" "github.com/scroll-tech/go-ethereum/core" "github.com/scroll-tech/go-ethereum/core/state" @@ -109,5 +111,11 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac } chaindb := api.backend.ChainDb() - return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(api.backend.ChainConfig(), api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) + chainConfig := new(params.ChainConfig) + *chainConfig = *api.backend.ChainConfig() + if config != nil && config.Overrides != nil { + mergo.Merge(&chainConfig, config.Overrides, mergo.WithOverride) + fmt.Printf("trace config overrided: %v, config.Overrides: %v", chainConfig, config.Overrides) + } + return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(chainConfig, api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) } diff --git a/go.mod b/go.mod index 92ffd5b23362..1a6026a188a9 100644 --- a/go.mod +++ b/go.mod @@ -68,6 +68,7 @@ require ( ) require ( + dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-pipeline-go v0.2.2 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 // indirect diff --git a/go.sum b/go.sum index a6255b577a02..f717c07dd638 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,8 @@ cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= From 157521166bab10335ddc1ed18b99c4b19a5cc275 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 19 Jun 2024 10:57:20 +0800 Subject: [PATCH 02/14] apply curie --- eth/tracers/api_blocktrace.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index bc7de0bec2f9..efe378551f9d 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -7,6 +7,7 @@ import ( "dario.cat/mergo" "github.com/scroll-tech/go-ethereum/consensus" + "github.com/scroll-tech/go-ethereum/consensus/misc" "github.com/scroll-tech/go-ethereum/core" "github.com/scroll-tech/go-ethereum/core/state" "github.com/scroll-tech/go-ethereum/core/types" @@ -114,7 +115,13 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac chainConfig := new(params.ChainConfig) *chainConfig = *api.backend.ChainConfig() if config != nil && config.Overrides != nil { + // the merge.Merge seems not work well mergo.Merge(&chainConfig, config.Overrides, mergo.WithOverride) + if curie := config.Overrides.CurieBlock; curie != nil { + chainConfig.CurieBlock = curie + misc.ApplyCurieHardFork(statedb) + statedb.Commit(true) + } fmt.Printf("trace config overrided: %v, config.Overrides: %v", chainConfig, config.Overrides) } return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(chainConfig, api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) From 52f3de7049a46cf398350aed1f9ebe7ee4d9c7e3 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Wed, 19 Jun 2024 11:07:41 +0800 Subject: [PATCH 03/14] fix --- eth/tracers/api_blocktrace.go | 3 +-- rollup/tracing/tracing.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index efe378551f9d..ba4e897497d5 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" - "dario.cat/mergo" "github.com/scroll-tech/go-ethereum/consensus" "github.com/scroll-tech/go-ethereum/consensus/misc" "github.com/scroll-tech/go-ethereum/core" @@ -116,7 +115,7 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac *chainConfig = *api.backend.ChainConfig() if config != nil && config.Overrides != nil { // the merge.Merge seems not work well - mergo.Merge(&chainConfig, config.Overrides, mergo.WithOverride) + // mergo.Merge(&chainConfig, config.Overrides, mergo.WithOverride) if curie := config.Overrides.CurieBlock; curie != nil { chainConfig.CurieBlock = curie misc.ApplyCurieHardFork(statedb) diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index b8cf5eba939d..250e46d93eb0 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -160,7 +160,7 @@ func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainCont *startL1QueueIndex, coinbase, statedb, - parent.Root(), + statedb.GetRootHash(), block, commitAfterApply, ) From 77c4c343b2af6932839557bf54aa9e357896abaa Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Wed, 19 Jun 2024 13:45:24 +0800 Subject: [PATCH 04/14] improve logs --- eth/tracers/api_blocktrace.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index ba4e897497d5..194bf59b1b1c 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -3,7 +3,6 @@ package tracers import ( "context" "errors" - "fmt" "github.com/scroll-tech/go-ethereum/consensus" "github.com/scroll-tech/go-ethereum/consensus/misc" @@ -111,17 +110,18 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac } chaindb := api.backend.ChainDb() + // create a copy of api.backend.ChainConfig to modify chainConfig := new(params.ChainConfig) *chainConfig = *api.backend.ChainConfig() if config != nil && config.Overrides != nil { // the merge.Merge seems not work well - // mergo.Merge(&chainConfig, config.Overrides, mergo.WithOverride) + // mergo.Merge(chainConfig, config.Overrides, mergo.WithOverride) if curie := config.Overrides.CurieBlock; curie != nil { chainConfig.CurieBlock = curie misc.ApplyCurieHardFork(statedb) statedb.Commit(true) } - fmt.Printf("trace config overrided: %v, config.Overrides: %v", chainConfig, config.Overrides) + log.Info("chainConfig overrided by traceConfig.Overrides", "chainConfig", chainConfig, "config.Overrides", config.Overrides) } return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(chainConfig, api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) } From 4a4eef7d3338f58db83bf4b833be937049da0714 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Wed, 19 Jun 2024 14:11:12 +0800 Subject: [PATCH 05/14] add comments --- rollup/tracing/tracing.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index 250e46d93eb0..93feb4711698 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -160,7 +160,7 @@ func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainCont *startL1QueueIndex, coinbase, statedb, - statedb.GetRootHash(), + statedb.GetRootHash(), // use `statedb.GetRootHash()` instead of `parent.Root()` because statedb might be overrided block, commitAfterApply, ) From b57034dfff0b14640ea852d626b568f44b46b804 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Wed, 19 Jun 2024 14:29:01 +0800 Subject: [PATCH 06/14] fix #683 --- core/block_validator.go | 5 +++-- eth/tracers/api_blocktrace.go | 4 ++-- rollup/pipeline/pipeline.go | 2 +- rollup/tracing/tracing.go | 22 +++++++++++++--------- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/core/block_validator.go b/core/block_validator.go index 6773649c6d13..4f07f5022260 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -26,6 +26,7 @@ import ( "github.com/scroll-tech/go-ethereum/core/rawdb" "github.com/scroll-tech/go-ethereum/core/state" "github.com/scroll-tech/go-ethereum/core/types" + "github.com/scroll-tech/go-ethereum/core/vm" "github.com/scroll-tech/go-ethereum/ethdb" "github.com/scroll-tech/go-ethereum/log" "github.com/scroll-tech/go-ethereum/metrics" @@ -69,7 +70,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, *vm.LogConfig, ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Block, *types.Block, bool) (*types.BlockTrace, error) } func (v *BlockValidator) SetupTracerAndCircuitCapacityChecker(tracer tracerWrapper) { @@ -298,7 +299,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, nil, v.bc, v.engine, v.bc.db, statedb, parent, 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 194bf59b1b1c..9f3db94eda4f 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -24,7 +24,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, *vm.LogConfig, core.ChainContext, consensus.Engine, ethdb.Database, *state.StateDB, *types.Block, *types.Block, bool) (*types.BlockTrace, error) } // GetBlockTraceByNumberOrHash replays the block and returns the structured BlockTrace by hash or number. @@ -123,5 +123,5 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac } log.Info("chainConfig overrided by traceConfig.Overrides", "chainConfig", chainConfig, "config.Overrides", config.Overrides) } - return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(chainConfig, api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) + return api.scrollTracerWrapper.CreateTraceEnvAndGetBlockTrace(chainConfig, config.LogConfig, api.chainContext(ctx), api.backend.Engine(), chaindb, statedb, parent, block, true) } diff --git a/rollup/pipeline/pipeline.go b/rollup/pipeline/pipeline.go index 787b176e00e1..f75f62e5c262 100644 --- a/rollup/pipeline/pipeline.go +++ b/rollup/pipeline/pipeline.go @@ -479,7 +479,7 @@ func (p *Pipeline) traceAndApply(tx *types.Transaction) (*types.Receipt, *types. // 2.1 when starting handling the first tx, `state.refund` is 0 by default, // 2.2 after tracing, the state is either committed in `core.ApplyTransaction`, or reverted, so the `state.refund` can be cleared, // 2.3 when starting handling the following txs, `state.refund` comes as 0 - trace, err = tracing.NewTracerWrapper().CreateTraceEnvAndGetBlockTrace(p.chain.Config(), p.chain, p.chain.Engine(), p.chain.Database(), + trace, err = tracing.NewTracerWrapper().CreateTraceEnvAndGetBlockTrace(p.chain.Config(), nil, p.chain, p.chain.Engine(), p.chain.Database(), p.state, p.parent, types.NewBlockWithHeader(&p.Header).WithBody([]*types.Transaction{tx}, nil), commitStateAfterApply) // `w.current.traceEnv.State` & `w.current.state` share a same pointer to the state, so only need to revert `w.current.state` // revert to snapshot for calling `core.ApplyMessage` again, (both `traceEnv.GetBlockTrace` & `core.ApplyTransaction` will call `core.ApplyMessage`) diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index 93feb4711698..3d73b5dcb084 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -45,8 +45,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, logConfig *vm.LogConfig, 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, logConfig, chainContext, engine, chaindb, statedb, parent, block, commitAfterApply) if err != nil { return nil, err } @@ -98,6 +98,15 @@ type txTraceTask struct { } func CreateTraceEnvHelper(chainConfig *params.ChainConfig, logConfig *vm.LogConfig, blockCtx vm.BlockContext, startL1QueueIndex uint64, coinbase common.Address, statedb *state.StateDB, rootBefore common.Hash, block *types.Block, commitAfterApply bool) *TraceEnv { + if logConfig == nil { + logConfig = &vm.LogConfig{ + DisableStorage: true, + DisableStack: true, + EnableMemory: false, + EnableReturnData: true, + } + } + return &TraceEnv{ logConfig: logConfig, commitAfterApply: commitAfterApply, @@ -119,7 +128,7 @@ func CreateTraceEnvHelper(chainConfig *params.ChainConfig, logConfig *vm.LogConf } } -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, logConfig *vm.LogConfig, chainContext core.ChainContext, engine consensus.Engine, chaindb ethdb.Database, statedb *state.StateDB, parent *types.Block, block *types.Block, commitAfterApply bool) (*TraceEnv, error) { var coinbase common.Address var err error @@ -150,12 +159,7 @@ func CreateTraceEnv(chainConfig *params.ChainConfig, chainContext core.ChainCont } env := CreateTraceEnvHelper( chainConfig, - &vm.LogConfig{ - DisableStorage: true, - DisableStack: true, - EnableMemory: false, - EnableReturnData: true, - }, + logConfig, core.NewEVMBlockContext(block.Header(), chainContext, chainConfig, nil), *startL1QueueIndex, coinbase, From 3d763586d71d4cca2ce7245eaef21d16843a7888 Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Wed, 19 Jun 2024 06:31:02 +0000 Subject: [PATCH 07/14] =?UTF-8?q?chore:=20auto=20version=20bump=E2=80=89[b?= =?UTF-8?q?ot]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- params/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/version.go b/params/version.go index 0267ef380a42..620583445b26 100644 --- a/params/version.go +++ b/params/version.go @@ -24,7 +24,7 @@ import ( const ( VersionMajor = 5 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 4 // Patch version component of the current release + VersionPatch = 5 // Patch version component of the current release VersionMeta = "mainnet" // Version metadata to append to the version string ) From 55202d8269269ded29236440cd3561df194171dc Mon Sep 17 00:00:00 2001 From: HAOYUatHZ Date: Wed, 19 Jun 2024 14:33:25 +0800 Subject: [PATCH 08/14] go mod tidy --- go.mod | 1 - go.sum | 2 -- 2 files changed, 3 deletions(-) diff --git a/go.mod b/go.mod index 1a6026a188a9..92ffd5b23362 100644 --- a/go.mod +++ b/go.mod @@ -68,7 +68,6 @@ require ( ) require ( - dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-pipeline-go v0.2.2 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 // indirect diff --git a/go.sum b/go.sum index f717c07dd638..a6255b577a02 100644 --- a/go.sum +++ b/go.sum @@ -17,8 +17,6 @@ cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+ cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= From 2a88fa7644b1664e6c71be03393ad606b4c65578 Mon Sep 17 00:00:00 2001 From: noelwei Date: Wed, 19 Jun 2024 17:51:16 +0900 Subject: [PATCH 09/14] fix issue caused by unmatching storage value --- rollup/tracing/tracing.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index b8cf5eba939d..f245afd6d400 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -428,10 +428,11 @@ func (env *TraceEnv) getTxResult(state *state.StateDB, index int, block *types.B zktrieTracer := state.NewProofTracer(trie) env.sMu.Unlock() - for key, values := range keys { + for key, _ := range keys { addrStr := addr.String() keyStr := key.String() - isDelete := bytes.Equal(values.Bytes(), common.Hash{}.Bytes()) + value := state.GetState(addr, key) + isDelete := bytes.Equal(value.Bytes(), common.Hash{}.Bytes()) txm := txStorageTrace.StorageProofs[addrStr] env.sMu.Lock() From cced17b3a8fe878a2c5087f955d7542048816880 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Thu, 20 Jun 2024 06:23:54 +0000 Subject: [PATCH 10/14] fix --- eth/tracers/api_blocktrace.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index 9f3db94eda4f..af8e898fc791 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -114,12 +114,10 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac chainConfig := new(params.ChainConfig) *chainConfig = *api.backend.ChainConfig() if config != nil && config.Overrides != nil { - // the merge.Merge seems not work well - // mergo.Merge(chainConfig, config.Overrides, mergo.WithOverride) if curie := config.Overrides.CurieBlock; curie != nil { chainConfig.CurieBlock = curie misc.ApplyCurieHardFork(statedb) - statedb.Commit(true) + statedb.IntermediateRoot(true) } log.Info("chainConfig overrided by traceConfig.Overrides", "chainConfig", chainConfig, "config.Overrides", config.Overrides) } From 5dd715266fe5a47053304ae37c62d50b71568f57 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 20 Jun 2024 14:39:20 +0800 Subject: [PATCH 11/14] clean code --- eth/tracers/api_blocktrace.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index af8e898fc791..945879d13a64 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -114,10 +114,15 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac chainConfig := new(params.ChainConfig) *chainConfig = *api.backend.ChainConfig() if config != nil && config.Overrides != nil { + // In future we can add more fork related logics here + // like upstream: https://github.com/ethereum/go-ethereum/pull/26655 if curie := config.Overrides.CurieBlock; curie != nil { chainConfig.CurieBlock = curie - misc.ApplyCurieHardFork(statedb) - statedb.IntermediateRoot(true) + if block.Number().Cmp(curie) > 0 { + // set non zero values for these slots + misc.ApplyCurieHardFork(statedb) + statedb.IntermediateRoot(true) + } } log.Info("chainConfig overrided by traceConfig.Overrides", "chainConfig", chainConfig, "config.Overrides", config.Overrides) } From aea06ec6074074dad30afae08096697e357267c6 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Thu, 20 Jun 2024 14:48:29 +0800 Subject: [PATCH 12/14] revert deletion proof fix --- rollup/tracing/tracing.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/rollup/tracing/tracing.go b/rollup/tracing/tracing.go index 095a2782b225..3d73b5dcb084 100644 --- a/rollup/tracing/tracing.go +++ b/rollup/tracing/tracing.go @@ -432,11 +432,10 @@ func (env *TraceEnv) getTxResult(state *state.StateDB, index int, block *types.B zktrieTracer := state.NewProofTracer(trie) env.sMu.Unlock() - for key, _ := range keys { + for key, values := range keys { addrStr := addr.String() keyStr := key.String() - value := state.GetState(addr, key) - isDelete := bytes.Equal(value.Bytes(), common.Hash{}.Bytes()) + isDelete := bytes.Equal(values.Bytes(), common.Hash{}.Bytes()) txm := txStorageTrace.StorageProofs[addrStr] env.sMu.Lock() From dda00300e2f4c42c1b492e891fc597654d46ab19 Mon Sep 17 00:00:00 2001 From: Zhang Zhuo Date: Fri, 21 Jun 2024 10:16:19 +0800 Subject: [PATCH 13/14] address comments --- eth/tracers/api_blocktrace.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/tracers/api_blocktrace.go b/eth/tracers/api_blocktrace.go index 945879d13a64..1cee690fee31 100644 --- a/eth/tracers/api_blocktrace.go +++ b/eth/tracers/api_blocktrace.go @@ -118,7 +118,7 @@ func (api *API) createTraceEnvAndGetBlockTrace(ctx context.Context, config *Trac // like upstream: https://github.com/ethereum/go-ethereum/pull/26655 if curie := config.Overrides.CurieBlock; curie != nil { chainConfig.CurieBlock = curie - if block.Number().Cmp(curie) > 0 { + if !api.backend.ChainConfig().IsCurie(block.Number()) && block.Number().Cmp(curie) > 0 { // set non zero values for these slots misc.ApplyCurieHardFork(statedb) statedb.IntermediateRoot(true) From 243f7e7e50f0f69522f1b5e199c243b7c2995462 Mon Sep 17 00:00:00 2001 From: lispc Date: Fri, 21 Jun 2024 02:18:11 +0000 Subject: [PATCH 14/14] =?UTF-8?q?chore:=20auto=20version=20bump=E2=80=89[b?= =?UTF-8?q?ot]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- params/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/params/version.go b/params/version.go index 87e50a0db9c5..481197f291ec 100644 --- a/params/version.go +++ b/params/version.go @@ -24,7 +24,7 @@ import ( const ( VersionMajor = 5 // Major version component of the current release VersionMinor = 4 // Minor version component of the current release - VersionPatch = 6 // Patch version component of the current release + VersionPatch = 7 // Patch version component of the current release VersionMeta = "mainnet" // Version metadata to append to the version string )