為什麼每個區塊都儲存一個 Merkle 根?
我了解如何計算 Merkle 根並將其儲存在塊中。但是礦工如何使用 Merkle 根來驗證交易呢?
以下是驗證交易的 18 個條件。他們都沒有使用 Merkle 根。
Merkle 根不驗證交易,它們驗證一組交易。交易 ID 是交易的雜湊值,Merkle 樹是由這些雜湊值構成的。這意味著如果任何交易中的單個細節發生變化,Merkle 根也會發生變化。這也意味著,如果完全相同的交易以不同的順序列出,Merkle 根也會發生變化。
因此,Merkle 根是區塊中哪些交易以及它們的順序的加密證明。它提供了一條方便的資訊,可以包含在區塊頭中,然後將其散列並包含在下一個區塊頭中。如果區塊頭中沒有 Merkle 根,我們將無法證明區塊中包含哪些交易,也無法證明其內容未被篡改。
使用 Merkle 樹優於散列鍊或級聯交易的散列,因為它允許更快、更簡單地測試特定交易是否包含在集合中。有關更多詳細資訊,請參閱開發人員指南中有關 Merkle 樹的部分。
Merkle 根儲存在比特幣區塊頭中,以便為區塊中的交易啟用有效的成員資格證明,這對於僅儲存塊頭而不儲存塊內容的簡單驗證支付驗證 (SPV) 節點是必需的。
說*“如果沒有區塊頭中的 Merkle 根,我們就沒有加密證明哪些交易包含在一個區塊中,也沒有證據證明它們的內容沒有被篡改”,這是一種誤導。*
例如,我們總是可以將雜湊鏈交易放在一起並將雜湊鏈根儲存在塊頭中。(或者,我們可以將所有 TXID 連接在一起並將該雜湊儲存在標頭中。)
然而,這不會那麼有效:關於雜湊鏈的成員資格證明是
O(n)
當鏈中存在n
交易時,而不是來自O(\log{n})
Merkle 樹的證明。**很久以後的編輯:**我想沒有人真正回答你的問題:“但是礦工如何使用 Merkle 根驗證交易?” .
據我了解您的問題,答案是*他們不使用 Merkle 樹。*礦工,就像 P2P 網路上的完整節點一樣,從其他完整節點接收新交易,並通過檢查他們的數字簽名和他們花費有效硬幣來驗證它們(幾乎如您的連結中所述)。此時不涉及 Merkle 樹。稍後,礦工獲取所有經過驗證的交易並在它們之上創建一個 Merkle 樹。隨著越來越多的交易來到礦工,礦工會驗證它們並將它們添加到 Merkle 樹中。
為什麼礦工會在 Merkle 樹中添加東西?同樣,如上所述,我們擁有 Merkle 樹的唯一原因是 SPV 節點可以有效地驗證礦工是否驗證了區塊中的交易。
有一種情況可能會被描述為*“礦工使用 Merkle 根驗證交易”,儘管我不會使用這種措辭:當礦工聽到一個新區塊時,它會想要驗證它的有效性(回想一下,礦工不會想要擴展一個無效的鏈)。作為驗證的一部分,礦工需要確保在 TXID 上正確計算 Merkle 樹。但是,這並不意味著交易已經過驗證:礦工仍然需要單獨驗證交易,如您的連結中所述。這種驗證的一個結果是SPV 的免費安全性*:當 SPV 節點看到交易的 Merkle 成員資格證明時,他們可以假設它是有效的(因為 SPV 節點假設礦工驗證區塊)。