當前位置:首頁 » 幣種行情 » eth創世塊

eth創世塊

發布時間: 2025-06-23 12:26:17

❶ Miner 流程

以太坊的礦工出塊的流程,不同版本有過變更,下面基於1.7.3版本和1.8.4版本來分享

channel: 用於1發1收

發送 :sampleChan<-

接收 : <-sampleChan 

Feed:用於1發多收,參考chainHeadCh

接收者注冊 :Subscribe(sampleChan)

發送 :send, 發送的地方不太好找,需要通過send和event/channel類型查找,例如miner中主要涉及到的就是 PostChainEvents

接收 :<-sampleChan

數據結構:

可以理解為操作間(eth)中有了礦(tx),那麼礦主(miner)安排工人(worker)挖礦(seal)。結構體定義如下:

Type Miner struct {  -- - 理解為礦主

    mux        *event.TypeMux

    worker     *worker    ---- 理解為幹活的工人

    coinbase    common.Address

    eth            Backend    - --- 理解為操作間

    engine      consensus.Engine    ---- 理解為挖礦的工具

    exitCh        chan struct {}

    canStart        int32 //canstart indicates whether we can start the mining operation

    shouldStart  int32 //shouldstart indicates whether we should start after sync

}

 流程圖如下:

1.  節點啟動: backend.new->miner.new->worker.new: 調用commitNewWork,裡面使用push把work傳遞給cpuAgent, 之後在geth命令行敲miner.start()後->miner.start->worker.start->cpuAgent.start,調用Seal,計算nonce值,再發送 recv 消息,通知 worker . wait ,在收到之後將塊打包插入到區塊鏈,之後調用PostChainEvents,發送消息chainHeadCh, Worker.update 在收到消息後,重新調用 commitNewWor k,形成一個循環。

 2.  創世塊: 調用geth的init命令觸發調用initGenesis->SetupGenesisBlock, 裡面具體強調一下time是使用的genesisBlock.json中的值,一般都是0.

  3.  正常情況: worker . wait ,在收到之後將塊打包插入到區塊鏈,之後調用PostChainEvents,發送消息chainHeadCh, Worker.update 在收到消息後,重新調用 commitNewWor k,形成一個循環。

Miner .new: 在backend new的時候調用,即在節點啟動的時候調用。

Miner . update :在節點啟動的時候調用,用於監控是否有塊同步,如果有則停止挖礦,如果沒有啟動挖礦,這個在POW這種競爭性出塊的環境中需要。

Worker .new: 在miner.new的時候調用,記載節點啟動的時候調用 

Worker.update: 節點啟動的時候調用,如果是非全節點的話用於監控接受交易transaction,關鍵函數 commitTransactions ,還用於調度在收到 chainHeadCh 的消息後,觸發 commitNewWork

其中 commitNewWork :  用於將pending的tx輸入到系統,計算trie等等操作,生成block,並將work push到cpuAgent處理,注意沒有蓋章

Worker. wait (對應於 1.8.4 的 resultLoop ) :節點啟動的時候調用,循環監聽 recv 消息,將攜帶的block插入區塊鏈中、發送廣播消息( NewMinedBlockEvent )、發送消息 PostChainEvents (發送 ChainHeadEvent ,即 chainHeadCh ),其中的關鍵函數是 WriteBlockAndState 。

cpuAgent .update() :  在cpuAgent.start()->worker.start->miner.start->geth的命令行調用之後啟動循環,用於接收 commitNewWork 分配下來的work,關鍵函數 mine ,裡面調用 Seal ,主要是完成POW尋找nonce值的操作,發送 recv 消息通知worker,也可以叫做蓋章。

類圖如下:

具體結構不再贅述

流程:

Miner.update:用於監控是否有塊同步,如果有則停止挖礦,這個在POW這種競爭性出塊的環境中需要

mainLoop:收到newWorkCh消息後處理,調用commitNewWork中的commit發送taskCh消息

newWorkLoop:收到startCh消息和chainHeadCh消息後發送newWorkCh消息

resultLoop:循環監聽resultCh(seal發送)消息,將攜帶的block插入區塊鏈中,並發送廣播消息,關鍵函數WriteBlockAndState,並發送chainHeadCh消息

taskLoop:以前agent做的事情,收到taskCh消息後,調用seal,裡面發送resultCh消息

熱點內容
收到假eth幣 發布:2025-10-20 08:58:16 瀏覽:973
暗黑破壞神2eth打孔 發布:2025-10-20 08:42:58 瀏覽:105
BTC和CBT是一樣的嗎 發布:2025-10-20 08:42:57 瀏覽:233
華碩trx40Pro供電 發布:2025-10-20 08:33:26 瀏覽:432
曬人民幣編號的朋友圈 發布:2025-10-20 08:25:32 瀏覽:687
doge格式 發布:2025-10-20 08:02:00 瀏覽:382
以太坊會爆發嗎 發布:2025-10-20 08:01:59 瀏覽:772
一台比特幣礦機的功率 發布:2025-10-20 07:39:24 瀏覽:925
trx輔助帶 發布:2025-10-20 07:35:29 瀏覽:48
比特幣哈希值有多少位 發布:2025-10-20 07:31:20 瀏覽:633