以太坊的資料儲存結構

2021-10-25 07:20:36 字數 1342 閱讀 2809

區塊分為兩部分,即區塊頭和區塊體。

區塊頭就是以太坊中的區塊鏈部分。它儲存了前乙個區塊(也可稱為父區塊)的雜湊值,通過區塊頭的連線形成了一條由密碼學背書的鏈。

區塊體包含了此區塊中記錄的一系列交易,以及叔塊(ommer)區塊頭列表。

區塊頭的結構如下圖所示

其中交易樹和收據樹是merkle樹,狀態樹是merkle patricia tree.

三棵樹求取根雜湊,可以得到區塊頭中的stateroot,transactionsroot,receiptsroot三個字段。這樣就建立了交易和區塊頭字段的對映。當其他使用者收到塊,根據塊裡的交易可以計算出收據和狀態,計算三個根雜湊後和區塊頭的三個字段進行驗證,判斷這是否為合法的塊。

以太坊中所有的賬戶資訊都體現在世界狀態之中,並由世界狀態樹儲存。如果你想知道某一賬戶的餘額,或者某智慧型合約當前的狀態,就需要通過查詢世界狀態樹來獲取該賬戶的具體狀態資訊。賬戶分為兩種:

賬戶儲存樹是儲存與賬戶相關聯資料的結構。該項只有合約賬戶才有,而在 eoa 中, storageroot 留空、 codehash 則是一串空字串的雜湊值。所有智慧型合約的資料都以 32 位元組對映的形式儲存在賬戶儲存樹中。賬戶狀態中的 storageroot 區域負責維持賬戶儲存樹根節點雜湊值。可以理解為儲存solidity智慧型合約中的狀態變數值。

多個區塊的mpt樹共享了賬戶狀態,子塊狀態樹和父塊狀態樹的差別在於它指向了在子區塊中被改變了的賬戶。這樣節省了總的儲存空間,方便了塊的回滾操作。例如某個智慧型合約賬戶中,智慧型合約的變數值由29改變成了45。

外部賬戶可以建立交易,用自己的私鑰進行簽名之傳送訊息給另乙個外部賬戶或合約賬戶。兩個外部賬戶之間傳送的訊息即為轉賬操作。從外部賬戶到合約賬戶的訊息會啟用合約賬戶的**,執行各種操作,也就是我們常說的呼叫智慧型合約。可以通過向0位址發起交易來建立合約賬戶。交易包含以下主要字段:

賬戶建立交易並向其它節點廣播後,會被其它節點執行並放入準備打包的區塊。在這個過程中會生成乙個收據。收據的主要欄位有:

總體而言,以太坊有四種字首樹:

以太坊之二以太坊資料結構

2.1 本地資料結構 下圖是本地儲存的以太坊資料結構 block represents an entire block in the ethereum blockchain.type block struct 肖老師說對於本節課只有前三項是有效的 header 指向區塊鏈塊頭的指標 uncles 指...

深入講解以太坊的資料儲存

前言 本文的目的是打算深入淺出講講以太坊的整體結構以及儲存相關的內容,會聚焦在儲存上,同時會結合原始碼講解,整個過程也可以體會到作者的設計思想之精妙。block是最重要的資料結構之一,主要由header和body兩部分組成 1,block原始碼 部分重要字段 type block struct 1....

以太坊資料結構MPT

鏈客,專為開發者而生,有問必答!trie字典樹 trie樹,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。上圖是一棵trie樹,表示了字串集合 從上圖中我們可以看出trie樹的特點 根節點不包含...