aboutsummaryrefslogtreecommitdiffstats
path: root/miner/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'miner/worker.go')
-rw-r--r--miner/worker.go28
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)