core, miner, tests: renamed state methods
* Update => SyncIntermediate * Added SyncObjects SyncIntermediate only updates whatever has changed, but, as a side effect, requires much more disk space. SyncObjects will only sync whatever is required for a block and will not save intermediate state to disk. As drawback this requires more time when more txs come in.
This commit is contained in:
parent
08caeedd84
commit
ab16ce70fc
@ -77,7 +77,7 @@ func (self *BlockProcessor) ApplyTransaction(coinbase *state.StateObject, stated
|
||||
}
|
||||
|
||||
// Update the state with pending changes
|
||||
statedb.Update()
|
||||
statedb.SyncIntermediate()
|
||||
|
||||
usedGas.Add(usedGas, gas)
|
||||
receipt := types.NewReceipt(statedb.Root().Bytes(), usedGas)
|
||||
@ -243,7 +243,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
|
||||
|
||||
// Commit state objects/accounts to a temporary trie (does not save)
|
||||
// used to calculate the state root.
|
||||
state.CleanUpdate()
|
||||
state.SyncObjects()
|
||||
if header.Root != state.Root() {
|
||||
err = fmt.Errorf("invalid merkle root. received=%x got=%x", header.Root, state.Root())
|
||||
return
|
||||
|
@ -77,7 +77,7 @@ func (b *BlockGen) AddTx(tx *types.Transaction) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
b.statedb.Update()
|
||||
b.statedb.SyncIntermediate()
|
||||
b.header.GasUsed.Add(b.header.GasUsed, gas)
|
||||
receipt := types.NewReceipt(b.statedb.Root().Bytes(), b.header.GasUsed)
|
||||
logs := b.statedb.GetLogs(tx.Hash())
|
||||
@ -135,7 +135,7 @@ func GenerateChain(parent *types.Block, db common.Database, n int, gen func(int,
|
||||
gen(i, b)
|
||||
}
|
||||
AccumulateRewards(statedb, h, b.uncles)
|
||||
statedb.Update()
|
||||
statedb.SyncIntermediate()
|
||||
h.Root = statedb.Root()
|
||||
return types.NewBlock(h, b.txs, b.uncles, b.receipts)
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ func GenesisBlockForTesting(db common.Database, addr common.Address, balance *bi
|
||||
statedb := state.New(common.Hash{}, db)
|
||||
obj := statedb.GetOrNewStateObject(addr)
|
||||
obj.SetBalance(balance)
|
||||
statedb.Update()
|
||||
statedb.SyncObjects()
|
||||
statedb.Sync()
|
||||
block := types.NewBlock(&types.Header{
|
||||
Difficulty: params.GenesisDifficulty,
|
||||
|
@ -72,7 +72,7 @@ func TestNull(t *testing.T) {
|
||||
//value := common.FromHex("0x823140710bf13990e4500136726d8b55")
|
||||
var value common.Hash
|
||||
state.SetState(address, common.Hash{}, value)
|
||||
state.Update()
|
||||
state.SyncIntermediate()
|
||||
state.Sync()
|
||||
value = state.GetState(address, common.Hash{})
|
||||
if !common.EmptyHash(value) {
|
||||
|
@ -324,7 +324,8 @@ func (self *StateDB) Refunds() *big.Int {
|
||||
return self.refund
|
||||
}
|
||||
|
||||
func (self *StateDB) Update() {
|
||||
// SyncIntermediate updates the intermediate state and all mid steps
|
||||
func (self *StateDB) SyncIntermediate() {
|
||||
self.refund = new(big.Int)
|
||||
|
||||
for _, stateObject := range self.stateObjects {
|
||||
@ -341,7 +342,8 @@ func (self *StateDB) Update() {
|
||||
}
|
||||
}
|
||||
|
||||
func (self *StateDB) CleanUpdate() {
|
||||
// SyncObjects syncs the changed objects to the trie
|
||||
func (self *StateDB) SyncObjects() {
|
||||
self.trie = trie.NewSecure(self.root[:], self.db)
|
||||
|
||||
self.refund = new(big.Int)
|
||||
|
@ -453,7 +453,7 @@ func (self *worker) commitNewWork() {
|
||||
if atomic.LoadInt32(&self.mining) == 1 {
|
||||
// commit state root after all state transitions.
|
||||
core.AccumulateRewards(self.current.state, header, uncles)
|
||||
current.state.Update()
|
||||
current.state.SyncObjects()
|
||||
self.current.state.Sync()
|
||||
header.Root = current.state.Root()
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ func (t *BlockTest) InsertPreState(ethereum *eth.Ethereum) (*state.StateDB, erro
|
||||
}
|
||||
}
|
||||
// sync objects to trie
|
||||
statedb.Update()
|
||||
statedb.SyncObjects()
|
||||
// sync trie to disk
|
||||
statedb.Sync()
|
||||
|
||||
|
@ -175,7 +175,7 @@ func RunState(statedb *state.StateDB, env, tx map[string]string) ([]byte, state.
|
||||
if core.IsNonceErr(err) || core.IsInvalidTxErr(err) || state.IsGasLimitErr(err) {
|
||||
statedb.Set(snapshot)
|
||||
}
|
||||
statedb.Update()
|
||||
statedb.SyncObjects()
|
||||
|
||||
return ret, vmenv.state.Logs(), vmenv.Gas, err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user