github.com/jonasnick/go-ethereum@v0.7.12-0.20150216215225-22176f05d387/miner/miner.go (about)

     1  package miner
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/jonasnick/go-ethereum/eth"
     7  	"github.com/jonasnick/go-ethereum/logger"
     8  	"github.com/jonasnick/go-ethereum/pow/ezp"
     9  )
    10  
    11  var minerlogger = logger.NewLogger("MINER")
    12  
    13  type Miner struct {
    14  	worker *worker
    15  
    16  	MinAcceptedGasPrice *big.Int
    17  	Extra               string
    18  
    19  	coinbase []byte
    20  	mining   bool
    21  }
    22  
    23  func New(coinbase []byte, eth *eth.Ethereum) *Miner {
    24  	miner := &Miner{
    25  		coinbase: coinbase,
    26  		worker:   newWorker(coinbase, eth),
    27  	}
    28  
    29  	for i := 0; i < 4; i++ {
    30  		miner.worker.register(NewCpuMiner(i, ezp.New()))
    31  	}
    32  
    33  	return miner
    34  }
    35  
    36  func (self *Miner) Mining() bool {
    37  	return self.mining
    38  }
    39  
    40  func (self *Miner) Start() {
    41  	self.mining = true
    42  
    43  	self.worker.start()
    44  
    45  	self.worker.commitNewWork()
    46  }
    47  
    48  func (self *Miner) Stop() {
    49  	self.mining = false
    50  
    51  	self.worker.stop()
    52  }
    53  
    54  func (self *Miner) HashRate() int64 {
    55  	var tot int64
    56  	for _, agent := range self.worker.agents {
    57  		tot += agent.Pow().GetHashrate()
    58  	}
    59  
    60  	return tot
    61  }