以太坊原始碼分析 共識(1)礦工

2021-09-13 08:20:27 字數 2671 閱讀 4649

礦工在pow中負責了產生區塊的工作,把一大堆交易交給它,它生成乙個證明自己做了很多任務作的區塊,然後將這個區塊加入到本地區塊鏈並且廣播給其他節點。

接下來我們將從以下角度介紹礦工:

角色。礦工不是乙個人,而是一類人,可以把這一類人分成若干角色。

通過了解乙個區塊產生的主要流程,掌握礦工的工作流。

通過了解礦工的主要函式介紹,掌握礦工的主要挖礦機制。

介紹礦工由哪些部分組成,會和哪些其他模組進行互動,這些部分是如何協作產生區塊的。

有3種角色:miner、worker、agent。我們分別使用礦長、副礦長、礦工進行模擬。

worker:副礦長,負責具體挖礦工作的安排,把挖礦任務(work)安排給agent。

agent:真實的礦工,他們負責挖礦,把自己的勞動成果(result)交給worker,agent預設只有1個,可以通過api建立多個。

實際的挖礦過程基本不涉及miner,只涉及worker、agent和engine,engine是共識引擎模組,我們利用下圖介紹生成乙個區塊的主要流程。

挖礦過程中只涉及engine的3個介面:1)prepare()挖礦前的準備工作,2)finalize()形成乙個基本定型的區塊,3)seal()形成最終的區塊。
worker把區塊頭、交易、交易執行的收據等傳遞給engine.finalize。

engine.finalize返回乙個block,該block的header中缺少noncemixdigest,這兩個值是挖礦獲取的。

worker把block封裝到work,把work傳送給所有的agent。

agent.update把work傳遞給agent.mine。

agent.mine把work傳遞給engine.seal,呼叫engine.seal挖礦。

engine.seal把noncemixdigest填到區塊頭,生成乙個new block交給agent.mine.

agent.mine把new block封裝成result,傳送給worker。

介紹miner、worker和agent的主要函式,他們是礦工的具體運作機制。

主要關注2個函式:

new():負責建立miner。還建立1個worker和1個agent,但agent還可以通過api建立,然後啟動update函式。

update():負責關注**********的3個事件:startevent、doneevent、failedevent。startevent是開始同步區塊,必須停止挖礦,doneevent和failedevent是同步成功或者失敗,是同步的結束,已經可以挖礦了。表明:挖礦和同步區塊不可同時進行,盡量降低了區塊衝突的可能。主要是3個函式:

commitnewwork():負責生成work,分配agent。這個階段做了很多任務作,呼叫engine.prepare進行準備工作,建立header,執行交易,獲取uncle,使用engine.finalize形成「基本定型」的臨時區塊,建立work,最後把work傳遞給agent。另外commitnewwork存在多處呼叫,並且worker有waitupdate另外2個協程,他們都會呼叫commitnewwork,所以存在臨界區需要謹慎加鎖。

update():負責處理外部事件。它是死迴圈,主要處理3種事件:1)chainheadevent,有了新區塊頭,所以得切換到挖下乙個高度的區塊,2)chainsideevent,收到了uncle區塊,快取起來,3)txpreevent,預處理交易,如果在挖礦執行commitnewwork,如果未挖礦,則交易設定為未決狀態。

wait():負責處理agent挖礦的結果。它是死迴圈,一直等待接收agent發回的result,然後把區塊加入到本地資料庫,如果沒有問題,就發布newminedblockevent事件,通告其他節點挖到了乙個新塊。

主要2個函式:

update():負責接收worker發來的任務(work)。它是死迴圈,把work交給mine去挖礦。

mine():負責挖礦。它擁有挖礦的能力,呼叫engine.seal挖礦,如果挖礦成功則生成result,傳送給worker。

最後兩張**網路,侵刪。

以太坊原始碼分析 Ethash共識演算法

ethereum當前和bitcoin一樣,採用基於工作量證明 proof of work,pow 的共識演算法來產生新的區塊。與bitcoin不同的是,ethereum採用的共識演算法可以抵禦asic礦機對挖礦工作的壟斷地位,這個演算法叫做ethash。為什麼要反asic pow的的核心是hash運...

以太坊原始碼分析 共識(3)PoW

ethash實現了pow,pow的精妙在於通過乙個隨機數確定,礦工確實做了大量的工作,並且是沒有辦法作弊的。接下來將介紹 ethash的挖礦本質。ethash是如何挖礦的。如何驗證ethash的隨機數。挖礦的本質是找到乙個隨機數,證明自己做了很多任務作 計算 在ethash中,該隨機數稱為nonce...

以太坊原始碼分析 Whisper

whisper具有以下基本特性和概念 通訊加密 每一條whisper訊息在網路上都是加密傳輸的,可以選擇非對稱加密 橢圓曲線 和對稱加密 aes gsm 兩種加密演算法之一。envelope 信封 envelope是網路中傳輸的whisper訊息的基本單位,它包含已加密的原始訊息以及訊息相關的控制資...