d7b5a87b3b
This avoids having to query the coinbase when creating the miner, which in turn eliminates the dreaded startup error when no accounts are set up. Later, this will also allow us to simply restart the miner when the user picks a different coinbase. This causes a lot of changes in other packages. These are included in this commit because they're impossible to separate.
56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
package miner
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
"github.com/ethereum/ethash"
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/logger"
|
|
"github.com/ethereum/go-ethereum/pow"
|
|
)
|
|
|
|
var minerlogger = logger.NewLogger("MINER")
|
|
|
|
type Miner struct {
|
|
worker *worker
|
|
|
|
MinAcceptedGasPrice *big.Int
|
|
Extra string
|
|
|
|
mining bool
|
|
eth core.Backend
|
|
pow pow.PoW
|
|
}
|
|
|
|
func New(eth core.Backend, pow pow.PoW, minerThreads int) *Miner {
|
|
// note: minerThreads is currently ignored because
|
|
// ethash is not thread safe.
|
|
return &Miner{eth: eth, pow: pow}
|
|
}
|
|
|
|
func (self *Miner) Mining() bool {
|
|
return self.mining
|
|
}
|
|
|
|
func (self *Miner) Start(coinbase []byte) {
|
|
self.mining = true
|
|
self.worker = newWorker(coinbase, self.eth)
|
|
self.worker.register(NewCpuMiner(0, self.pow))
|
|
|
|
self.pow.(*ethash.Ethash).UpdateDAG()
|
|
|
|
self.worker.start()
|
|
self.worker.commitNewWork()
|
|
}
|
|
|
|
func (self *Miner) Stop() {
|
|
self.mining = false
|
|
self.worker.stop()
|
|
|
|
//self.pow.(*ethash.Ethash).Stop()
|
|
}
|
|
|
|
func (self *Miner) HashRate() int64 {
|
|
return self.worker.HashRate()
|
|
}
|