Merkle-Patricia-Tries

默克爾樹和帕特里夏樹如何共存

  • December 24, 2018

我了解這些樹是如何單獨工作的,但我無法想像如何將它放在一個結構中。

來自乙太坊的維基:

乙太坊中的所有大量數據都儲存在稱為 Patricia Merkle 樹的資料結構中,這是一種樹結構,其中樹中的每個節點都是其子節點的雜湊值。每組鍵/值對映射到一個唯一的根雜湊,並且只需要一小部分節點來證明特定的鍵/值組合在樹中對應於特定的根雜湊。

此外,檢查圖,無法看到每個節點是其子節點的雜湊值。

從官方規範,無法理解下面的部分。目前範例中的 <> 是什麼意思?

&lt;64 6f&gt; : 'verb'
&lt;64 6f 67&gt; : 'puppy'
&lt;64 6f 67 65&gt; : 'coin'
&lt;68 6f 72 73 65&gt; : 'stallion'
Now, we build such a trie with the following key/value pairs in the 
underlying DB:

rootHash: [ &lt;16&gt;, hashA ]
hashA:    [ &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, hashB, &lt;&gt;, &lt;&gt;, &lt;&gt;, hashC, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt; ]
hashC:    [ &lt;20 6f 72 73 65&gt;, 'stallion' ]
hashB:    [ &lt;00 6f&gt;, hashD ]
hashD:    [ &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, hashE, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, 'verb' ]
hashE:    [ &lt;17&gt;, hashF ]
hashF:    [ &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, hashG, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, &lt;&gt;, 'puppy' ]
hashG:    [ &lt;35&gt;, 'coin' ]

編輯: 好的,所以我知道 hashA 空括號’<>‘是分支節點中的空槽。

在乙太坊中,資料結構是修改後的 Merkle Patricia Trie

默克爾

樹的 merkle 部分意味著父級使用子級的雜湊來確保整個樹被加密證明是不可變的。

在上面的例子中,

  1. rootHash 指向 hashA
  2. hashA 依次指向 hashB 和 hashC

帕特里夏·特里

這些是r=2 的基數樹,如此處所述

在此處輸入圖像描述

在 Patricia(“檢索以字母數字編碼的資訊的實用算法”)Trie 中(注意:“trie”來自 re - trie -val:

  • 邊緣包含內容
  • 節點表示分支或葉子(即 trie 終止)。

修改____

在資料結構的乙太坊版本中,樹中的節點是:

  • Patricia 邊 & 和葉節點的組合(例如上面的 hashC)
  • Patricia 分支節點(如上面的 hashA)
  • 一條 Patricia 邊(如上面的 hashB)

修改後的帕特里夏樹的所有節點都儲存在平面鍵值 LevelDB 中,如 sha3(rlp(node))。然後擴展節點儲存來自 levelDB 的雜湊值作為對其他節點的引用。這裡的解釋很好

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