Merkle Tree
1. Merkle Tree 是什么
Merkle Tree 是一種 二叉哈希樹(Binary Hash Tree),它的作用是把大量數據的哈希值組織成樹狀結構,用 一個根哈希(Merkle Root) 來代表全部數據的完整性。
你可以把它理解成:
"用一個短短的指紋(Merkle Root)證明整個數據庫的內容沒有被篡改。"
2. 結構示意
假設我們有 4 個數據塊:A, B, C, D
-
對每個數據塊做哈希:
hA = hash(A) hB = hash(B) hC = hash(C) hD = hash(D) -
兩兩合并再哈希:
hAB = hash(hA + hB) hCD = hash(hC + hD) -
最終合并得到根哈希:
root = hash(hAB + hCD)
結構像這樣:
Merkle Root
/ \
hAB hCD
/ \ / \
hA hB hC hD
3. 它的好處
? 快速驗證數據是否在集合中
- 你只需要提供少量節點的哈希值(Merkle Proof),就能證明某個數據在這棵樹里。
- 不用下載整個數據集。
? 節省存儲和傳輸
- 例如區塊鏈節點,只需要保存 Merkle Root 就能校驗交易。
? 高效的防篡改機制
- 任何一個數據塊被改動,最終的 Merkle Root 都會變化。
4. 在區塊鏈中的用途
-
比特幣 / 以太坊
- 區塊頭(Block Header)里會存 交易的 Merkle Root,保證交易列表不可篡改。
-
airdrop白名單
-
如果一個airdrop活動有 100 萬個地址,直接存到合約里會非常貴。
-
解決方法:
- 離線計算 Merkle Tree,把所有地址做成
Merkle Root。 - 部署合約時只存 Root。
- 領取空投時,用戶提交自己的地址和 Merkle Proof(驗證路徑所需的所有兄弟節點哈希值的集合),合約用
Merkle Root驗證地址是否在白名單中。
- 離線計算 Merkle Tree,把所有地址做成
-
5. Merkle Proof 驗證過程
假設要驗證 A 在樹中:
- 你提交:
hA+ 需要的兄弟節點哈希(比如hB和hCD)。 - 鏈上合約按順序拼接和哈希,直到算出
Merkle Root。 - 如果結果等于合約存的 Root,說明驗證通過。
6. MerkleProof庫
// Merkle樹驗證,調用MerkleProof庫的verify()函數
function _verify(bytes32 leaf, bytes32[] memory proof)
internal view returns (bool)
{
return MerkleProof.verify(proof, root, leaf);
}

浙公網安備 33010602011771號