From 8c7526c28e1de3a67017ea36d2bbbc5be6f7833c Mon Sep 17 00:00:00 2001 From: Gary Rong Date: Mon, 21 Oct 2024 14:40:16 +0800 Subject: [PATCH] core/state: clean up --- core/state/statedb_hooked.go | 156 +++++------------------------------ 1 file changed, 19 insertions(+), 137 deletions(-) diff --git a/core/state/statedb_hooked.go b/core/state/statedb_hooked.go index 36047352a6eab..89b186fc0ee52 100644 --- a/core/state/statedb_hooked.go +++ b/core/state/statedb_hooked.go @@ -20,19 +20,16 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/stateless" "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/trie/utils" "github.com/holiman/uint256" ) // hookedStateDB represents a statedb which emits calls to tracing-hooks // on state operations. type hookedStateDB struct { - inner *StateDB + *StateDB hooks *tracing.Hooks } @@ -45,121 +42,9 @@ func NewHookedState(stateDb *StateDB, hooks *tracing.Hooks) *hookedStateDB { return s } -func (s *hookedStateDB) CreateAccount(addr common.Address) { - s.inner.CreateAccount(addr) -} - -func (s *hookedStateDB) CreateContract(addr common.Address) { - s.inner.CreateContract(addr) -} - -func (s *hookedStateDB) GetBalance(addr common.Address) *uint256.Int { - return s.inner.GetBalance(addr) -} - -func (s *hookedStateDB) GetNonce(addr common.Address) uint64 { - return s.inner.GetNonce(addr) -} - -func (s *hookedStateDB) GetCodeHash(addr common.Address) common.Hash { - return s.inner.GetCodeHash(addr) -} - -func (s *hookedStateDB) GetCode(addr common.Address) []byte { - return s.inner.GetCode(addr) -} - -func (s *hookedStateDB) GetCodeSize(addr common.Address) int { - return s.inner.GetCodeSize(addr) -} - -func (s *hookedStateDB) AddRefund(u uint64) { - s.inner.AddRefund(u) -} - -func (s *hookedStateDB) SubRefund(u uint64) { - s.inner.SubRefund(u) -} - -func (s *hookedStateDB) GetRefund() uint64 { - return s.inner.GetRefund() -} - -func (s *hookedStateDB) GetCommittedState(addr common.Address, hash common.Hash) common.Hash { - return s.inner.GetCommittedState(addr, hash) -} - -func (s *hookedStateDB) GetState(addr common.Address, hash common.Hash) common.Hash { - return s.inner.GetState(addr, hash) -} - -func (s *hookedStateDB) GetStorageRoot(addr common.Address) common.Hash { - return s.inner.GetStorageRoot(addr) -} - -func (s *hookedStateDB) GetTransientState(addr common.Address, key common.Hash) common.Hash { - return s.inner.GetTransientState(addr, key) -} - -func (s *hookedStateDB) SetTransientState(addr common.Address, key, value common.Hash) { - s.inner.SetTransientState(addr, key, value) -} - -func (s *hookedStateDB) HasSelfDestructed(addr common.Address) bool { - return s.inner.HasSelfDestructed(addr) -} - -func (s *hookedStateDB) Exist(addr common.Address) bool { - return s.inner.Exist(addr) -} - -func (s *hookedStateDB) Empty(addr common.Address) bool { - return s.inner.Empty(addr) -} - -func (s *hookedStateDB) AddressInAccessList(addr common.Address) bool { - return s.inner.AddressInAccessList(addr) -} - -func (s *hookedStateDB) SlotInAccessList(addr common.Address, slot common.Hash) (addressOk bool, slotOk bool) { - return s.inner.SlotInAccessList(addr, slot) -} - -func (s *hookedStateDB) AddAddressToAccessList(addr common.Address) { - s.inner.AddAddressToAccessList(addr) -} - -func (s *hookedStateDB) AddSlotToAccessList(addr common.Address, slot common.Hash) { - s.inner.AddSlotToAccessList(addr, slot) -} - -func (s *hookedStateDB) PointCache() *utils.PointCache { - return s.inner.PointCache() -} - -func (s *hookedStateDB) Prepare(rules params.Rules, sender, coinbase common.Address, dest *common.Address, precompiles []common.Address, txAccesses types.AccessList) { - s.inner.Prepare(rules, sender, coinbase, dest, precompiles, txAccesses) -} - -func (s *hookedStateDB) RevertToSnapshot(i int) { - s.inner.RevertToSnapshot(i) -} - -func (s *hookedStateDB) Snapshot() int { - return s.inner.Snapshot() -} - -func (s *hookedStateDB) AddPreimage(hash common.Hash, bytes []byte) { - s.inner.Snapshot() -} - -func (s *hookedStateDB) Witness() *stateless.Witness { - return s.inner.Witness() -} - func (s *hookedStateDB) SubBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int { - prev := s.inner.SubBalance(addr, amount, reason) - if s.hooks.OnBalanceChange != nil { + prev := s.StateDB.SubBalance(addr, amount, reason) + if s.hooks.OnBalanceChange != nil && !amount.IsZero() { newBalance := new(uint256.Int).Sub(&prev, amount) s.hooks.OnBalanceChange(addr, prev.ToBig(), newBalance.ToBig(), reason) } @@ -167,8 +52,8 @@ func (s *hookedStateDB) SubBalance(addr common.Address, amount *uint256.Int, rea } func (s *hookedStateDB) AddBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int { - prev := s.inner.AddBalance(addr, amount, reason) - if s.hooks.OnBalanceChange != nil { + prev := s.StateDB.AddBalance(addr, amount, reason) + if s.hooks.OnBalanceChange != nil && !amount.IsZero() { newBalance := new(uint256.Int).Add(&prev, amount) s.hooks.OnBalanceChange(addr, prev.ToBig(), newBalance.ToBig(), reason) } @@ -176,21 +61,21 @@ func (s *hookedStateDB) AddBalance(addr common.Address, amount *uint256.Int, rea } func (s *hookedStateDB) SetNonce(address common.Address, nonce uint64) { - s.inner.SetNonce(address, nonce) + s.StateDB.SetNonce(address, nonce) if s.hooks.OnNonceChange != nil { s.hooks.OnNonceChange(address, nonce-1, nonce) } } func (s *hookedStateDB) SetCode(address common.Address, code []byte) { - s.inner.SetCode(address, code) + s.StateDB.SetCode(address, code) if s.hooks.OnCodeChange != nil { s.hooks.OnCodeChange(address, types.EmptyCodeHash, nil, crypto.Keccak256Hash(code), code) } } func (s *hookedStateDB) SetState(address common.Address, key common.Hash, value common.Hash) common.Hash { - prev := s.inner.SetState(address, key, value) + prev := s.StateDB.SetState(address, key, value) if s.hooks.OnStorageChange != nil && prev != value { s.hooks.OnStorageChange(address, key, prev, value) } @@ -198,40 +83,37 @@ func (s *hookedStateDB) SetState(address common.Address, key common.Hash, value } func (s *hookedStateDB) SelfDestruct(address common.Address) uint256.Int { - prev := s.inner.SelfDestruct(address) - if !prev.IsZero() { - if s.hooks.OnBalanceChange != nil { - s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) - } + prev := s.StateDB.SelfDestruct(address) + if s.hooks.OnBalanceChange != nil && !prev.IsZero() { + s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) } return prev } func (s *hookedStateDB) Selfdestruct6780(address common.Address) uint256.Int { - prev := s.inner.Selfdestruct6780(address) - if !prev.IsZero() { - if s.hooks.OnBalanceChange != nil { - s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) - } + prev := s.StateDB.Selfdestruct6780(address) + if s.hooks.OnBalanceChange != nil && !prev.IsZero() { + s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) } return prev } func (s *hookedStateDB) AddLog(log *types.Log) { // The inner will modify the log (add fields), so invoke that first - s.inner.AddLog(log) + s.StateDB.AddLog(log) if s.hooks.OnLog != nil { s.hooks.OnLog(log) } } func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) { - defer s.inner.Finalise(deleteEmptyObjects) + defer s.StateDB.Finalise(deleteEmptyObjects) + if s.hooks.OnBalanceChange == nil { return } - for addr := range s.inner.journal.dirties { - obj := s.inner.stateObjects[addr] + for addr := range s.StateDB.journal.dirties { + obj := s.StateDB.stateObjects[addr] if obj != nil && obj.selfDestructed { // If ether was sent to account post-selfdestruct it is burnt. if bal := obj.Balance(); bal.Sign() != 0 {