Update statedb_hooked.go

This commit is contained in:
forkfury 2026-01-19 19:03:13 +01:00 committed by GitHub
parent d0af257aa2
commit 1e4d5dfc07
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -17,7 +17,9 @@
package state
import (
"bytes"
"math/big"
"sort"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/stateless"
@ -234,13 +236,25 @@ func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) {
return
}
// Iterate all dirty addresses and record self-destructs.
// Collect all self-destructed addresses first, then sort them to ensure
// deterministic ordering when emitting hooks.
var selfDestructedAddrs []common.Address
for addr := range s.inner.journal.dirties {
obj := s.inner.stateObjects[addr]
if obj == nil || !obj.selfDestructed {
// Not self-destructed, keep searching.
continue
}
selfDestructedAddrs = append(selfDestructedAddrs, addr)
}
// Sort addresses to ensure deterministic hook emission order.
sort.Slice(selfDestructedAddrs, func(i, j int) bool {
return bytes.Compare(selfDestructedAddrs[i][:], selfDestructedAddrs[j][:]) < 0
})
// Iterate over sorted addresses and record self-destructs.
for _, addr := range selfDestructedAddrs {
obj := s.inner.stateObjects[addr]
// Bingo: state object was self-destructed, call relevant hooks.
// If ether was sent to account post-selfdestruct, record as burnt.