concensus.go sealer.go源碼

來源:互聯網
上載者:User

在eth/concensus.go中主要是驗證區塊頭,調整挖礦難度的演算法,以及驗證挖到的區塊是否正確等等功能。還有前期準備,計算獎勵等

// VerifySeal implements consensus.Engine, checking whether the given block satisfies// the PoW difficulty requirements.func (ethash *Ethash) VerifySeal(chain consensus.ChainReader, header *types.Header) error {// If we're running a fake PoW, accept any seal as validif ethash.config.PowMode == ModeFake || ethash.config.PowMode == ModeFullFake {time.Sleep(ethash.fakeDelay)if ethash.fakeFail == header.Number.Uint64() {return errInvalidPoW}return nil}// If we're running a shared PoW, delegate verification to itif ethash.shared != nil {return ethash.shared.VerifySeal(chain, header)}// Sanity check that the block number is below the lookup table size (60M blocks)number := header.Number.Uint64()if number/epochLength >= uint64(len(cacheSizes)) {// Go < 1.7 cannot calculate new cache/dataset sizes (no fast prime check)return errNonceOutOfRange}// Ensure that we have a valid difficulty for the blockif header.Difficulty.Sign() <= 0 {return errInvalidDifficulty}// Recompute the digest and PoW value and verify against the headercache := ethash.cache(number)size := datasetSize(number)if ethash.config.PowMode == ModeTest {size = 32 * 1024}digest, result := hashimotoLight(size, cache, header.HashNoNonce().Bytes(), header.Nonce.Uint64())if !bytes.Equal(header.MixDigest[:], digest) {return errInvalidMixDigest}target := new(big.Int).Div(maxUint256, header.Difficulty)if new(big.Int).SetBytes(result).Cmp(target) > 0 {return errInvalidPoW}return nil}
在sealer.go中主要是mine和seal兩個函數。 // Seal implements consensus.Engine, attempting to find a nonce that satisfies // the block's difficulty requirements.
mine is the actual proof-of-work miner that searches for a nonce starting from // seed that results in correct final block difficulty.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.