Blockchain

你怎麼知道 Block、Merket Root 和路徑中的雜湊值是真實的?

  • January 13, 2017

我在 Merkle Root 上完成了這個 Q & A 什麼是 Merkle 根?

以及 Merkle Root 和 Merkle Tree 上的其他幾個。我了解什麼是 Merkle 樹以及如何在根路徑中使用交易雜湊和其他雜湊來驗證它是否一致。

但是,您從本質上不信任的節點獲得 Merkle Root 和所有其他路徑節點,對嗎?那麼這個驗證有什麼意義呢?整個塊本身或 Merkle Root 或路徑雜湊可能是假的。這種驗證有意義的唯一方法是,如果您已經有一個您信任的後續塊並且之前的雜湊從該塊指向這個 Merkle Root。但是,這對我來說沒有意義 - 首先你將如何信任該塊?

我錯過了什麼?

忘掉默克爾樹吧。假設相反,塊頭將只包含所有交易連接的雜湊。

然後,輕量級節點可以下載所有標頭,驗證它們的工作證明,並假設它已經看到了最長的鏈。現在確信它已經看到了網路接受的鏈。這與全節點不同,全節點在查看所有塊數據並驗證每筆交易之前不假定鏈被接受。

現在輕量級客戶端決定向對等方詢問實際的塊數據。當它接收到一個區塊的交易時,它知道它們實際上與區塊頭送出的內容相匹配,因為它可以重新計算雜湊,並將其與區塊頭中的值進行比較。

但是如果輕量級節點對所有交易都不感興趣怎麼辦?BIP37 引入了 Bloom 過濾塊的概念,其中輕量級節點可以顯示它感興趣的密鑰/交易/地址,並且它正在下載的完整節點只會給出與過濾器匹配的交易。

不幸的是,如果輕量級節點沒有下載所有交易,則無法知道它們是否與標頭中的雜湊匹配,因此,完整節點可能會撒謊,並包含鏈中實際不存在的交易。

進入默克爾樹。

我們不僅儲存雜湊,還儲存 Merkle 樹的根。現在,對於每個匹配的交易,全節點可以包含與交易的雜湊相結合的雜湊值,以證明交易實際上包含在樹中,儘管輕量級節點只知道根。

你只需要信任創世塊。從那裡開始,您已下載所有其他塊並驗證它們。這(除其他外)包括檢查完成的工作證明是否滿足共識規則的要求。

但是,您從本質上不信任的節點獲得 Merkle Root 和所有其他路徑節點,對嗎?那麼這個驗證有什麼意義呢?整個塊本身或 Merkle Root 或路徑雜湊可能是假的。

一個塊包含交易。您檢查所有這些交易,從它們建構 Merkle 樹,並檢查您的 Merkle 根是否與您收到的塊頭中的相同。

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