From c5df37c1119107ddcc517127b3bd7c2ab4e3649f Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 13 Jan 2017 00:37:23 +0100 Subject: [PATCH] eth: accept leading zeros for nonce parameter of submitWork (#3558) --- core/types/block.go | 4 ++-- eth/api.go | 4 ++-- miner/agent.go | 3 ++- miner/remote_agent.go | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/core/types/block.go b/core/types/block.go index 2034bb0ff..1a2a1f2bd 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -423,9 +423,9 @@ func CalcUncleHash(uncles []*Header) common.Hash { // WithMiningResult returns a new block with the data from b // where nonce and mix digest are set to the provided values. -func (b *Block) WithMiningResult(nonce uint64, mixDigest common.Hash) *Block { +func (b *Block) WithMiningResult(nonce BlockNonce, mixDigest common.Hash) *Block { cpy := *b.header - binary.BigEndian.PutUint64(cpy.Nonce[:], nonce) + cpy.Nonce = nonce cpy.MixDigest = mixDigest return &Block{ header: &cpy, diff --git a/eth/api.go b/eth/api.go index d798c196e..023e9a9bb 100644 --- a/eth/api.go +++ b/eth/api.go @@ -96,8 +96,8 @@ func (s *PublicMinerAPI) Mining() bool { // SubmitWork can be used by external miner to submit their POW solution. It returns an indication if the work was // accepted. Note, this is not an indication if the provided work was valid! -func (s *PublicMinerAPI) SubmitWork(nonce hexutil.Uint64, solution, digest common.Hash) bool { - return s.agent.SubmitWork(uint64(nonce), digest, solution) +func (s *PublicMinerAPI) SubmitWork(nonce types.BlockNonce, solution, digest common.Hash) bool { + return s.agent.SubmitWork(nonce, digest, solution) } // GetWork returns a work package for external miner. The work package consists of 3 strings diff --git a/miner/agent.go b/miner/agent.go index 16f2a7723..697e3971b 100644 --- a/miner/agent.go +++ b/miner/agent.go @@ -22,6 +22,7 @@ import ( "sync/atomic" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/pow" @@ -112,7 +113,7 @@ func (self *CpuAgent) mine(work *Work, stop <-chan struct{}) { // Mine nonce, mixDigest := self.pow.Search(work.Block, stop, self.index) if nonce != 0 { - block := work.Block.WithMiningResult(nonce, common.BytesToHash(mixDigest)) + block := work.Block.WithMiningResult(types.EncodeNonce(nonce), common.BytesToHash(mixDigest)) self.returnCh <- &Result{work, block} } else { self.returnCh <- nil diff --git a/miner/remote_agent.go b/miner/remote_agent.go index f99f38b36..23277bac8 100644 --- a/miner/remote_agent.go +++ b/miner/remote_agent.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/ethash" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/pow" @@ -132,7 +133,7 @@ func (a *RemoteAgent) GetWork() ([3]string, error) { // SubmitWork tries to inject a PoW solution tinto the remote agent, returning // whether the solution was acceted or not (not can be both a bad PoW as well as // any other error, like no work pending). -func (a *RemoteAgent) SubmitWork(nonce uint64, mixDigest, hash common.Hash) bool { +func (a *RemoteAgent) SubmitWork(nonce types.BlockNonce, mixDigest, hash common.Hash) bool { a.mu.Lock() defer a.mu.Unlock()