Merkle-Patricia-Tries
默克爾樹和帕特里夏樹如何共存
我了解這些樹是如何單獨工作的,但我無法想像如何將它放在一個結構中。
來自乙太坊的維基:
乙太坊中的所有大量數據都儲存在稱為 Patricia Merkle 樹的資料結構中,這是一種樹結構,其中樹中的每個節點都是其子節點的雜湊值。每組鍵/值對映射到一個唯一的根雜湊,並且只需要一小部分節點來證明特定的鍵/值組合在樹中對應於特定的根雜湊。
此外,檢查此圖,無法看到每個節點是其子節點的雜湊值。
從官方規範,無法理解下面的部分。目前範例中的 <> 是什麼意思?
<64 6f> : 'verb' <64 6f 67> : 'puppy' <64 6f 67 65> : 'coin' <68 6f 72 73 65> : 'stallion' Now, we build such a trie with the following key/value pairs in the underlying DB: rootHash: [ <16>, hashA ] hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, hashC, <>, <>, <>, <>, <>, <>, <>, <> ] hashC: [ <20 6f 72 73 65>, 'stallion' ] hashB: [ <00 6f>, hashD ] hashD: [ <>, <>, <>, <>, <>, <>, hashE, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'verb' ] hashE: [ <17>, hashF ] hashF: [ <>, <>, <>, <>, <>, <>, hashG, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'puppy' ] hashG: [ <35>, 'coin' ]
編輯: 好的,所以我知道 hashA 空括號’<>‘是分支節點中的空槽。
在乙太坊中,資料結構是修改後的 Merkle Patricia Trie
默克爾:
樹的 merkle 部分意味著父級使用子級的雜湊來確保整個樹被加密證明是不可變的。
在上面的例子中,
- rootHash 指向 hashA
- hashA 依次指向 hashB 和 hashC
帕特里夏·特里:
在 Patricia(“檢索以字母數字編碼的資訊的實用算法”)Trie 中(注意:“trie”來自 re - trie -val:
- 邊緣包含內容
- 節點表示分支或葉子(即 trie 終止)。
修改____:
在資料結構的乙太坊版本中,樹中的節點是:
- Patricia 邊 & 和葉節點的組合(例如上面的 hashC)
- Patricia 分支節點(如上面的 hashA)
- 一條 Patricia 邊(如上面的 hashB)
修改後的帕特里夏樹的所有節點都儲存在平面鍵值 LevelDB 中,如 sha3(rlp(node))。然後擴展節點儲存來自 levelDB 的雜湊值作為對其他節點的引用。這裡的解釋很好