diff options
author | obscuren <geffobscura@gmail.com> | 2015-02-27 01:39:05 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-02-27 03:08:35 +0800 |
commit | e235b57234a68a8a39cfe7691a1825d8c6bb3443 (patch) | |
tree | a9531d9e14c15abd72625a98a21a9b988dc32319 /state | |
parent | a1c830cd3c53bce7748d97e3f99fe6a90d526adb (diff) | |
download | dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar.gz dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar.bz2 dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar.lz dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar.xz dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.tar.zst dexon-e235b57234a68a8a39cfe7691a1825d8c6bb3443.zip |
Fixed consensus issue for refunding
* Refund should _always_ go to the origin
Diffstat (limited to 'state')
-rw-r--r-- | state/dump.go | 2 | ||||
-rw-r--r-- | state/state_object.go | 21 |
2 files changed, 16 insertions, 7 deletions
diff --git a/state/dump.go b/state/dump.go index 81895f1a3..073f89414 100644 --- a/state/dump.go +++ b/state/dump.go @@ -35,7 +35,7 @@ func (self *StateDB) Dump() []byte { storageIt := stateObject.State.trie.Iterator() for storageIt.Next() { - account.Storage[ethutil.Bytes2Hex(it.Key)] = ethutil.Bytes2Hex(it.Value) + account.Storage[ethutil.Bytes2Hex(storageIt.Key)] = ethutil.Bytes2Hex(storageIt.Value) } world.Accounts[ethutil.Bytes2Hex(it.Key)] = account } diff --git a/state/state_object.go b/state/state_object.go index 477b912a1..487952a02 100644 --- a/state/state_object.go +++ b/state/state_object.go @@ -19,6 +19,14 @@ func (self Code) String() string { type Storage map[string]*ethutil.Value +func (self Storage) String() (str string) { + for key, value := range self { + str += fmt.Sprintf("%X : %X\n", key, value.Bytes()) + } + + return +} + func (self Storage) Copy() Storage { cpy := make(Storage) for key, value := range self { @@ -119,10 +127,9 @@ func (self *StateObject) GetStorage(key *big.Int) *ethutil.Value { } func (self *StateObject) SetStorage(key *big.Int, value *ethutil.Value) { self.SetState(key.Bytes(), value) - self.dirty = true } -func (self *StateObject) Storage() map[string]*ethutil.Value { +func (self *StateObject) Storage() Storage { return self.storage } @@ -172,20 +179,22 @@ func (c *StateObject) AddBalance(amount *big.Int) { statelogger.Debugf("%x: #%d %v (+ %v)\n", c.Address(), c.nonce, c.balance, amount) } -func (c *StateObject) AddAmount(amount *big.Int) { c.AddBalance(amount) } func (c *StateObject) SubBalance(amount *big.Int) { c.SetBalance(new(big.Int).Sub(c.balance, amount)) statelogger.Debugf("%x: #%d %v (- %v)\n", c.Address(), c.nonce, c.balance, amount) } -func (c *StateObject) SubAmount(amount *big.Int) { c.SubBalance(amount) } func (c *StateObject) SetBalance(amount *big.Int) { c.balance = amount c.dirty = true } +func (c *StateObject) St() Storage { + return c.storage +} + // // Gas setters and getters // @@ -198,7 +207,7 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error { return fmt.Errorf("insufficient amount: %v, %v", c.balance, total) } - c.SubAmount(total) + c.SubBalance(total) c.dirty = true @@ -221,7 +230,7 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error { rGas := new(big.Int).Set(gas) rGas.Mul(rGas, price) - self.AddAmount(rGas) + self.AddBalance(rGas) self.dirty = true |