瀏覽代碼

core/state: removed state from state object

obscuren 10 年之前
父節點
當前提交
aa699a1283
共有 3 個文件被更改,包括 20 次插入31 次删除
  1. 3 3
      core/state/dump.go
  2. 15 18
      core/state/state_object.go
  3. 2 10
      core/state/statedb.go

+ 3 - 3
core/state/dump.go

@@ -34,7 +34,7 @@ func (self *StateDB) RawDump() World {
 		account := Account{Balance: stateObject.balance.String(), Nonce: stateObject.nonce, Root: common.Bytes2Hex(stateObject.Root()), CodeHash: common.Bytes2Hex(stateObject.codeHash)}
 		account.Storage = make(map[string]string)
 
-		storageIt := stateObject.State.trie.Iterator()
+		storageIt := stateObject.trie.Iterator()
 		for storageIt.Next() {
 			account.Storage[common.Bytes2Hex(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(storageIt.Value)
 		}
@@ -54,8 +54,8 @@ func (self *StateDB) Dump() []byte {
 
 // Debug stuff
 func (self *StateObject) CreateOutputForDiff() {
-	fmt.Printf("%x %x %x %x\n", self.Address(), self.State.Root(), self.balance.Bytes(), self.nonce)
-	it := self.State.trie.Iterator()
+	fmt.Printf("%x %x %x %x\n", self.Address(), self.Root(), self.balance.Bytes(), self.nonce)
+	it := self.trie.Iterator()
 	for it.Next() {
 		fmt.Printf("%x %x\n", it.Key, it.Value)
 	}

+ 15 - 18
core/state/state_object.go

@@ -40,9 +40,8 @@ func (self Storage) Copy() Storage {
 
 type StateObject struct {
 	// State database for storing state changes
-	db common.Database
-	// The state object
-	State *StateDB
+	db   common.Database
+	trie *trie.SecureTrie
 
 	// Address belonging to this account
 	address common.Address
@@ -75,7 +74,6 @@ type StateObject struct {
 
 func (self *StateObject) Reset() {
 	self.storage = make(Storage)
-	self.State.Reset()
 }
 
 func NewStateObject(address common.Address, db common.Database) *StateObject {
@@ -83,7 +81,7 @@ func NewStateObject(address common.Address, db common.Database) *StateObject {
 	//address := common.ToAddress(addr)
 
 	object := &StateObject{db: db, address: address, balance: new(big.Int), gasPool: new(big.Int), dirty: true}
-	object.State = New(common.Hash{}, db) //New(trie.New(common.Config.Db, ""))
+	object.trie = trie.NewSecure((common.Hash{}).Bytes(), db)
 	object.storage = make(Storage)
 	object.gasPool = new(big.Int)
 	object.prepaid = new(big.Int)
@@ -110,7 +108,7 @@ func NewStateObjectFromBytes(address common.Address, data []byte, db common.Data
 	object.nonce = extobject.Nonce
 	object.balance = extobject.Balance
 	object.codeHash = extobject.CodeHash
-	object.State = New(extobject.Root, db)
+	object.trie = trie.NewSecure(extobject.Root[:], db)
 	object.storage = make(map[string]common.Hash)
 	object.gasPool = new(big.Int)
 	object.prepaid = new(big.Int)
@@ -130,7 +128,7 @@ func (self *StateObject) MarkForDeletion() {
 
 func (c *StateObject) getAddr(addr common.Hash) common.Hash {
 	var ret []byte
-	rlp.DecodeBytes(c.State.trie.Get(addr[:]), &ret)
+	rlp.DecodeBytes(c.trie.Get(addr[:]), &ret)
 	return common.BytesToHash(ret)
 }
 
@@ -140,7 +138,7 @@ func (c *StateObject) setAddr(addr []byte, value common.Hash) {
 		// if RLPing failed we better panic and not fail silently. This would be considered a consensus issue
 		panic(err)
 	}
-	c.State.trie.Update(addr, v)
+	c.trie.Update(addr, v)
 }
 
 func (self *StateObject) Storage() Storage {
@@ -165,10 +163,11 @@ func (self *StateObject) SetState(k, value common.Hash) {
 	self.dirty = true
 }
 
-func (self *StateObject) Sync() {
+// Update updates the current cached storage to the trie
+func (self *StateObject) Update() {
 	for key, value := range self.storage {
 		if (value == common.Hash{}) {
-			self.State.trie.Delete([]byte(key))
+			self.trie.Delete([]byte(key))
 			continue
 		}
 
@@ -261,9 +260,7 @@ func (self *StateObject) Copy() *StateObject {
 	stateObject.balance.Set(self.balance)
 	stateObject.codeHash = common.CopyBytes(self.codeHash)
 	stateObject.nonce = self.nonce
-	if self.State != nil {
-		stateObject.State = self.State.Copy()
-	}
+	stateObject.trie = self.trie
 	stateObject.code = common.CopyBytes(self.code)
 	stateObject.initCode = common.CopyBytes(self.initCode)
 	stateObject.storage = self.storage.Copy()
@@ -301,11 +298,11 @@ func (c *StateObject) Init() Code {
 }
 
 func (self *StateObject) Trie() *trie.SecureTrie {
-	return self.State.trie
+	return self.trie
 }
 
 func (self *StateObject) Root() []byte {
-	return self.Trie().Root()
+	return self.trie.Root()
 }
 
 func (self *StateObject) Code() []byte {
@@ -337,10 +334,10 @@ func (self *StateObject) EachStorage(cb func(key, value []byte)) {
 		cb([]byte(h), v.Bytes())
 	}
 
-	it := self.State.trie.Iterator()
+	it := self.trie.Iterator()
 	for it.Next() {
 		// ignore cached values
-		key := self.State.trie.GetKey(it.Key)
+		key := self.trie.GetKey(it.Key)
 		if _, ok := self.storage[string(key)]; !ok {
 			cb(key, it.Value)
 		}
@@ -364,7 +361,7 @@ func (c *StateObject) RlpDecode(data []byte) {
 	decoder := common.NewValueFromBytes(data)
 	c.nonce = decoder.Get(0).Uint()
 	c.balance = decoder.Get(1).BigInt()
-	c.State = New(common.BytesToHash(decoder.Get(2).Bytes()), c.db) //New(trie.New(common.Config.Db, decoder.Get(2).Interface()))
+	c.trie = trie.NewSecure(decoder.Get(2).Bytes(), c.db)
 	c.storage = make(map[string]common.Hash)
 	c.gasPool = new(big.Int)
 

+ 2 - 10
core/state/statedb.go

@@ -296,10 +296,6 @@ func (s *StateDB) Reset() {
 
 	// Reset all nested states
 	for _, stateObject := range s.stateObjects {
-		if stateObject.State == nil {
-			continue
-		}
-
 		stateObject.Reset()
 	}
 
@@ -310,11 +306,7 @@ func (s *StateDB) Reset() {
 func (s *StateDB) Sync() {
 	// Sync all nested states
 	for _, stateObject := range s.stateObjects {
-		if stateObject.State == nil {
-			continue
-		}
-
-		stateObject.State.Sync()
+		stateObject.trie.Commit()
 	}
 
 	s.trie.Commit()
@@ -339,7 +331,7 @@ func (self *StateDB) Update() {
 			if stateObject.remove {
 				self.DeleteStateObject(stateObject)
 			} else {
-				stateObject.Sync()
+				stateObject.Update()
 
 				self.UpdateStateObject(stateObject)
 			}