Blockchain
如何創建 SPV 客戶端?
SPV 客戶端為了同步而採取的步驟是什麼?
- 連接到對等點
- 為錢包地址設置布隆過濾器
- 下載自最新檢查點以來的所有塊頭
- 設置過濾器再次請求每個塊
- 根據返回的區塊更新錢包餘額
顯然上述步驟是錯誤的,因為首先下載所有區塊頭以確定正確的鏈,然後重新請求所有區塊以計算錢包餘額是沒有意義的。
但正確的程序是什麼?
這就是我所做的:
- 連接到對等體
- 設置布隆過濾器
- 發送“getblocks”消息
- 為任何新塊發送帶有 MSG_FILTERED_BLOCK 設置的“getdata”消息
請注意,“getblocks”從指定的起點返回區塊鏈雜湊列表,而不是區塊本身。然後“getdata”返回“merkleblock”消息而不是完整塊。對等點跟隨“merkleblock”消息,將任何與布隆過濾器匹配的事務作為單獨的“tx”消息。
更多細節在BIP0037
如果你想要一個例子,我的 Java 錢包可以在GitHub上找到
幾個例子可以幫助你:
<https://code.google.com/p/bitcoinj/>
我的項目<https://github.com/richardkiss/pycoinnet>不完整(特別是在撰寫本文時,沒有布隆過濾器實現),但它最終可能會滿足您的需求。