當前位置:首頁 » 幣種行情 » 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消息

熱點內容
元宇宙股票美國 發布:2025-06-23 15:53:19 瀏覽:871
ifs區塊鏈 發布:2025-06-23 15:53:07 瀏覽:364
最新比特幣行情k線圖 發布:2025-06-23 15:47:34 瀏覽:220
比特幣現金量 發布:2025-06-23 15:44:24 瀏覽:328
比特幣正常跌幅 發布:2025-06-23 15:44:06 瀏覽:998
顯卡礦機靜音風扇 發布:2025-06-23 15:18:53 瀏覽:831
元宇宙真正的龍頭 發布:2025-06-23 15:03:54 瀏覽:45
比特幣節點就是礦工 發布:2025-06-23 15:02:56 瀏覽:590
區塊鏈的漏洞案例 發布:2025-06-23 14:50:52 瀏覽:771
國內真正元宇宙公司 發布:2025-06-23 14:43:44 瀏覽:458