diff --git a/core/state/journal.go b/core/state/journal.go index ea2a6ae6ee..1722fb4c02 100644 --- a/core/state/journal.go +++ b/core/state/journal.go @@ -90,7 +90,6 @@ type ( account *common.Address } resetObjectChange struct { - account *common.Address prev *stateObject prevdestruct bool } @@ -163,7 +162,7 @@ func (ch resetObjectChange) revert(s *StateDB) { } func (ch resetObjectChange) dirtied() *common.Address { - return ch.account + return nil } func (ch suicideChange) revert(s *StateDB) { diff --git a/core/state/statedb.go b/core/state/statedb.go index 0f5b50d2f7..9dc3b9839f 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -623,15 +623,19 @@ func (s *StateDB) GetOrNewStateObject(addr common.Address) *stateObject { // the given address, it is overwritten and returned as the second return value. func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) { prev = s.getDeletedStateObject(addr) // Note, prev might have been deleted, we need that! + + var prevdestruct bool + if prev != nil { + _, prevdestruct = s.stateObjectsDestruct[prev.address] + if !prevdestruct { + s.stateObjectsDestruct[prev.address] = struct{}{} + } + } newobj = newObject(s, addr, types.StateAccount{}) if prev == nil { s.journal.append(createObjectChange{account: &addr}) } else { - _, prevdestruct := s.stateObjectsDestruct[prev.address] - if !prevdestruct { - s.stateObjectsDestruct[prev.address] = struct{}{} - } - s.journal.append(resetObjectChange{account: &addr, prev: prev, prevdestruct: prevdestruct}) + s.journal.append(resetObjectChange{prev: prev, prevdestruct: prevdestruct}) } s.setStateObject(newobj) if prev != nil && !prev.deleted {