跳到正文

默克爾樹

默克爾樹用一個根雜湊承諾有序資料,並在無需傳輸完整資料集的情況下提供精簡的包含證明。

更新於

僅供教育用途;不構成投資建議。投資可能導致損失。

直接回答

默克爾樹把每筆資料雜湊成葉節點,反覆合併相鄰雜湊,得到一個頂層默克爾根。根雜湊是對葉節點以及建樹時採用的順序和雜湊規則的精簡承諾。

默克爾證明為一片葉節點提供每一層的兄弟雜湊。驗證者從葉節點重新計算到根,只有結果與可信根相符時才接受包含關係,因此不需要其他葉節點或完整資料集。

這種承諾針對的是資料表示,而不是真實性。根相符並不能說明來源資料準確、資料仍可用,或合約、橋接器、預言機和市場安全。驗證者必須透過經認證的協定取得根和葉節點,並理解域分離、排序及奇數葉處理規則。

默克爾樹存在於多種設計中。比特幣把區塊交易的默克爾根放入每個區塊標頭;以太坊則用修改版默克爾-帕特里夏樹表示狀態及其他可驗證結構。它們共享構造思想,但編碼、證明格式、更新規則和安全假設不同,證明不能互換。

工作原理

系統先定義確定性的葉節點編碼和雜湊函數,接著雜湊每片葉節點,把成對子節點雜湊成父節點,重複直到只剩一個根。當驗證者無法從協定推斷位置時,證明還必須包含葉節點位置或方向資訊。

對平衡二元樹而言,1024 片葉節點中的一片約需 10 個兄弟雜湊,因為每層覆蓋範圍都會加倍。實際大小還取決於樹形、雜湊長度、重複葉節點策略,以及是否使用多重證明或壓縮格式。

核心關係可以寫成 parent = Hash(left || right)root = fold(parent, leaves)。這只是示意:協定可能為葉節點和內部節點加前綴、使用不同分支數,或在字典樹中編碼鍵。證明說明資料符合指定構造,但不能讓一個未經獨立信任的根獲得認證。

在區塊鏈中,根由區塊標頭、狀態記錄或合約承諾。輕用戶端或應用程式可以請求葉節點及其認證路徑,重新計算根,再套用協定的確認、最終性、新鮮度和可用性規則。雜湊驗證不能取代這些規則。

範例

假設一個區塊包含 1024 筆交易,並使用二元交易樹。一筆交易可以附帶約 10 個兄弟雜湊,而不是傳輸其餘 1023 筆交易。驗證者仍需要相關區塊標頭,以及交易編碼和定位規則。

如果證明失敗,應先檢查葉節點位元組、位元組序、樹填充、根的來源和區塊狀態,再判斷交易不存在。針對未最終確定或過時根的有效證明,在技術上可能正確,卻不再代表規範鏈狀態。

對於顯示餘額或獎勵的應用程式,應把證明有效性與經濟結果分開。顯示金額仍可能受手續費、價格變化、滑價、合約權限、提現限額或資料來源不可用影響。默克爾證明驗證的是承諾中的成員關係,不保證可贖回金額。

風險

主要技術風險包括編碼含義不明確、誤用雜湊函數、二次原像或碰撞弱點、兄弟節點順序錯誤,以及接受來自不可信或過時來源的根。葉節點與內部節點之間的域分離有助於避免結構歧義,但必須一致實作。

執行風險位於雜湊計算之外。橋接器、預言機、排序器、交易所或合約管理員可能發布、延遲、審查或替換根;資料可用性故障可能阻止使用者取得葉節點或證明;鏈重組也可能使繫結在舊區塊上的證明失效。

依賴證明前,應確認誰認證根、如何檢查新鮮度和最終性、如何處理缺失或奇數葉節點,以及使用者能否獨立恢復資料。當錯誤根、簽署者被攻破、資料不可用或協定升級造成的損失無法界定時,應限制授權和曝險金額。

常見誤解

誤解 1:根相符就證明資料真實

它只證明所給葉節點在指定構造下與承諾根一致。如果預言機或營運者提交了錯誤值,證明仍會忠實驗證這個錯誤值。

誤解 2:默克爾證明讓整個系統無需信任

驗證者仍需信任雜湊函數、編碼規則、根的認證路徑以及提供資料的系統。共識、最終性、可用性和治理仍是獨立的安全問題。

誤解 3:每條區塊鏈都使用同一種默克爾樹

比特幣交易樹、以太坊修改版默克爾-帕特里夏樹和應用專用樹在布局及證明規則上不同。不能假設一個協定的證明格式適用於另一個協定。

誤解 4:證明很短就保證交易便宜且安全

證明大小能減少資料傳輸,但驗證 gas、儲存讀取、網路擁塞、合約漏洞以及提現或清算風險仍可能主導結果。

相關主題

來源

導覽

搜尋知識庫...