Blockchain

如何創建 SPV 客戶端?

  • April 1, 2014

SPV 客戶端為了同步而採取的步驟是什麼?

  • 連接到對等點
  • 為錢包地址設置布隆過濾器
  • 下載自最新檢查點以來的所有塊頭
  • 設置過濾器再次請求每個塊
  • 根據返回的區塊更新錢包餘額

顯然上述步驟是錯誤的,因為首先下載所有區塊頭以確定正確的鏈,然後重新請求所有區塊以計算錢包餘額是沒有意義的。

但正確的程序是什麼?

這就是我所做的:

  1. 連接到對等體
  2. 設置布隆過濾器
  3. 發送“getblocks”消息
  4. 為任何新塊發送帶有 MSG_FILTERED_BLOCK 設置的“getdata”消息

請注意,“getblocks”從指定的起點返回區塊鏈雜湊列表,而不是區塊本身。然後“getdata”返回“merkleblock”消息而不是完整塊。對等點跟隨“merkleblock”消息,將任何與布隆過濾器匹配的事務作為單獨的“tx”消息。

更多細節在BIP0037

如果你想要一個例子,我的 Java 錢包可以在GitHub上找到

幾個例子可以幫助你:

<https://code.google.com/p/bitcoinj/>

我的項目<https://github.com/richardkiss/pycoinnet>不完整(特別是在撰寫本文時,沒有布隆過濾器實現),但它最終可能會滿足您的需求。

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