| 
									
										
										
										
											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-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-02-09 16:20:34 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/pow/ezp" | 
					
						
							| 
									
										
										
										
											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-02-17 12:24:51 +01:00
										 |  |  | 	Coinbase []byte | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	mining   bool | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 10:38:36 +01:00
										 |  |  | func New(coinbase []byte, eth core.Backend, minerThreads int) *Miner { | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	miner := &Miner{ | 
					
						
							| 
									
										
										
										
											2015-02-17 12:24:51 +01:00
										 |  |  | 		Coinbase: coinbase, | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 		worker:   newWorker(coinbase, eth), | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-19 10:38:36 +01:00
										 |  |  | 	for i := 0; i < minerThreads; i++ { | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 		miner.worker.register(NewCpuMiner(i, ezp.New())) | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	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-02-09 16:20:34 +01:00
										 |  |  | func (self *Miner) Start() { | 
					
						
							| 
									
										
										
										
											2015-02-13 17:23:09 +01:00
										 |  |  | 	self.mining = true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	self.worker.start() | 
					
						
							| 
									
										
										
										
											2015-02-05 08:29:41 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	self.worker.commitNewWork() | 
					
						
							| 
									
										
										
										
											2014-10-31 14:56:42 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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() | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | func (self *Miner) HashRate() int64 { | 
					
						
							|  |  |  | 	var tot int64 | 
					
						
							|  |  |  | 	for _, agent := range self.worker.agents { | 
					
						
							|  |  |  | 		tot += agent.Pow().GetHashrate() | 
					
						
							| 
									
										
										
										
											2014-12-04 23:54:07 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-09 16:20:34 +01:00
										 |  |  | 	return tot | 
					
						
							| 
									
										
										
										
											2014-11-07 12:18:48 +01:00
										 |  |  | } |