diff options
author | Ethan Buchman <ethan@coinculture.info> | 2015-02-27 06:54:57 +0800 |
---|---|---|
committer | Ethan Buchman <ethan@coinculture.info> | 2015-02-27 06:54:57 +0800 |
commit | 5a827417d9cef0d2a765df11e747b1755bf04898 (patch) | |
tree | cd3764686dcb59f5b1b9faf16c9f29dcc5efd593 /miner | |
parent | 9446489cf3f2eb4b5237b9355b3975fde2886508 (diff) | |
parent | cc5c8a444dbc23501ba1a131eb2334f4b5e1ce9f (diff) | |
download | dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar.gz dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar.bz2 dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar.lz dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar.xz dexon-5a827417d9cef0d2a765df11e747b1755bf04898.tar.zst dexon-5a827417d9cef0d2a765df11e747b1755bf04898.zip |
Merge branch 'develop' of https://github.com/ethereum/go-ethereum into develop
Diffstat (limited to 'miner')
-rw-r--r-- | miner/miner.go | 4 | ||||
-rw-r--r-- | miner/worker.go | 26 |
2 files changed, 17 insertions, 13 deletions
diff --git a/miner/miner.go b/miner/miner.go index 27afcf684..0cc2361c8 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -20,13 +20,13 @@ type Miner struct { mining bool } -func New(coinbase []byte, eth core.Backend) *Miner { +func New(coinbase []byte, eth core.Backend, minerThreads int) *Miner { miner := &Miner{ Coinbase: coinbase, worker: newWorker(coinbase, eth), } - for i := 0; i < 4; i++ { + for i := 0; i < minerThreads; i++ { miner.worker.register(NewCpuMiner(i, ezp.New())) } diff --git a/miner/worker.go b/miner/worker.go index 47b462e53..4f0909302 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -109,14 +109,18 @@ func (self *worker) register(agent Agent) { } func (self *worker) update() { - events := self.mux.Subscribe(core.ChainEvent{}, core.TxPreEvent{}) + events := self.mux.Subscribe(core.ChainEvent{}, core.NewMinedBlockEvent{}) out: for { select { case event := <-events.Chan(): - switch event.(type) { - case core.ChainEvent, core.TxPreEvent: + switch ev := event.(type) { + case core.ChainEvent: + if self.current.block != ev.Block { + self.commitNewWork() + } + case core.NewMinedBlockEvent: self.commitNewWork() } case <-self.quit: @@ -172,17 +176,19 @@ func (self *worker) commitNewWork() { transactions := self.eth.TxPool().GetTransactions() sort.Sort(types.TxByNonce{transactions}) + minerlogger.Infof("committing new work with %d txs\n", len(transactions)) // Keep track of transactions which return errors so they can be removed var remove types.Transactions +gasLimit: for _, tx := range transactions { err := self.commitTransaction(tx) switch { case core.IsNonceErr(err): // Remove invalid transactions remove = append(remove, tx) - case core.IsGasLimitErr(err): + case state.IsGasLimitErr(err): // Break on gas limit - break + break gasLimit } if err != nil { @@ -191,7 +197,7 @@ func (self *worker) commitNewWork() { } self.eth.TxPool().RemoveSet(remove) - self.current.coinbase.AddAmount(core.BlockReward) + self.current.coinbase.AddBalance(core.BlockReward) self.current.state.Update(ethutil.Big0) self.push() @@ -219,7 +225,7 @@ func (self *worker) commitUncle(uncle *types.Header) error { } uncleAccount := self.current.state.GetAccount(uncle.Coinbase) - uncleAccount.AddAmount(uncleReward) + uncleAccount.AddBalance(uncleReward) self.current.coinbase.AddBalance(uncleReward) @@ -227,11 +233,9 @@ func (self *worker) commitUncle(uncle *types.Header) error { } func (self *worker) commitTransaction(tx *types.Transaction) error { - snapshot := self.current.state.Copy() + //fmt.Printf("proc %x %v\n", tx.Hash()[:3], tx.Nonce()) receipt, _, err := self.proc.ApplyTransaction(self.current.coinbase, self.current.state, self.current.block, tx, self.current.totalUsedGas, true) - if err != nil && (core.IsNonceErr(err) || core.IsGasLimitErr(err)) { - self.current.state.Set(snapshot) - + if err != nil && (core.IsNonceErr(err) || state.IsGasLimitErr(err)) { return err } |