默克爾樹是什麼?Merkle Root 與包含證明

默克爾樹(Merkle Tree)是把多筆資料的摘要逐層配對、匯整到一個頂層摘要的樹狀結構;頂層摘要稱為 Merkle Root。以比特幣為例,它把區塊內的交易摘要連起來,讓人能用一條包含路徑,核對某筆交易是否對應到指定的根。

這種證明能省去取得區塊內每一筆交易的需求,但還要知道根來自哪個區塊,以及是否可信。以下用四個符號走完建樹和驗證路徑,再分清「有被包含」與「交易有效、永不改變、現實內容為真」之間的差別。


默克爾樹是什麼?從交易摘要到 Merkle Root

在比特幣的交易樹中,最底層以區塊內交易的 TxID 為基礎。TxID 是交易識別碼;這些摘要依順序兩兩配對,再計算上一層摘要,如此往上,最後得到一個 Merkle Root。Bitcoin Developer Guide 的區塊鏈說明介紹了這個結構。

默克爾樹是整套摘要結構,根則是最上面的那個摘要。比特幣會把這個根放在區塊標頭,將交易摘要結構與該標頭連結;不能把「樹」、「根」和「標頭」都當成同一件東西。

默克爾樹的根不是整包交易,也不是區塊雜湊

根可以理解為對整套摘要結構的承諾,卻不是能解壓出每筆交易原文的壓縮檔。要閱讀或檢查交易內容,仍須另外取得相關資料;只有根,不會自動還原整個區塊的交易。

Merkle Root 也不是區塊雜湊本身:前者是標頭中的欄位,後者用來辨認區塊,兩者位置與用途不同。若還不熟悉「資料變成摘要」的意思,可延伸看雜湊函數的用途與限制。


用四筆摘要走完默克爾樹

下面是比特幣默克爾樹的純符號教學。a、b、c、d 代表四筆交易的摘要,H 代表配對後的雜湊運算,「∥」表示依順序串接。這些字母不是實際 TxID,算式也不是可直接拿去執行的比特幣程式。

  • 第一層:a 在左、b 在右,得到 ab=H(a∥b)。
  • 同一層:c 在左、d 在右,得到 cd=H(c∥d)。
  • 再上一層:ab 在左、cd 在右,得到 root=H(ab∥cd)。

這樣,四個底層摘要先變成兩個,再匯整成一個根。理解默克爾樹時,先看清每一層的配對關係;ab 只是此處替「a 與 b 配對後的摘要」取的名字,不是把兩筆交易文字原樣塞到根裡。

左右順序與 Bitcoin 奇數節點規則

左右方向不能任意交換。依 Bitcoin 的 Merkle Trees 欄位參考,比特幣會把有順序的兩個摘要串接,再做雙重 SHA-256。正式實作還涉及原始位元組與內部位元序,不能用圖上的短字母直接對真實雜湊值。

如果某一層最後一個摘要沒有配對對象,比特幣會取它的副本,與自己配對後再計算。例如這層只有 a、b、c,最後的 c 會與 c 的副本配對。這是比特幣的規則示例,不是所有默克爾樹或所有區塊鏈的通則。

比特幣符號示意:a與b生成ab,c與d生成cd,再由ab與cd生成root;非真實交易雜湊

默克爾樹如何驗證一筆交易的包含路徑?

回到四筆摘要的例子,假設要驗證 c 是否包含在指定根對應的結構裡。你已經有 c,接下來需要右邊的兄弟摘要 d,以及上一層位在左邊的兄弟摘要 ab。

  • 先按 c 在左、d 在右,重算 cd=H(c∥d)。
  • 再按 ab 在左、cd 在右,重算 root=H(ab∥cd)。
  • 把重算結果與已驗證區塊標頭中的預期 Merkle Root 比對。

這條路徑不需要交付 a、b 各自的完整交易,因為驗證者可使用已提供的 ab 摘要。默克爾樹包含證明的必要材料,則包括待驗交易摘要、每層兄弟摘要、左右方向,以及可信或已驗證的預期根。少了方向,無法按相同結構重算。

少拿資料,仍要知道根屬於哪個區塊

如果某網站同時給你一個任意根與一份能對上的證明,最多只能說它們彼此相符,不能因此認定根屬於正式鏈。核對時還要知道是哪條鏈、哪個區塊,以及區塊標頭的來源和驗證條件。

因此,「取得一條證明」和「確認這個根值得信任」是兩個問題。默克爾樹能有效表達包含關係,並不會替使用者自動解決所有根來源與鏈狀態的信任問題。

先用c和右兄弟d重算cd,再用左兄弟ab和cd重算根,最後比對已驗證標頭根

默克爾樹包含證明成功,哪些事仍不能保證?

根相符,支持的是相對於該根的包含關係。比特幣白皮書第 8 節討論簡化支付驗證(SPV)及其依賴:用分支把交易連到區塊,不等於使用者已自行執行所有交易有效性檢查。

全節點還會依共識規則驗證交易與區塊;包含證明不能取代這些工作。想分清保存資料、轉送交易與驗證規則,可閱讀區塊鏈節點的不同角色。

同樣地,單憑一條默克爾樹分支,也不能保證正式鏈狀態或交易最終性,不能據此承諾永遠不會重組。還要核對標頭、鏈與相應共識條件,不能把一個成功提示當成所有風險的結論。

記錄被包含,不等於現實內容為真

把某份資料的摘要納入結構,只能核對相對該根的包含關係。由此不能直接推出原始資料在現實世界必然真實、合法,或記錄者必然持有著作權;這是從證明對象所能得出的範圍限制。

例如,一段關於某件物品的描述被納入紀錄,並不表示那件物品確實存在或描述無誤。默克爾樹也不適合單獨用來替交易所、投資或資產儲備做安全排名。

包含證明不取代全節點交易有效性驗證,不保證最終性,也不證明現實資料真實或合法

結語:先辨認根,再理解包含關係

默克爾樹的學習路線可以濃縮為:摘要按順序配對成根,再用目標摘要、兄弟路徑與方向重算,最後比對可信根。驗證成功的含意要留在包含關係的範圍內,別跳成完整交易有效性、現實真偽或最終性的保證。

本文為入門教學,非投資、法律或稅務建議;法規與市場變動快,請以官方最新公告為準。符號圖只用來理解原理,不作為付款、投資或資產真偽的判定依據。

重點整理

默克爾樹與 Merkle Root 有什麼差別?

默克爾樹是把多筆摘要逐層配對的整個結構;Merkle Root 是最上層的一個摘要。比特幣會將根放在區塊標頭,它不是整包交易原文。

驗證包含證明需要所有交易嗎?

不需要取得該區塊每一筆交易,但仍需待驗交易摘要、各層兄弟摘要、左右方向,以及可信或已驗證標頭中的預期根,才能重算比對。

包含證明成功就代表交易合法嗎?

不能這樣推論。它支持相對於某根的包含關係,不能取代完整交易有效性驗證,也不證明現實資料真偽、法律效力或交易最終性。

Bitcoin 的奇數筆交易怎麼配對?

在比特幣默克爾樹的某一層,最後摘要若未配對,會取其副本與自己配對後再雜湊。這是比特幣規則,不能直接推廣到所有鏈或所有樹型。
分享此內容: