From 144c1c6c52456808428e2b69dbe5c4ebfc3606ca Mon Sep 17 00:00:00 2001 From: gary rong Date: Thu, 8 Nov 2018 16:08:57 +0100 Subject: [PATCH] consensus: extend getWork API with block number (#18038) --- consensus/ethash/api.go | 11 ++++++----- consensus/ethash/ethash.go | 2 +- consensus/ethash/ethash_test.go | 2 +- consensus/ethash/sealer.go | 5 ++++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/consensus/ethash/api.go b/consensus/ethash/api.go index a04ea235d..4d8eed416 100644 --- a/consensus/ethash/api.go +++ b/consensus/ethash/api.go @@ -37,27 +37,28 @@ type API struct { // result[0] - 32 bytes hex encoded current block header pow-hash // result[1] - 32 bytes hex encoded seed hash used for DAG // result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty -func (api *API) GetWork() ([3]string, error) { +// result[3] - hex encoded block number +func (api *API) GetWork() ([4]string, error) { if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest { - return [3]string{}, errors.New("not supported") + return [4]string{}, errors.New("not supported") } var ( - workCh = make(chan [3]string, 1) + workCh = make(chan [4]string, 1) errc = make(chan error, 1) ) select { case api.ethash.fetchWorkCh <- &sealWork{errc: errc, res: workCh}: case <-api.ethash.exitCh: - return [3]string{}, errEthashStopped + return [4]string{}, errEthashStopped } select { case work := <-workCh: return work, nil case err := <-errc: - return [3]string{}, err + return [4]string{}, err } } diff --git a/consensus/ethash/ethash.go b/consensus/ethash/ethash.go index d124cb1e2..78892e1da 100644 --- a/consensus/ethash/ethash.go +++ b/consensus/ethash/ethash.go @@ -432,7 +432,7 @@ type hashrate struct { // sealWork wraps a seal work package for remote sealer. type sealWork struct { errc chan error - res chan [3]string + res chan [4]string } // Ethash is a consensus engine based on proof-of-work implementing the ethash diff --git a/consensus/ethash/ethash_test.go b/consensus/ethash/ethash_test.go index 8eded2ca8..90cb6470f 100644 --- a/consensus/ethash/ethash_test.go +++ b/consensus/ethash/ethash_test.go @@ -107,7 +107,7 @@ func TestRemoteSealer(t *testing.T) { ethash.Seal(nil, block, results, nil) var ( - work [3]string + work [4]string err error ) if work, err = api.GetWork(); err != nil || work[0] != sealhash.Hex() { diff --git a/consensus/ethash/sealer.go b/consensus/ethash/sealer.go index 06c98a781..3a0919ca9 100644 --- a/consensus/ethash/sealer.go +++ b/consensus/ethash/sealer.go @@ -30,6 +30,7 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" @@ -193,7 +194,7 @@ func (ethash *Ethash) remote(notify []string, noverify bool) { results chan<- *types.Block currentBlock *types.Block - currentWork [3]string + currentWork [4]string notifyTransport = &http.Transport{} notifyClient = &http.Client{ @@ -234,12 +235,14 @@ func (ethash *Ethash) remote(notify []string, noverify bool) { // result[0], 32 bytes hex encoded current block header pow-hash // result[1], 32 bytes hex encoded seed hash used for DAG // result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty + // result[3], hex encoded block number makeWork := func(block *types.Block) { hash := ethash.SealHash(block.Header()) currentWork[0] = hash.Hex() currentWork[1] = common.BytesToHash(SeedHash(block.NumberU64())).Hex() currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex() + currentWork[3] = hexutil.EncodeBig(block.Number()) // Trace the seal work fetched by remote sealer. currentBlock = block