good morning!!!!

Skip to content
Snippets Groups Projects
Commit d8ac267f authored by Jeffrey Wilcke's avatar Jeffrey Wilcke
Browse files

dirty tracking for state objects fixed

parent 982f73fa
Branches
Tags
No related merge requests found
...@@ -296,16 +296,13 @@ func (sm *BlockProcessor) AccumulateRewards(statedb *state.StateDB, block, paren ...@@ -296,16 +296,13 @@ func (sm *BlockProcessor) AccumulateRewards(statedb *state.StateDB, block, paren
r := new(big.Int) r := new(big.Int)
r.Mul(BlockReward, big.NewInt(15)).Div(r, big.NewInt(16)) r.Mul(BlockReward, big.NewInt(15)).Div(r, big.NewInt(16))
uncleAccount := statedb.GetAccount(uncle.Coinbase) statedb.AddBalance(uncle.Coinbase, r)
uncleAccount.AddAmount(r)
reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32))) reward.Add(reward, new(big.Int).Div(BlockReward, big.NewInt(32)))
} }
// Get the account associated with the coinbase // Get the account associated with the coinbase
account := statedb.GetAccount(block.Header().Coinbase) statedb.AddBalance(block.Header().Coinbase, reward)
// Reward amount of ether to the coinbase address
account.AddAmount(reward)
return nil return nil
} }
......
...@@ -397,7 +397,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { ...@@ -397,7 +397,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
if chain { if chain {
//self.setTransState(state.New(block.Root(), self.db)) //self.setTransState(state.New(block.Root(), self.db))
self.eventMux.Post(ChainEvent{block, td}) //self.eventMux.Post(ChainEvent{block, td})
} }
if split { if split {
......
...@@ -13,7 +13,7 @@ import ( ...@@ -13,7 +13,7 @@ import (
) )
const ( const (
ProtocolVersion = 52 ProtocolVersion = 53
NetworkId = 0 NetworkId = 0
ProtocolLength = uint64(8) ProtocolLength = uint64(8)
ProtocolMaxMsgSize = 10 * 1024 * 1024 ProtocolMaxMsgSize = 10 * 1024 * 1024
......
...@@ -65,7 +65,7 @@ func NewStateObject(addr []byte, db ethutil.Database) *StateObject { ...@@ -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. // This to ensure that it has 20 bytes (and not 0 bytes), thus left or right pad doesn't matter.
address := ethutil.Address(addr) 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.State = New(nil, db) //New(trie.New(ethutil.Config.Db, ""))
object.storage = make(Storage) object.storage = make(Storage)
object.gasPool = new(big.Int) object.gasPool = new(big.Int)
...@@ -118,6 +118,7 @@ func (self *StateObject) GetStorage(key *big.Int) *ethutil.Value { ...@@ -118,6 +118,7 @@ func (self *StateObject) GetStorage(key *big.Int) *ethutil.Value {
} }
func (self *StateObject) SetStorage(key *big.Int, value *ethutil.Value) { func (self *StateObject) SetStorage(key *big.Int, value *ethutil.Value) {
self.SetState(key.Bytes(), value) self.SetState(key.Bytes(), value)
self.dirty = true
} }
func (self *StateObject) Storage() map[string]*ethutil.Value { func (self *StateObject) Storage() map[string]*ethutil.Value {
...@@ -142,6 +143,7 @@ func (self *StateObject) GetState(k []byte) *ethutil.Value { ...@@ -142,6 +143,7 @@ func (self *StateObject) GetState(k []byte) *ethutil.Value {
func (self *StateObject) SetState(k []byte, value *ethutil.Value) { func (self *StateObject) SetState(k []byte, value *ethutil.Value) {
key := ethutil.LeftPadBytes(k, 32) key := ethutil.LeftPadBytes(k, 32)
self.storage[string(key)] = value.Copy() self.storage[string(key)] = value.Copy()
self.dirty = true
} }
func (self *StateObject) Sync() { func (self *StateObject) Sync() {
...@@ -166,6 +168,7 @@ func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value { ...@@ -166,6 +168,7 @@ func (c *StateObject) GetInstr(pc *big.Int) *ethutil.Value {
func (c *StateObject) AddBalance(amount *big.Int) { func (c *StateObject) AddBalance(amount *big.Int) {
c.SetBalance(new(big.Int).Add(c.balance, amount)) 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) 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) } ...@@ -180,6 +183,7 @@ func (c *StateObject) SubAmount(amount *big.Int) { c.SubBalance(amount) }
func (c *StateObject) SetBalance(amount *big.Int) { func (c *StateObject) SetBalance(amount *big.Int) {
c.balance = amount c.balance = amount
c.dirty = true
} }
func (self *StateObject) Balance() *big.Int { return self.balance } func (self *StateObject) Balance() *big.Int { return self.balance }
...@@ -198,6 +202,8 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error { ...@@ -198,6 +202,8 @@ func (c *StateObject) ConvertGas(gas, price *big.Int) error {
c.SubAmount(total) c.SubAmount(total)
c.dirty = true
return nil return nil
} }
...@@ -219,6 +225,8 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error { ...@@ -219,6 +225,8 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error {
self.AddAmount(rGas) self.AddAmount(rGas)
self.dirty = true
return nil return nil
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment