consensus/ethash: add algorithm identifer

This commit is contained in:
rjl493456442 2019-01-11 13:58:00 +08:00
parent 38cce9ac33
commit 921cec807a
3 changed files with 15 additions and 7 deletions

View file

@ -38,27 +38,28 @@ type API struct {
// result[1] - 32 bytes hex encoded seed hash used for DAG // result[1] - 32 bytes hex encoded seed hash used for DAG
// result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty // result[2] - 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty
// result[3] - hex encoded block number // result[3] - hex encoded block number
func (api *API) GetWork() ([4]string, error) { // result[4] - algorithm name and version tag.
func (api *API) GetWork() ([5]string, error) {
if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest { if api.ethash.config.PowMode != ModeNormal && api.ethash.config.PowMode != ModeTest {
return [4]string{}, errors.New("not supported") return [5]string{}, errors.New("not supported")
} }
var ( var (
workCh = make(chan [4]string, 1) workCh = make(chan [5]string, 1)
errc = make(chan error, 1) errc = make(chan error, 1)
) )
select { select {
case api.ethash.fetchWorkCh <- &sealWork{errc: errc, res: workCh}: case api.ethash.fetchWorkCh <- &sealWork{errc: errc, res: workCh}:
case <-api.ethash.exitCh: case <-api.ethash.exitCh:
return [4]string{}, errEthashStopped return [5]string{}, errEthashStopped
} }
select { select {
case work := <-workCh: case work := <-workCh:
return work, nil return work, nil
case err := <-errc: case err := <-errc:
return [4]string{}, err return [5]string{}, err
} }
} }

View file

@ -43,6 +43,11 @@ import (
"github.com/hashicorp/golang-lru/simplelru" "github.com/hashicorp/golang-lru/simplelru"
) )
const (
algorithmName = "ethash" // PoW algorithm name
algorithmVersion = "1.0.0" // Algorithm revision information
)
var ErrInvalidDumpMagic = errors.New("invalid dump magic") var ErrInvalidDumpMagic = errors.New("invalid dump magic")
var ( var (
@ -432,7 +437,7 @@ type hashrate struct {
// sealWork wraps a seal work package for remote sealer. // sealWork wraps a seal work package for remote sealer.
type sealWork struct { type sealWork struct {
errc chan error errc chan error
res chan [4]string res chan [5]string
} }
// Ethash is a consensus engine based on proof-of-work implementing the ethash // Ethash is a consensus engine based on proof-of-work implementing the ethash

View file

@ -26,6 +26,7 @@ import (
"math/rand" "math/rand"
"net/http" "net/http"
"runtime" "runtime"
"strings"
"sync" "sync"
"time" "time"
@ -194,7 +195,7 @@ func (ethash *Ethash) remote(notify []string, noverify bool) {
results chan<- *types.Block results chan<- *types.Block
currentBlock *types.Block currentBlock *types.Block
currentWork [4]string currentWork [5]string
notifyTransport = &http.Transport{} notifyTransport = &http.Transport{}
notifyClient = &http.Client{ notifyClient = &http.Client{
@ -243,6 +244,7 @@ func (ethash *Ethash) remote(notify []string, noverify bool) {
currentWork[1] = common.BytesToHash(SeedHash(block.NumberU64())).Hex() currentWork[1] = common.BytesToHash(SeedHash(block.NumberU64())).Hex()
currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex() currentWork[2] = common.BytesToHash(new(big.Int).Div(two256, block.Difficulty()).Bytes()).Hex()
currentWork[3] = hexutil.EncodeBig(block.Number()) currentWork[3] = hexutil.EncodeBig(block.Number())
currentWork[4] = strings.Join([]string{algorithmName, algorithmVersion}, "/")
// Trace the seal work fetched by remote sealer. // Trace the seal work fetched by remote sealer.
currentBlock = block currentBlock = block