miner.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package miner
  2. import (
  3. "math/big"
  4. "github.com/ethereum/ethash"
  5. "github.com/ethereum/go-ethereum/core"
  6. "github.com/ethereum/go-ethereum/logger"
  7. "github.com/ethereum/go-ethereum/pow"
  8. )
  9. var minerlogger = logger.NewLogger("MINER")
  10. type Miner struct {
  11. worker *worker
  12. MinAcceptedGasPrice *big.Int
  13. Extra string
  14. Coinbase []byte
  15. mining bool
  16. pow pow.PoW
  17. }
  18. func New(coinbase []byte, eth core.Backend, pow pow.PoW, minerThreads int) *Miner {
  19. miner := &Miner{
  20. Coinbase: coinbase,
  21. worker: newWorker(coinbase, eth),
  22. pow: pow,
  23. }
  24. minerThreads = 1
  25. for i := 0; i < minerThreads; i++ {
  26. miner.worker.register(NewCpuMiner(i, miner.pow))
  27. }
  28. return miner
  29. }
  30. func (self *Miner) Mining() bool {
  31. return self.mining
  32. }
  33. func (self *Miner) Start() {
  34. self.mining = true
  35. self.pow.(*ethash.Ethash).UpdateDAG()
  36. self.worker.start()
  37. self.worker.commitNewWork()
  38. }
  39. func (self *Miner) Stop() {
  40. self.mining = false
  41. self.worker.stop()
  42. //self.pow.(*ethash.Ethash).Stop()
  43. }
  44. func (self *Miner) HashRate() int64 {
  45. return self.worker.HashRate()
  46. }