Removal of manual updating of state objects
* You'll only ever need to update the state by calling Update. Update will take care of the updating of it's child state objects.
This commit is contained in:
@ -38,12 +38,16 @@ func (s *State) Reset() {
|
||||
|
||||
stateObject.state.Reset()
|
||||
}
|
||||
|
||||
s.Empty()
|
||||
}
|
||||
|
||||
// Syncs the trie and all siblings
|
||||
func (s *State) Sync() {
|
||||
// Sync all nested states
|
||||
for _, stateObject := range s.stateObjects {
|
||||
s.UpdateStateObject(stateObject)
|
||||
|
||||
if stateObject.state == nil {
|
||||
continue
|
||||
}
|
||||
@ -52,6 +56,18 @@ func (s *State) Sync() {
|
||||
}
|
||||
|
||||
s.trie.Sync()
|
||||
|
||||
s.Empty()
|
||||
}
|
||||
|
||||
func (self *State) Empty() {
|
||||
self.stateObjects = make(map[string]*StateObject)
|
||||
}
|
||||
|
||||
func (self *State) Update() {
|
||||
for _, stateObject := range self.stateObjects {
|
||||
self.UpdateStateObject(stateObject)
|
||||
}
|
||||
}
|
||||
|
||||
// Purges the current trie.
|
||||
@ -68,6 +84,7 @@ func (self *State) UpdateStateObject(stateObject *StateObject) {
|
||||
addr := stateObject.Address()
|
||||
|
||||
if self.stateObjects[string(addr)] == nil {
|
||||
panic("?")
|
||||
self.stateObjects[string(addr)] = stateObject
|
||||
}
|
||||
|
||||
@ -98,13 +115,19 @@ func (self *State) GetStateObject(addr []byte) *StateObject {
|
||||
func (self *State) GetOrNewStateObject(addr []byte) *StateObject {
|
||||
stateObject := self.GetStateObject(addr)
|
||||
if stateObject == nil {
|
||||
stateObject = NewStateObject(addr)
|
||||
self.stateObjects[string(addr)] = stateObject
|
||||
stateObject = self.NewStateObject(addr)
|
||||
}
|
||||
|
||||
return stateObject
|
||||
}
|
||||
|
||||
func (self *State) NewStateObject(addr []byte) *StateObject {
|
||||
stateObject := NewStateObject(addr)
|
||||
self.stateObjects[string(addr)] = stateObject
|
||||
|
||||
return stateObject
|
||||
}
|
||||
|
||||
func (self *State) GetAccount(addr []byte) *StateObject {
|
||||
return self.GetOrNewStateObject(addr)
|
||||
}
|
||||
|
Reference in New Issue
Block a user