From 7e120c62918910ce982082fabcbd33f9d70ed9de Mon Sep 17 00:00:00 2001 From: sonhv0212 Date: Wed, 28 May 2025 14:41:53 +0700 Subject: [PATCH 1/2] core/vm/runtime: call OnTxStart before prepare state DB in Call --- core/vm/runtime/runtime.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/vm/runtime/runtime.go b/core/vm/runtime/runtime.go index 4893326a5..1e09f2340 100644 --- a/core/vm/runtime/runtime.go +++ b/core/vm/runtime/runtime.go @@ -194,13 +194,13 @@ func Call(address common.Address, input []byte, cfg *Config) ([]byte, uint64, er statedb = cfg.State rules = cfg.ChainConfig.Rules(vmenv.Context.BlockNumber) ) + if cfg.EVMConfig.Tracer != nil && cfg.EVMConfig.Tracer.OnTxStart != nil { + cfg.EVMConfig.Tracer.OnTxStart(vmenv.GetVMContext(), types.NewTx(&types.LegacyTx{To: &address, Data: input, Value: cfg.Value, Gas: cfg.GasLimit}), cfg.Origin) + } // Execute the preparatory steps for state transition which includes: // - prepare accessList(post-berlin) // - reset transient storage(eip 1153) statedb.Prepare(rules, cfg.Origin, cfg.Coinbase, &address, vm.ActivePrecompiles(rules), nil) - if cfg.EVMConfig.Tracer != nil && cfg.EVMConfig.Tracer.OnTxStart != nil { - cfg.EVMConfig.Tracer.OnTxStart(vmenv.GetVMContext(), types.NewTx(&types.LegacyTx{To: &address, Data: input, Value: cfg.Value, Gas: cfg.GasLimit}), cfg.Origin) - } // Call the code with the given configuration. ret, leftOverGas, err := vmenv.Call( From 56bc9d87e312593976208e9eb71470260f0c1103 Mon Sep 17 00:00:00 2001 From: sonhv0212 Date: Wed, 28 May 2025 13:54:34 +0700 Subject: [PATCH 2/2] core/state: simplify state selfdestruct --- core/state/statedb.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/state/statedb.go b/core/state/statedb.go index f7f7702dd..c23210912 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -493,13 +493,13 @@ func (s *StateDB) SelfDestruct(addr common.Address) bool { s.journal.append(selfDestructChange{ account: &addr, prev: stateObject.selfDestructed, - prevbalance: new(big.Int).Set(stateObject.Balance()), + prevbalance: prev, }) if s.logger != nil && s.logger.OnBalanceChange != nil && prev.Sign() > 0 { s.logger.OnBalanceChange(addr, prev, n, tracing.BalanceDecreaseSelfdestruct) } stateObject.markSelfdestructed() - stateObject.data.Balance = new(big.Int) + stateObject.data.Balance = n return true }