Blockchain

為什麼每個區塊都儲存一個 Merkle 根?

  • September 10, 2019

我了解如何計算 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 節點假設礦工驗證區塊)。

引用自:https://bitcoin.stackexchange.com/questions/48928