怎麼驗一份 Merkle 證明:自己動手跑一遍

2026-09-20

怎麼驗一份 Merkle 證明:自己動手跑一遍

驗一份 Merkle 證明,就是從你自己那條記錄出發,重新算一串哈希直到公佈的根,看看你落到的是不是同一個值。它花不了一分鐘,不需要任何人配合;而它最常見的失敗原因是輸入對不上,不是有人不誠實。分清你面對的是哪一種失敗,才能把這次核驗變成資訊,而不是變成驚慌。

跑一次 Merkle 證明核驗:把你自己那條記錄做哈希,沿兄弟節點路徑向上並遵守左右方向,再把算出的根與公佈的根比對

開始之前你需要甚麼

四樣東西,而且每一樣都必須屬於同一份報告:你自己的證明檔案、那一期公佈的根、報告寫明的演算法版本,以及報告用的快照時間。

把期次混起來是最常見的那一個錯。拿某個月的證明檔案去對另一個月的根,它會失敗,而且失敗得完全正確;它除了「你用錯了配對」以外甚麼都沒告訴你。

證明檔案本身包含你的葉子數據和一小串兄弟哈希。它很小,通常幾十個值,因為從葉子到根的路徑長度增長得極慢,哪怕樹裏裝着數百萬個帳戶。背後的結構寫在儲備證明裏的 Merkle 樹裏。

各種結果分別意味着甚麼

結果 它意味着甚麼 接着做甚麼
算出的根等於公佈的根 你那一行在被承諾的集合裏 到此為止;把檔案留着
算出的根不同 有一項輸入與公佈的樹對不上 先重下再試,然後再下結論
工具拒收這個檔案 檔案損壞,或者來自另一期 檢查你下的那個檔案是哪一期
演算法版本不認識 你的驗證工具比這份披露舊 換成報告寫明的那個版本
葉子哈希與你的餘額對不上 你在哈希的是另一條記錄 確認快照時間與幣種清單
那一期沒有公佈的根 沒有可比對的東西 去問那一期甚麼時候發

第三欄要當成一個順序而不是一份菜單來讀,因為便宜的解釋應該先被排除,而它們通常就是對的那個。只有第二行有可能是嚴重的,而且即便是它,通常也是輸入問題。

核驗的四個步驟

第一步,造出你的葉子。驗證工具按規格拼出那段確切的文本,做哈希,這個哈希就是你路徑的底端。快照時間弄錯、或者幣種順序不同,都會在這一步產出一片從未在樹裏出現過的葉子。

第二步,往上走。每一層上,驗證工具把你當前的哈希與證明檔案裏的兄弟節點拼起來做哈希,得到上一層的哈希,如此重複,直到兄弟節點用完。

第三步,比對。你最後落到的那個值,要麼與公佈的根完全相同,要麼不同,沒有部分得分。第四步很容易跳過:確認你比對的那個根,是交易所真的公佈過的那個,而不是從某個非官方來源抄來的副本。

為甚麼拼接順序要緊

每一層都有一個左側和一個右側,而按錯誤的順序做哈希,得到的結果完全不同。這不是數學上的一個微妙之處;它是手寫驗證工具裏最常見的那個 bug。

所以證明檔案會為每個兄弟節點記下它屬於哪一側。你的驗證工具必須遵守這條指示,而不是自己決定;特別是它不能在哈希之前把兩個值排序——那是一條看起來合理、卻會靜默毀掉一切的捷徑。

有一個簡單辦法測你自己的工具有沒有這個 bug:拿同一份證明跑兩遍,第二遍故意把左右換過來,確認兩遍裏只有一遍能算出公佈的根。如果一次核驗失敗而輸入看起來都對,那麼在任何你自己寫過或改過的工具裏,這就是第一個該懷疑的地方。跟報告一起發佈的驗證工具本來就處理好了這件事,這也是「至少用官方那個跑一次」的一個實際理由。

核驗失敗但其實沒出問題的常見原因

快照時間是通常的元兇。你今天的餘額不是建樹那一刻的餘額,而拿今天的數字去做哈希,產出的葉子理所當然地不會出現在樹裏。

其次是格式差異。餘額寫成固定的小數位數,幣種按固定順序排列;所以一條手工拼出來的記錄,可以在數值上正確、在文本上不同,而這會讓哈希完全改變。另一個相關的陷阱是從一個為顯示而四捨五入的介面上抄餘額——四捨五入後的數字和儲存的數字,即便描述同一個金額,也是兩個不同的字串。

最後是版本漂移。一份已經換到更新演算法版本的披露,用舊工具驗不過;而一個跑在披露前頭更新過的工具,反過來有同樣的問題。對上報告寫明的那個版本,就消掉了一整類讓人困惑的失敗。

通過和失敗各自證明了甚麼

通過精確地證明了一件事:你所哈希的那條記錄,在那棵根被公佈出來的樹裏面。那是你的包含性,而且它真的屬於你,不是別人告訴你的。

它沒有證明其他所有人都被包含了、沒有證明資產存在、也沒有證明這些餘額覆蓋了你被欠的全部。Merkle 證明回答的是一個成員資格問題,對其餘一概沉默;這條邊界寫在儲備證明的局限裏。

值得刻意保持這份窄:一次精確地證明一件事的核驗,比一句含糊地指向好幾件事的宣稱更有用。而一次失敗,在那些無聊的原因都被排除之後,是一個值得提出的問題,不是一個判決。它的意思是:你相信描述了你帳戶的那條記錄,在公佈的根下面沒有出現;而同時產出這兩樣東西的那一方,正是能解釋這個差別的人。

如果它真的失敗了該怎麼辦

拿一份剛下載的證明檔案和官方的根,把核驗重跑一遍——因為過期的或者只下了一半的檔案解釋了這裏面的大多數。把兩份檔案都留着,不要覆蓋。

然後,如果上一期也拿得到,就對上一期做同樣的事。只在某一期出現的失敗,與一個持續存在的失敗,是兩種不同的情形;而你在描述它的時候,這個區別很重要。

如果它仍然失敗,去找交易所提出來,並附上期次、你比對的那個根、以及你用的驗證工具版本。這足以讓別人復現你做過的事,而可復現正是讓一份反饋變得可處理的東西。圍繞這一次核驗的更大一圈檢查,寫在如何核驗儲備證明裏。

小結

驗一份 Merkle 證明是一套很短的機械流程:造出你的葉子,沿兄弟節點路徑向上走並遵守左右方向,把結果與公佈的根比對。多數失敗來自期次、格式或版本對不上,而不是來自有甚麼東西不對。

一次通過告訴你:你自己那一行被承諾了下來——這是一個由你確立、而不是由你接受的事實。這是一個被精確陳述的小宣稱;而正是被精確陳述的小宣稱,讓這份披露的其餘部分變得可讀。想繼續讀幣貝學院的其他內容,請接着往下看。

相關閱讀

幣貝上與本主題相關的其他文章:

風險披露:本文為 Bitbase(幣貝)學院的科普內容,僅供教育與資訊參考,不構成任何投資、交易、稅務或財務建議。加密資產波動劇烈,請自行評估風險。本文撰寫於 2026 年 9 月,請以官方最新資訊為準。

參考資料

[1] 幣貝,儲備證明 —— 每月披露、Merkle 根哈希與開源驗證工具 www.bitbase.com

相關推薦

更多推薦