diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
commit | ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8 (patch) | |
tree | 5ce6b23c32fc1f47cc688ac954b3d26d4eec9cad /miner/worker.go | |
parent | 23f42d9463e55fe86100b86c2ab0b7c95f181f91 (diff) | |
parent | a1d9ef48c505ab4314ca8e3ee1fc272032da3034 (diff) | |
download | go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.gz go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.bz2 go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.lz go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.xz go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.zst go-tangerine-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.zip |
Merge pull request #1917 from obscuren/validator-interface
core, eth, rpc: split out block validator and state processor
Diffstat (limited to 'miner/worker.go')
-rw-r--r-- | miner/worker.go | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/miner/worker.go b/miner/worker.go index 2d072ef60..238f1a4bf 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -100,7 +100,7 @@ type worker struct { eth core.Backend chain *core.BlockChain - proc *core.BlockProcessor + proc core.Validator chainDb ethdb.Database coinbase common.Address @@ -131,7 +131,7 @@ func newWorker(coinbase common.Address, eth core.Backend) *worker { recv: make(chan *Result, resultQueueSize), gasPrice: new(big.Int), chain: eth.BlockChain(), - proc: eth.BlockProcessor(), + proc: eth.BlockChain().Validator(), possibleUncles: make(map[common.Hash]*types.Block), coinbase: coinbase, txQueue: make(map[common.Hash]*types.Transaction), @@ -244,7 +244,7 @@ func (self *worker) update() { // Apply transaction to the pending state if we're not mining if atomic.LoadInt32(&self.mining) == 0 { self.currentMu.Lock() - self.current.commitTransactions(types.Transactions{ev.Tx}, self.gasPrice, self.proc) + self.current.commitTransactions(types.Transactions{ev.Tx}, self.gasPrice, self.chain) self.currentMu.Unlock() } } @@ -290,7 +290,9 @@ func (self *worker) wait() { glog.V(logger.Error).Infoln("Invalid block found during mining") continue } - if err := core.ValidateHeader(self.eth.BlockProcessor().Pow, block.Header(), parent.Header(), true, false); err != nil && err != core.BlockFutureErr { + + auxValidator := self.eth.BlockChain().AuxValidator() + if err := core.ValidateHeader(auxValidator, block.Header(), parent.Header(), true, false); err != nil && err != core.BlockFutureErr { glog.V(logger.Error).Infoln("Invalid header on mined block:", err) continue } @@ -516,7 +518,7 @@ func (self *worker) commitNewWork() { transactions := append(singleTxOwner, multiTxOwner...) */ - work.commitTransactions(transactions, self.gasPrice, self.proc) + work.commitTransactions(transactions, self.gasPrice, self.chain) self.eth.TxPool().RemoveTransactions(work.lowGasTxs) // compute uncles for the new block. @@ -575,9 +577,8 @@ func (self *worker) commitUncle(work *Work, uncle *types.Header) error { return nil } -func (env *Work) commitTransactions(transactions types.Transactions, gasPrice *big.Int, proc *core.BlockProcessor) { +func (env *Work) commitTransactions(transactions types.Transactions, gasPrice *big.Int, bc *core.BlockChain) { gp := new(core.GasPool).AddGas(env.header.GasLimit) - for _, tx := range transactions { // We can skip err. It has already been validated in the tx pool from, _ := tx.From() @@ -615,7 +616,7 @@ func (env *Work) commitTransactions(transactions types.Transactions, gasPrice *b env.state.StartRecord(tx.Hash(), common.Hash{}, 0) - err := env.commitTransaction(tx, proc, gp) + err := env.commitTransaction(tx, bc, gp) switch { case core.IsGasLimitErr(err): // ignore the transactor so no nonce errors will be thrown for this account @@ -635,9 +636,9 @@ func (env *Work) commitTransactions(transactions types.Transactions, gasPrice *b } } -func (env *Work) commitTransaction(tx *types.Transaction, proc *core.BlockProcessor, gp *core.GasPool) error { +func (env *Work) commitTransaction(tx *types.Transaction, bc *core.BlockChain, gp *core.GasPool) error { snap := env.state.Copy() - receipt, _, err := proc.ApplyTransaction(gp, env.state, env.header, tx, env.header.GasUsed, true) + receipt, _, _, err := core.ApplyTransaction(bc, gp, env.state, env.header, tx, env.header.GasUsed) if err != nil { env.state.Set(snap) return err |