摘要:前言是以太坊封定義的一個(gè)接口,它的功能可以分為類驗(yàn)證區(qū)塊類,主要用在將區(qū)塊加入到區(qū)塊鏈前,對區(qū)塊進(jìn)行共識驗(yàn)證。輔助類生成以太坊共識相關(guān)的。被使用,是以太坊狀態(tài)管理服務(wù),當(dāng)報(bào)告數(shù)據(jù)的時(shí)候,需要獲取區(qū)塊的信息。
前言
engine是以太坊封定義的一個(gè)接口,它的功能可以分為3類:
驗(yàn)證區(qū)塊類,主要用在將區(qū)塊加入到區(qū)塊鏈前,對區(qū)塊進(jìn)行共識驗(yàn)證。
產(chǎn)生區(qū)塊類,主要用在挖礦時(shí)。
輔助類。
接下來我們看一下engine具體定義了哪些功能,還有各功能的使用場景。
engine定義的具體功能engine有3類功能,驗(yàn)證區(qū)塊類、產(chǎn)生區(qū)塊類、輔助類。因?yàn)楫a(chǎn)生區(qū)塊在前,驗(yàn)證區(qū)塊在后,接下來采用產(chǎn)生區(qū)塊類、驗(yàn)證區(qū)塊類、輔助類,分別介紹它們的功能和使用場景。
驗(yàn)證區(qū)塊類Prepare:初始化區(qū)塊頭信息,不同的共識算法初始化不同。使用場景是,worker創(chuàng)建work的時(shí)候調(diào)用。
Finalize:根據(jù)數(shù)據(jù)生成“基本定型”的區(qū)塊,但區(qū)塊頭中還缺少部分?jǐn)?shù)據(jù)。使用場景是,1)模擬區(qū)塊鏈的時(shí)候,被GenerateChain調(diào)用,用來生成區(qū)塊鏈。2)交易狀態(tài)管理時(shí),被StateProcessor.Process調(diào)用用來執(zhí)行交易。3)worker創(chuàng)建work的時(shí)候調(diào)用。
Seal:根據(jù)傳入的塊,進(jìn)行的是挖礦工作,使用挖礦的結(jié)果,修改區(qū)塊頭,然后生成新的區(qū)塊。使用場景是,被agent.mine調(diào)用。
驗(yàn)證區(qū)塊類VerifyHeader:驗(yàn)證區(qū)塊頭。使用在fetcher中,當(dāng)fetcher要插入?yún)^(qū)塊的時(shí)候,需要先對區(qū)塊頭進(jìn)行校驗(yàn)。
VerifyHeaders:驗(yàn)證一批區(qū)塊頭。有2種使用場景,1)區(qū)塊鏈中,insertChain當(dāng)把一批區(qū)塊插入到區(qū)塊鏈這個(gè)鏈條的時(shí)候,需要進(jìn)行檢查;2)LightChain中,把一批區(qū)塊頭插入到本地鏈。
VerifyUncles:驗(yàn)證區(qū)塊中的叔塊。insertChain當(dāng)區(qū)塊插入?yún)^(qū)塊鏈的時(shí)候,需要對叔塊進(jìn)行驗(yàn)證,調(diào)用在VerifyHeaders之后。
VerifySeal:針對Seal函數(shù)做的功能進(jìn)行驗(yàn)證。驗(yàn)證Seal()所修改的區(qū)塊頭中的數(shù)據(jù)。對外的使用場景是,把Work發(fā)送給遠(yuǎn)端Agent的時(shí)候調(diào)用。對內(nèi)的使用場景是,驗(yàn)證區(qū)塊頭的時(shí)候會被調(diào)用。
輔助類APIs:生成以太坊共識相關(guān)的API。在以太坊啟動RPC服務(wù)時(shí),生成API。
Author:讀取區(qū)塊頭中的coinbase。被ethstats使用,ethstats是以太坊狀態(tài)管理服務(wù),當(dāng)報(bào)告數(shù)據(jù)的時(shí)候,需要獲取區(qū)塊的Author信息。
最后關(guān)注一下藍(lán)色的線條,它們代表insertChain所調(diào)用的范圍,先關(guān)的有VerifyHeaders、VerifyUncles、Finalize,涉及到塊頭的驗(yàn)證、叔塊的驗(yàn)證,以及執(zhí)行區(qū)塊中的交易,一個(gè)區(qū)塊加入到區(qū)塊鏈中,不僅要驗(yàn)證,還要執(zhí)行各種交易,改變各種狀態(tài),所有節(jié)點(diǎn)執(zhí)行確定性的行為之后,達(dá)成一致性。
FAQQ:誰實(shí)現(xiàn)engine
A:以太坊中的Ethash和Clique實(shí)現(xiàn)了engine,Ethash是基于PoW的共識,Clique是基于PoA的共識。
Q:為什么insertChain沒有調(diào)用VerifySeal?
A:因?yàn)?b>Seal()修改的是header中的部分?jǐn)?shù)據(jù),在驗(yàn)證區(qū)塊頭的時(shí)候,會被調(diào)用。只是調(diào)用流程在Ethash和Clique中的實(shí)現(xiàn)略有不同,后續(xù)講解。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/24397.html
摘要:下面來看看具體是怎么實(shí)現(xiàn)接口的可以看到,啟動了多個(gè)線程調(diào)用函數(shù),當(dāng)有線程挖到時(shí),會通過傳入的通道傳出結(jié)果??梢钥吹皆谥饕h(huán)中,不斷遞增的值,調(diào)用函數(shù)計(jì)算上面公式中的左邊,而則是公式的右邊。 前言 挖礦(mine)是指礦工節(jié)點(diǎn)互相競爭生成新區(qū)塊以寫入整個(gè)區(qū)塊鏈獲得獎(jiǎng)勵(lì)的過程.共識(consensus)是指區(qū)塊鏈各個(gè)節(jié)點(diǎn)對下一個(gè)區(qū)塊的內(nèi)容形成一致的過程在以太坊中, miner包向外提供挖...
摘要:在中,該隨機(jī)數(shù)稱為,它需要滿足一個(gè)公式其中,去除區(qū)塊頭中生成的哈希值,見。固定值,生成的哈希值的最大取值。哈希值滿足條件的概率是,礦工需要進(jìn)行次的判斷,才有可能找到一個(gè)符合條件的,當(dāng)前以太坊難度為。 前言 Ethash實(shí)現(xiàn)了PoW,PoW的精妙在于通過一個(gè)隨機(jī)數(shù)確定,礦工確實(shí)做了大量的工作,并且是沒有辦法作弊的。接下來將介紹: Ethash的挖礦本質(zhì)。 Ethash是如何挖礦的。 如...
摘要:接下來我們將從以下角度介紹礦工角色。我們分別使用礦長副礦長礦工進(jìn)行類比。副礦長,負(fù)責(zé)具體挖礦工作的安排,把挖礦任務(wù)安排給。礦工的主要函數(shù)介紹和的主要函數(shù),他們是礦工的具體運(yùn)作機(jī)制。負(fù)責(zé)處理外部事件。 前言 礦工在PoW中負(fù)責(zé)了產(chǎn)生區(qū)塊的工作,把一大堆交易交給它,它生成一個(gè)證明自己做了很多工作的區(qū)塊,然后將這個(gè)區(qū)塊加入到本地區(qū)塊鏈并且廣播給其他節(jié)點(diǎn)。 接下來我們將從以下角度介紹礦工: ...
摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請讀者前往原文閱讀 本章的文章越來越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...
摘要:以太坊中除了基于運(yùn)算能力的外,還有基于權(quán)利證明的共識機(jī)制,是以太坊的共識算法的實(shí)現(xiàn),這里主要對的相關(guān)源碼做一個(gè)解讀分析。檢查包頭中包含的簽名是否滿足共識協(xié)議 以太坊中除了基于運(yùn)算能力的POW(Ethash)外,還有基于權(quán)利證明的POA共識機(jī)制,Clique是以太坊的POA共識算法的實(shí)現(xiàn),這里主要對POA的Clique相關(guān)源碼做一個(gè)解讀分析。 Clique的初始化在 Ethereum.S...
閱讀 3480·2021-11-22 13:53
閱讀 3527·2021-10-11 11:11
閱讀 1002·2019-08-30 14:12
閱讀 1308·2019-08-29 17:16
閱讀 745·2019-08-29 16:45
閱讀 3454·2019-08-29 12:56
閱讀 741·2019-08-28 17:55
閱讀 2154·2019-08-26 13:24