diff --git a/core/state/statedb_hooked.go b/core/state/statedb_hooked.go index 55b53ded40..e13c02e220 100644 --- a/core/state/statedb_hooked.go +++ b/core/state/statedb_hooked.go @@ -198,22 +198,42 @@ func (s *hookedStateDB) SetState(address common.Address, key common.Hash, value } func (s *hookedStateDB) SelfDestruct(address common.Address) uint256.Int { + prevCode := s.inner.GetCode(address) + prevCodeHash := s.inner.GetCodeHash(address) prev := s.inner.SelfDestruct(address) + if !prev.IsZero() { if s.hooks.OnBalanceChange != nil { s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) } } + + if len(prevCode) > 0 { + if s.hooks.OnCodeChange != nil { + s.hooks.OnCodeChange(address, prevCodeHash, prevCode, types.EmptyCodeHash, nil) + } + } + return prev } func (s *hookedStateDB) SelfDestruct6780(address common.Address) (uint256.Int, bool) { + prevCodeHash := s.inner.GetCodeHash(address) + prevCode := s.inner.GetCode(address) prev, changed := s.inner.SelfDestruct6780(address) + if !prev.IsZero() && changed { if s.hooks.OnBalanceChange != nil { s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct) } } + + if len(prevCode) > 0 && changed { + if s.hooks.OnCodeChange != nil { + s.hooks.OnCodeChange(address, prevCodeHash, prevCode, types.EmptyCodeHash, nil) + } + } + return prev, changed }