diff options
author | gary rong <garyrong0905@gmail.com> | 2018-08-23 21:02:57 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-08-23 21:02:57 +0800 |
commit | 40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2 (patch) | |
tree | 70d5c37338def1e3246a3117ac84abca793c476a /consensus/ethash/consensus.go | |
parent | c3f7e3be3b60df3edd168e80aa89ee2992932b0d (diff) | |
download | dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar.gz dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar.bz2 dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar.lz dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar.xz dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.tar.zst dexon-40a71f28cf1ada0bf6bdcdc2f3c6f31a8da134a2.zip |
miner: fix state commit, track old work packages too (#17490)
* miner: commit state which is relative with sealing result
* consensus, core, miner, mobile: introduce sealHash interface
* miner: evict pending task with threshold
* miner: go fmt
Diffstat (limited to 'consensus/ethash/consensus.go')
-rw-r--r-- | consensus/ethash/consensus.go | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 86fd997ae..259cc5056 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -31,7 +31,9 @@ import ( "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto/sha3" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" ) // Ethash proof-of-work protocol constants. @@ -495,7 +497,7 @@ func (ethash *Ethash) verifySeal(chain consensus.ChainReader, header *types.Head if fulldag { dataset := ethash.dataset(number, true) if dataset.generated() { - digest, result = hashimotoFull(dataset.dataset, header.HashNoNonce().Bytes(), header.Nonce.Uint64()) + digest, result = hashimotoFull(dataset.dataset, ethash.SealHash(header).Bytes(), header.Nonce.Uint64()) // Datasets are unmapped in a finalizer. Ensure that the dataset stays alive // until after the call to hashimotoFull so it's not unmapped while being used. @@ -513,7 +515,7 @@ func (ethash *Ethash) verifySeal(chain consensus.ChainReader, header *types.Head if ethash.config.PowMode == ModeTest { size = 32 * 1024 } - digest, result = hashimotoLight(size, cache.cache, header.HashNoNonce().Bytes(), header.Nonce.Uint64()) + digest, result = hashimotoLight(size, cache.cache, ethash.SealHash(header).Bytes(), header.Nonce.Uint64()) // Caches are unmapped in a finalizer. Ensure that the cache stays alive // until after the call to hashimotoLight so it's not unmapped while being used. @@ -552,6 +554,29 @@ func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header return types.NewBlock(header, txs, uncles, receipts), nil } +// SealHash returns the hash of a block prior to it being sealed. +func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { + hasher := sha3.NewKeccak256() + + rlp.Encode(hasher, []interface{}{ + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra, + }) + hasher.Sum(hash[:0]) + return hash +} + // Some weird constants to avoid constant memory allocs for them. var ( big8 = big.NewInt(8) |