Spv
比特幣完整客戶每次收到布隆過濾器時都會檢查所有區塊鏈?
我假設像 bitcoinJ 這樣的 spv 客戶在一周前請求了與該客戶相關的交易,並且該客戶已經離線一周。當 spv 客戶端上線時,它是否只是請求在離線時創建的新事務?
此外,從 spv 客戶端接收布隆過濾器的完整客戶端是否僅檢查新交易,或來自創世塊的所有區塊鏈?
他們不會自動這樣做。當對等點設置布隆過濾器時,節點不會做任何額外的工作,除了注意為給定對等點設置了布隆過濾器並開始匹配過濾器。它不會回到歷史中將歷史數據與過濾器匹配,然後轉發匹配的所有內容。這樣做在計算上會很昂貴,並且是一種有效地對節點進行 DoS 的方法。
設置過濾器的對等點必須要求它,而不是向節點提供歷史數據。他們通過發送
getdata
歷史塊的消息來做到這一點,全節點將提取這些塊,將它們與過濾器匹配,然後發送merkleblock
消息。這樣更容易避免被 DoS 攻擊,並且接收對等方可以指定完整節點應該在哪裡啟動和停止,以便它可以盡快獲取所需的數據。