Fixed a few issues in the miner and updated hash rate title
* Sometimes old nonces were set by "old" agents * Added the hash rate to the miner
This commit is contained in:
@ -41,16 +41,21 @@ func env(block *types.Block, eth *eth.Ethereum) *environment {
|
||||
return env
|
||||
}
|
||||
|
||||
type Work struct {
|
||||
Number uint64
|
||||
Nonce []byte
|
||||
}
|
||||
|
||||
type Agent interface {
|
||||
Work() chan<- *types.Block
|
||||
SetNonceCh(chan<- []byte)
|
||||
SetNonceCh(chan<- Work)
|
||||
Stop()
|
||||
Pow() pow.PoW
|
||||
}
|
||||
|
||||
type worker struct {
|
||||
agents []Agent
|
||||
recv chan []byte
|
||||
recv chan Work
|
||||
mux *event.TypeMux
|
||||
quit chan struct{}
|
||||
pow pow.PoW
|
||||
@ -61,13 +66,15 @@ type worker struct {
|
||||
coinbase []byte
|
||||
|
||||
current *environment
|
||||
|
||||
mining bool
|
||||
}
|
||||
|
||||
func newWorker(coinbase []byte, eth *eth.Ethereum) *worker {
|
||||
return &worker{
|
||||
eth: eth,
|
||||
mux: eth.EventMux(),
|
||||
recv: make(chan []byte),
|
||||
recv: make(chan Work),
|
||||
chain: eth.ChainManager(),
|
||||
proc: eth.BlockProcessor(),
|
||||
coinbase: coinbase,
|
||||
@ -75,11 +82,17 @@ func newWorker(coinbase []byte, eth *eth.Ethereum) *worker {
|
||||
}
|
||||
|
||||
func (self *worker) start() {
|
||||
self.mining = true
|
||||
|
||||
self.quit = make(chan struct{})
|
||||
|
||||
go self.update()
|
||||
go self.wait()
|
||||
}
|
||||
|
||||
func (self *worker) stop() {
|
||||
self.mining = false
|
||||
|
||||
close(self.quit)
|
||||
}
|
||||
|
||||
@ -107,26 +120,31 @@ out:
|
||||
break out
|
||||
}
|
||||
}
|
||||
|
||||
events.Unsubscribe()
|
||||
}
|
||||
|
||||
func (self *worker) wait() {
|
||||
for {
|
||||
for nonce := range self.recv {
|
||||
self.current.block.Header().Nonce = nonce
|
||||
fmt.Println(self.current.block)
|
||||
for work := range self.recv {
|
||||
if self.current.block.Number().Uint64() == work.Number {
|
||||
self.current.block.Header().Nonce = work.Nonce
|
||||
|
||||
self.chain.InsertChain(types.Blocks{self.current.block})
|
||||
self.chain.InsertChain(types.Blocks{self.current.block})
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *worker) push() {
|
||||
self.current.state.Update(ethutil.Big0)
|
||||
self.current.block.SetRoot(self.current.state.Root())
|
||||
if self.mining {
|
||||
self.current.state.Update(ethutil.Big0)
|
||||
self.current.block.SetRoot(self.current.state.Root())
|
||||
|
||||
for _, agent := range self.agents {
|
||||
agent.Work() <- self.current.block
|
||||
for _, agent := range self.agents {
|
||||
agent.Work() <- self.current.block
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user