diff options
Diffstat (limited to 'miner/worker.go')
-rw-r--r-- | miner/worker.go | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/miner/worker.go b/miner/worker.go index 012353fa1..29992b327 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -7,15 +7,19 @@ import ( "sync" "time" + "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/pow" "github.com/ethereum/go-ethereum/state" "gopkg.in/fatih/set.v0" ) +var jsonlogger = logger.NewJsonLogger() + type environment struct { totalUsedGas *big.Int state *state.StateDB @@ -44,7 +48,7 @@ func env(block *types.Block, eth core.Backend) *environment { type Work struct { Number uint64 - Nonce []byte + Nonce uint64 MixDigest []byte SeedHash []byte } @@ -135,7 +139,7 @@ out: } break out case <-timer.C: - minerlogger.Debugln("Hash rate:", self.HashRate(), "Khash") + minerlogger.Infoln("Hash rate:", self.HashRate(), "Khash") } } @@ -147,14 +151,20 @@ func (self *worker) wait() { for work := range self.recv { // Someone Successfully Mined! block := self.current.block - if block.Number().Uint64() == work.Number && block.Nonce() == nil { - self.current.block.Header().Nonce = work.Nonce + if block.Number().Uint64() == work.Number && block.Nonce() == 0 { + self.current.block.SetNonce(work.Nonce) self.current.block.Header().MixDigest = work.MixDigest self.current.block.Header().SeedHash = work.SeedHash + jsonlogger.LogJson(&logger.EthMinerNewBlock{ + BlockHash: ethutil.Bytes2Hex(block.Hash()), + BlockNumber: block.Number(), + ChainHeadHash: ethutil.Bytes2Hex(block.ParentHeaderHash), + BlockPrevHash: ethutil.Bytes2Hex(block.ParentHeaderHash), + }) + if err := self.chain.InsertChain(types.Blocks{self.current.block}); err == nil { self.mux.Post(core.NewMinedBlockEvent{self.current.block}) - fmt.Println("GOOD BLOCK", self.current.block) } else { self.commitNewWork() } @@ -180,7 +190,11 @@ func (self *worker) commitNewWork() { self.mu.Lock() defer self.mu.Unlock() - self.current = env(self.chain.NewBlock(self.coinbase), self.eth) + block := self.chain.NewBlock(self.coinbase) + seednum := ethash.GetSeedBlockNum(block.NumberU64()) + block.Header().SeedHash = self.chain.GetBlockByNumber(seednum).SeedHash() + + self.current = env(block, self.eth) parent := self.chain.GetBlock(self.current.block.ParentHash()) self.current.coinbase.SetGasPool(core.CalcGasLimit(parent, self.current.block)) @@ -232,7 +246,7 @@ func (self *worker) commitUncle(uncle *types.Header) error { } if !self.pow.Verify(types.NewBlockWithHeader(uncle)) { - return core.ValidationError("Uncle's nonce is invalid (= %v)", ethutil.Bytes2Hex(uncle.Nonce)) + return core.ValidationError("Uncle's nonce is invalid (= %x)", uncle.Nonce) } uncleAccount := self.current.state.GetAccount(uncle.Coinbase) |