以太坊是如何運作的?(三)

買賣虛擬貨幣

世界狀態

我們知道以太坊的全球狀態包括賬戶地址和賬戶狀態之間的對映。該對映儲存在Merkle Patricia tree樹的資料結構中。

Merkle樹是一種由一組節點組成的二叉樹,其中:

l 樹底部的大量葉節點包含底層資料

l 一組中間節點,其中每個節點都是兩個子節點的雜湊

l 一個根節點,也是由兩個子節點的雜湊形成,表示樹的頂部

樹底部的資料是透過拆分資料產生,這些資料我們希望儲存進入塊中,然後把塊拆分進入桶中,之後取每個桶的雜湊並重復相同的過程,直到剩餘的雜湊總數變為只有一個:根雜湊。

Merkle樹要求每個儲存其中的值都有一個鍵。從樹的根節點開始,鍵應該告訴你要遵循哪個子節點,以獲取相應的值,值是儲存在葉節點上的。在以太坊的案例中,狀態樹的鍵/值對映是在地址和它們相關的賬戶之間的,包括了每個賬戶的餘額、nonce、codeHash、StorageRoot(其中StorageRoot本身就是一顆樹)。

(來源:以太坊白皮書)

相同的trie結構也被用於儲存交易和收據。更具體來說,每個區塊都有一個“塊頭”,塊頭儲存三種不同Merkle trie結構的根節點雜湊,包括:

l 狀態trie

l 交易trie

l 收據trie

把所有這些資訊有效地存入Merkle tries的能力在以太坊中非常有用,因為我們有“輕客戶端”和“輕節點”。請記住,區塊鏈由一堆節點維護。廣義上講,有兩類節點:全節點和輕節點。

完整節點透過下載整個鏈資料來同步區塊鏈,從創世區塊到當前區塊,執行其中包含的所有交易。通常,礦工儲存完整到歸檔節點,因為它們要去挖礦必須執行該操作。無須執行任一操作也可以下載完整節點。無論如何,任何全節點包括所有鏈。

但,除非一個節點有必要執行每個交易或為方便查詢歷史資料,否則,沒有必要儲存整條鏈的資料。這也是輕節點概念的由來。無須下載和儲存完整鏈的資料以及執行所有交易,輕節點僅下載鏈頭,從創世區塊到當前區塊的塊頭,而無須執行任何交易或檢索任何相關的狀態。由於輕節點可以訪問區塊頭,區塊頭包含了三種tries的雜湊,它們依然能夠輕易生成和接收可驗證的答案,如關於交易、事件、餘額等。

這樣做能行的原因是Merkle樹中的雜湊是向上傳播的——如果一個惡意使用者試圖把虛假交易置入Merkle樹的底部,這樣的改變會導致上面節點的雜湊發生變化,然後會繼續改變上面節點的雜湊,如此傳遞下去,最終改變了樹根的雜湊。

想要驗證資料的任何節點都能使用“Merkle證明”來達成目的。Merkle證明包含:

l 要證明的一堆資料和它的雜湊

l 樹的根雜湊

l “分支”(所有夥伴雜湊從塊到根的路徑順延而上)

所有讀取證明的人都能驗證分支的雜湊是沿著樹向上一致的,因此,給定的區塊實際上是在樹中的某個位置上。

總之,使用Merkle Patricia樹的好處是該結構的根節點在加密方面依賴於儲存在樹上的資料,因此根節點雜湊能夠用於該資料的安全標識。既然區塊頭包含狀態、交易以及收據樹三者的根雜湊,因此,任何節點都可以驗證一小部分的以太坊狀態,而無需儲存所有狀態,完整節點可能會非常大。


--未完待續---


------

風險警示:藍狐筆記所有文章都不構成投資推薦投資有風險,投資應該考慮個人風險承受能力,建議對專案進行深入考察,慎重做好自己的投資決策。

通往區塊鏈的新世界:關注“藍狐筆記”區塊鏈公眾號:lanhubiji 

或加入藍狐筆記的知識星球:https://t.zsxq.com/iaQNnIq

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;