| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | package miner | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 	"math/big" | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 10:22:40 +01:00
										 |  |  | 	"github.com/ethereum/ethash" | 
					
						
							| 
									
										
										
										
											2015-03-18 13:00:01 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							| 
									
										
										
										
											2015-02-17 12:24:51 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/core" | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/logger" | 
					
						
							| 
									
										
										
										
											2015-03-03 17:55:23 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/pow" | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var minerlogger = logger.NewLogger("MINER") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type Miner struct { | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	worker *worker | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	MinAcceptedGasPrice *big.Int | 
					
						
							| 
									
										
										
										
											2015-01-06 00:19:07 +01:00
										 |  |  | 	Extra               string | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 23:35:34 +01:00
										 |  |  | 	mining bool | 
					
						
							|  |  |  | 	eth    core.Backend | 
					
						
							|  |  |  | 	pow    pow.PoW | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-11 23:35:34 +01:00
										 |  |  | func New(eth core.Backend, pow pow.PoW, minerThreads int) *Miner { | 
					
						
							|  |  |  | 	// note: minerThreads is currently ignored because | 
					
						
							|  |  |  | 	// ethash is not thread safe. | 
					
						
							| 
									
										
										
										
											2015-03-24 10:34:06 +01:00
										 |  |  | 	miner := &Miner{eth: eth, pow: pow, worker: newWorker(common.Address{}, eth)} | 
					
						
							|  |  |  | 	for i := 0; i < minerThreads; i++ { | 
					
						
							|  |  |  | 		miner.worker.register(NewCpuMiner(i, pow)) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return miner | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | func (self *Miner) Mining() bool { | 
					
						
							|  |  |  | 	return self.mining | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-18 13:00:01 +01:00
										 |  |  | func (self *Miner) Start(coinbase common.Address) { | 
					
						
							| 
									
										
										
										
											2015-02-13 17:23:09 +01:00
										 |  |  | 	self.mining = true | 
					
						
							| 
									
										
										
										
											2015-03-22 15:38:01 +01:00
										 |  |  | 	self.worker.coinbase = coinbase | 
					
						
							| 
									
										
										
										
											2015-02-13 17:23:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 10:22:40 +01:00
										 |  |  | 	self.pow.(*ethash.Ethash).UpdateDAG() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	self.worker.start() | 
					
						
							|  |  |  | 	self.worker.commitNewWork() | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-22 15:38:01 +01:00
										 |  |  | func (self *Miner) Register(agent Agent) { | 
					
						
							|  |  |  | 	self.worker.register(agent) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | func (self *Miner) Stop() { | 
					
						
							| 
									
										
										
										
											2015-02-13 17:23:09 +01:00
										 |  |  | 	self.mining = false | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	self.worker.stop() | 
					
						
							| 
									
										
										
										
											2015-03-06 10:22:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	//self.pow.(*ethash.Ethash).Stop() | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | func (self *Miner) HashRate() int64 { | 
					
						
							| 
									
										
										
										
											2015-02-28 23:09:49 +01:00
										 |  |  | 	return self.worker.HashRate() | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | } |