導航:首頁 > 以太坊區 > 以太坊trie

以太坊trie

發布時間:2023-03-18 00:28:57

區塊鏈是搜索樹嗎

並不是,搜索樹這種數據結構,在區塊鏈中扮演著重要的角色,交易的數據,賬號的管理,交易的收據信息等都是一樹為基礎。本文主要介紹三種樹,也是在以太坊的中運用最多的三種樹結構:Trie樹, Patricia Trie和Merkle樹。搜索樹是區塊鏈中的一個部分

❷ 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消息

閱讀全文

與以太坊trie相關的資料

熱點內容
數字貨幣空投批量 瀏覽:716
以太坊技術實施 瀏覽:977
3m是區塊鏈 瀏覽:746
以太坊挖前景如何 瀏覽:255
ethb以太坊 瀏覽:131
bloomberg區塊鏈上線 瀏覽:201
以太坊私鑰有哪些字母 瀏覽:654
區塊鏈spm數字貨幣 瀏覽:172
區塊鏈跨境支付模式 瀏覽:686
區塊鏈錢包提幣後不清零 瀏覽:98
以太坊1g算率每天能出多少 瀏覽:972
虛擬貨幣bsv 瀏覽:358
hlt數字貨幣 瀏覽:221
以太坊加密羊駝中文版 瀏覽:169
區塊鏈影響互聯網科技產業 瀏覽:929
企業服務區塊鏈阿字五 瀏覽:666
區塊鏈十運動十社交 瀏覽:338
比特幣礦池會被監管嗎 瀏覽:106
淺談區塊鏈對支付體系的影響 瀏覽:266
xmm數字貨幣 瀏覽:671