core/state: simplify hooked db Finalise method

This commit is contained in:
lightclient 2026-01-16 12:30:25 -07:00
parent 2f6ba1f9da
commit fb1edbf02d
No known key found for this signature in database
GPG key ID: 657913021EF45A6A

View file

@ -232,20 +232,29 @@ func (s *hookedStateDB) AddLog(log *types.Log) {
} }
func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) { func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) {
callHooks := s.hooks.OnBalanceChange != nil || if s.hooks.OnBalanceChange == nil && s.hooks.OnNonceChangeV2 == nil && s.hooks.OnNonceChange == nil && s.hooks.OnCodeChangeV2 == nil && s.hooks.OnCodeChange == nil {
s.hooks.OnNonceChangeV2 != nil || s.hooks.OnNonceChange != nil || // Short circuit if no relevant hooks are set.
s.hooks.OnCodeChangeV2 != nil || s.hooks.OnCodeChange != nil s.inner.Finalise(deleteEmptyObjects)
return
}
if callHooks { // Iterate all dirty addresses and record self-destructs.
for addr := range s.inner.journal.dirties { for addr := range s.inner.journal.dirties {
obj := s.inner.stateObjects[addr] obj := s.inner.stateObjects[addr]
if obj != nil && obj.selfDestructed { if obj == nil || !obj.selfDestructed {
// If ether was sent to account post-selfdestruct it is burnt. // Not self-destructed, keep searching.
continue
}
// Bingo: state object was self-destructed, call relevant hooks.
// If ether was sent to account post-selfdestruct, record as burnt.
if s.hooks.OnBalanceChange != nil { if s.hooks.OnBalanceChange != nil {
if bal := obj.Balance(); bal.Sign() != 0 { if bal := obj.Balance(); bal.Sign() != 0 {
s.hooks.OnBalanceChange(addr, bal.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestructBurn) s.hooks.OnBalanceChange(addr, bal.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestructBurn)
} }
} }
// Nonce is set to reset on self-destruct.
if s.hooks.OnNonceChangeV2 != nil { if s.hooks.OnNonceChangeV2 != nil {
s.hooks.OnNonceChangeV2(addr, obj.Nonce(), 0, tracing.NonceChangeSelfdestruct) s.hooks.OnNonceChangeV2(addr, obj.Nonce(), 0, tracing.NonceChangeSelfdestruct)
} else if s.hooks.OnNonceChange != nil { } else if s.hooks.OnNonceChange != nil {
@ -257,13 +266,13 @@ func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) {
if prevCodeHash == types.EmptyCodeHash { if prevCodeHash == types.EmptyCodeHash {
continue continue
} }
// Otherwise, trace the change.
if s.hooks.OnCodeChangeV2 != nil { if s.hooks.OnCodeChangeV2 != nil {
s.hooks.OnCodeChangeV2(addr, prevCodeHash, s.inner.GetCode(addr), types.EmptyCodeHash, nil, tracing.CodeChangeSelfDestruct) s.hooks.OnCodeChangeV2(addr, prevCodeHash, s.inner.GetCode(addr), types.EmptyCodeHash, nil, tracing.CodeChangeSelfDestruct)
} else if s.hooks.OnCodeChange != nil { } else if s.hooks.OnCodeChange != nil {
s.hooks.OnCodeChange(addr, prevCodeHash, s.inner.GetCode(addr), types.EmptyCodeHash, nil) s.hooks.OnCodeChange(addr, prevCodeHash, s.inner.GetCode(addr), types.EmptyCodeHash, nil)
} }
} }
}
}
s.inner.Finalise(deleteEmptyObjects) s.inner.Finalise(deleteEmptyObjects)
} }