aboutsummaryrefslogtreecommitdiffstats
path: root/state
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-02-20 21:01:30 +0800
committerobscuren <geffobscura@gmail.com>2015-02-20 21:01:30 +0800
commitd8ac267f4128117c3fb9736a40f3dbc327582e32 (patch)
tree707896f76c700df83c5cb3ad358d5535e549e694 /state
parent982f73fa6d6f12874729faacd0db14fc78d518dd (diff)
downloadgo-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar.gz
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar.bz2
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar.lz
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar.xz
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.tar.zst
go-tangerine-d8ac267f4128117c3fb9736a40f3dbc327582e32.zip
dirty tracking for state objects fixed
Diffstat (limited to 'state')
-rw-r--r--state/state_object.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/state/state_object.go b/state/state_object.go
index d50c9fd7a..226c25299 100644
--- a/state/state_object.go
+++ b/state/state_object.go
@@ -65,7 +65,7 @@ func NewStateObject(addr []byte, db ethutil.Database) *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{db: db, address: address, balance: new(big.Int), gasPool: new(big.Int)}
+ object := &StateObject{db: db, address: address, balance: new(big.Int), gasPool: new(big.Int), dirty: true}
object.State = New(nil, db) //New(trie.New(ethutil.Config.Db, ""))
object.storage = make(Storage)
object.gasPool = new(big.Int)
@@ -118,6 +118,7 @@ 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 {
@@ -142,6 +143,7 @@ func (self *StateObject) GetState(k []byte) *ethutil.Value {
func (self *StateObject) SetState(k []byte, value *ethutil.Value) {
key := ethutil.LeftPadBytes(k, 32)
self.storage[string(key)] = value.Copy()
+ self.dirty = true
}
func (self *StateObject) Sync() {
@@ -166,6 +168,7 @@ func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
func (c *StateObject) AddBalance(amount *big.Int) {
c.SetBalance(new(big.Int).Add(c.balance, amount))
+ c.dirty = true
statelogger.Debugf("%x: #%d %v (+ %v)\n", c.Address(), c.Nonce, c.balance, amount)
}
@@ -180,6 +183,7 @@ func (c *StateObject) SubAmount(amount *big.Int) { c.SubBalance(amount) }
func (c *StateObject) SetBalance(amount *big.Int) {
c.balance = amount
+ c.dirty = true
}
func (self *StateObject) Balance() *big.Int { return self.balance }
@@ -198,6 +202,8 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error {
c.SubAmount(total)
+ c.dirty = true
+
return nil
}
@@ -219,6 +225,8 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error {
self.AddAmount(rGas)
+ self.dirty = true
+
return nil
}