Просмотр исходного кода

core/state: fixed (self)destructed objects

Add the object to the list of destructed objects during a selfdestruct /
suicide operation and also remove it from the list once the journal
reverts.
Jeffrey Wilcke 8 лет назад
Родитель
Сommit
e7119ce12d
2 измененных файлов с 9 добавлено и 2 удалено
  1. 7 2
      core/state/journal.go
  2. 2 0
      core/state/statedb.go

+ 7 - 2
core/state/journal.go

@@ -71,8 +71,8 @@ type (
 		hash common.Hash
 	}
 	touchChange struct {
-		account *common.Address
-		prev    bool
+		account   *common.Address
+		prev      bool
 		prevDirty bool
 	}
 )
@@ -91,6 +91,11 @@ func (ch suicideChange) undo(s *StateDB) {
 	if obj != nil {
 		obj.suicided = ch.prev
 		obj.setBalance(ch.prevbalance)
+		// if the object wasn't suicided before, remove
+		// it from the list of destructed objects as well.
+		if !obj.suicided {
+			delete(s.stateObjectsDestructed, *ch.account)
+		}
 	}
 }
 

+ 2 - 0
core/state/statedb.go

@@ -378,6 +378,8 @@ func (self *StateDB) Suicide(addr common.Address) bool {
 	})
 	stateObject.markSuicided()
 	stateObject.data.Balance = new(big.Int)
+	self.stateObjectsDestructed[addr] = struct{}{}
+
 	return true
 }