// Create a state object whether it exist in the trie or not func (self *State) NewStateObject(addr []byte) *StateObject { addr = ethutil.Address(addr) statelogger.Infof("(+) %x\n", addr) stateObject := NewStateObject(addr) self.stateObjects[string(addr)] = stateObject return stateObject }
func NewStateObject(addr []byte) *StateObject { // This to ensure that it has 20 bytes (and not 0 bytes), thus left or right pad doesn't matter. address := ethutil.Address(addr) object := &StateObject{address: address, Balance: new(big.Int), gasPool: new(big.Int)} object.State = New(ethtrie.New(ethutil.Config.Db, "")) object.storage = make(Storage) object.gasPool = new(big.Int) return object }
// Retrieve a state object given my the address. Nil if not found func (self *State) GetStateObject(addr []byte) *StateObject { addr = ethutil.Address(addr) stateObject := self.stateObjects[string(addr)] if stateObject != nil { return stateObject } data := self.Trie.Get(string(addr)) if len(data) == 0 { return nil } stateObject = NewStateObjectFromBytes(addr, []byte(data)) self.stateObjects[string(addr)] = stateObject return stateObject }