فهرست منبع

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.
Jeffrey Wilcke 10 سال پیش
والد
کامیت
ab16ce70fc
8فایلهای تغییر یافته به همراه13 افزوده شده و 11 حذف شده
  1. 2 2
      core/block_processor.go
  2. 2 2
      core/chain_makers.go
  3. 1 1
      core/genesis.go
  4. 1 1
      core/state/state_test.go
  5. 4 2
      core/state/statedb.go
  6. 1 1
      miner/worker.go
  7. 1 1
      tests/block_test_util.go
  8. 1 1
      tests/state_test_util.go

+ 2 - 2
core/block_processor.go

@@ -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

+ 2 - 2
core/chain_makers.go

@@ -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)
 	}

+ 1 - 1
core/genesis.go

@@ -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,

+ 1 - 1
core/state/state_test.go

@@ -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) {

+ 4 - 2
core/state/statedb.go

@@ -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)

+ 1 - 1
miner/worker.go

@@ -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()
 	}

+ 1 - 1
tests/block_test_util.go

@@ -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()
 

+ 1 - 1
tests/state_test_util.go

@@ -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
 }