aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgary rong <garyrong0905@gmail.com>2018-11-08 23:08:57 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-11-08 23:08:57 +0800
commit144c1c6c52456808428e2b69dbe5c4ebfc3606ca (patch)
tree8bc340d92c7090180931c8bdb9f793965088e862
parentb16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9 (diff)
downloaddexon-144c1c6c52456808428e2b69dbe5c4ebfc3606ca.tar.gz
dexon-144c1c6c52456808428e2b69dbe5c4ebfc3606ca.tar.zst
dexon-144c1c6c52456808428e2b69dbe5c4ebfc3606ca.zip
consensus: extend getWork API with block number (#18038)
-rw-r--r--consensus/ethash/api.go11
-rw-r--r--consensus/ethash/ethash.go2
-rw-r--r--consensus/ethash/ethash_test.go2
-rw-r--r--consensus/ethash/sealer.go5
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