mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 12:16:44 +00:00
core/state: simplify hooked db Finalise method
This commit is contained in:
parent
2f6ba1f9da
commit
fb1edbf02d
1 changed files with 37 additions and 28 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue