Transactions

乙太坊交易樹是如何形成的

  • August 14, 2021

我正在尋找交易樹結構的清晰度。下面我列出了我的理解

  1. 如果我沒記錯的話,狀態變化會在單個狀態樹中進行跟踪。
  2. 每個塊都有一個狀態根雜湊,指向具有參與到該塊的交易集的帳戶狀態的根
  3. 所以隨著區塊的不斷增加(即賬戶狀態發生變化),這個狀態樹會增長
  4. 但是交易樹呢?
  5. 交易根雜湊是否存在於指向單個樹根的塊中,或者它是像狀態樹一樣的單個樹(即它指向不同的根級別)
  6. 為了突出這種差異,我為狀態樹和事務樹創建了兩個圖表。
  7. 所以我想說的是所有塊都指的是一個公共狀態樹。但是每個區塊都有自己的交易樹
  8. 請分享您的觀點並在您認為我錯的地方糾正我

狀態樹 在此處輸入圖像描述

交易樹 在此處輸入圖像描述

我將不同意對另一個答案的評論中的對話。(提前道歉!)

我認為問題中概述的內容通常是正確的,至少從我理解事物的方式來看是正確的。

  1. 交易根雜湊是否存在於指向單個樹根的塊中,或者它是像狀態樹一樣的單個樹(即它指向不同的根級別)

**單個樹/trie 根。**狀態樹/trie 是不同的,因為我們經常從前一個塊更新現有狀態,而交易不會發生這樣的事情。

我不認為樹/特里實際上只是一個列表(即一直向下單分支)。首先,我們將完全失去使用樹/樹的優勢。樹/特里樹為我們提供O(log x n)遍歷、訪問等,而列表將是O(n)。其次,在 Merkle 樹中,葉子保存實際數據,父節點保存中間雜湊值一直到根節點。因此,“Merkle 列表”只能保存一個交易,即最終節點或尾部。(但是尾巴和根是一樣的……所以這樣的事情無論如何都沒有意義。)

其次,來自 Geth 程式碼[1 , 2 , [3]](https://github.com/ethereum/go-ethereum/blob/922c1f8f9f7763948da6ed755abd6e1fcaca2cac/trie/node.go#L172),我認為來自黃皮書

$$ equation (176), although it’s difficult to tell… $$,事務樹的順序為16——即每個節點有16個子節點。同樣,這裡的圖片對於每棵樹/嘗試也有一個“16”的標籤。 我不確定如何維護事務的順序或將其轉換為樹。

免責聲明:如果我在描述上述樹/特里樹中每個節點的子節點數時將順序度數混為一談,那麼道歉。

我發現的絕對最好的解決方法是乙太坊本體:https ://github.com/ConsenSys/EthOn 。

我不知道您是否可以簡單地連結到答案,但如果不是,您應該這樣做。在 StackExchange 上複製這項工作將是一個錯誤。

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