Synchronization

為什麼節點不直接從網路上下載塊而不是向其他節點發送各種消息?

  • April 30, 2022

我對更新節點不完整區塊鏈的理解是:

具有不完整區塊鏈的節點(假設它已離線一段時間)將發送getblocks消息,然後將收到來自最新機器的最新 500 個塊的inv響應。

我不明白的是,當您最初設置一個全節點時,它是從網路下載塊並從創世塊開始依次添加它們(編碼到全節點的客戶端軟體中)。那麼為什麼它不能從網路上下載最新的塊而不是發送很多消息。<– 或者這種理解是完全錯誤的——也就是說,新的全節點沒有從網路下載塊。

一個完整的節點需要處理所有的塊,以便確定哪些“硬幣”(UTXO)存在,而不必信任任何人

getblocks 和 inv 消息是執行此操作的有效方法。

這裡似乎有兩個問題。

  • **為什麼節點需要下載所有歷史區塊?**完全驗證節點必須了解所有先前交易產生的分類帳的完整狀態(“誰擁有什麼/目前擁有多少”),然後才能驗證新交易。了解這一點的唯一方法是,不相信任何其他第三方只是告訴他們,並確信結果是正確的,實際上是回顧整個歷史,並查看他們被告知的每筆交易都已簽出。
  • **為什麼塊下載機制涉及這麼多來回消息?**這就是下載協議的工作方式。一些複雜性是由於允許從多個對等點同時並行下載塊,而另一些複雜性是由於試圖防止惡意對等點發送塊,這些點後來被證明不在最佳鏈中,因此構成浪費努力。為了解決這個問題,節點將首先下載並驗證區塊頭(這既快速又便宜),然後沿著這些經過驗證的頭獲取區塊。

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