State-Trie

乙太坊默克爾樹解釋

  • October 12, 2018

這是我對乙太坊如何儲存交易的基本理解

  1. 為每筆交易生成一個雜湊
  2. 然後選擇對並為每對生成一個雜湊
  3. 這樣最後剩下的雜湊就變成了根
  4. 區塊頭包含三棵 Merkle 樹
  • 維持狀態
  • 維護交易
  • 維護收據
  1. 每個塊引用其前一個塊的雜湊
  2. 我附上了顯示這種結構的非常常見的圖表

在此處輸入圖像描述

問題:

  1. Block 180994 的狀態根指向 Block 180993 的狀態根的第一個左孩子。它是什麼意思,為什麼需要它?

  2. 舉個例子

  • 第一個區塊 180993 正在進行交易,其中賬戶 98 將 30 個乙太幣傳遞給賬戶 100

  • 第二個區塊 180994 進行交易,其中賬戶 99 將 20 個乙太幣傳遞給賬戶 100

*這將如何反映在樹中?如圖所示,是否會有類似的 Merkle 樹交叉映射?*請解釋

添加了更多細節

在此處輸入圖像描述

狀態擁有區塊鏈中所有賬戶的資訊,並不儲存在每個區塊中。狀態是從創世塊開始處理每個塊生成的。每個區塊只會修改部分狀態。

黃皮書 (pdf)中定義瞭如何生成狀態。它的定義方式使其可以用任何程式語言實現,並且所有此類實現都將生成相同的表示。

  1. 這意味著左側在塊 180994 中沒有被修改。它只是一個表示,記住儲存整個狀態,只儲存根雜湊。
  2. 有一篇關於Ethereum 中的 Merkle Trees 的文章,我可能不能做得更好。默克爾樹的基本思想是,對於單個操作,它只會修改最小數量的節點來重新計算根雜湊。

據說乙太坊有一個基於賬戶的區塊鏈。狀態不直接儲存在每個塊中。

為了建立更好的概念理解,我們可以說所有賬戶狀態都以“狀態數據”的形式駐留在乙太坊節點本地。出於性能原因,這很常見,並假設它將儲存在 Merkle Patricia 樹中,但協議規範不需要它。黃紙指出,

世界狀態(state),是地址(160 位 標識符)和賬戶狀態(序列化為 RLP 的資料結構, 見附錄 B)之間的映射。雖然沒有儲存在區塊鏈上,但假設 實現將在修改後的 Merkle Patricia 樹中維護此映射

所以,除了區塊鏈本身,我們發現自己在處理“第二狀態”。狀態數據可以被描述為隱含的,這意味著它可以從實際的區塊鏈數據中計算出來。事務包含確定新狀態數據的所有適當欄位。與比特幣不同,乙太坊區塊包含交易列表和整個狀態樹的 Merkle 根雜湊的副本。

摘自 Gavin Wood 博士的黃皮書

乙太坊執行時環境:(又名ERE 提供給在 EVM 中執行的自治對象的環境。包括 EVM,還包括 EVM 依賴 於某些I/O指令(包括CALL& )的世界狀態的結構CREATE

總而言之,狀態的儲存由乙太坊協議的客戶端實現管理。我附上了一個我創建的(過度簡化的)圖像,旨在顯示兩方之間發送交易之前和之後的狀態轉換。

我為幫助理解狀態轉換的概念模型而創建的圖像 就理解 Merkle Patricia 樹而言,我會向您指出任何涵蓋Radix Trees的文章的方向

引用自:https://ethereum.stackexchange.com/questions/15288