SPV 客戶端模型是否可擴展?
SPV 客戶端通常連接到全節點對等節點,並針對他們下載的資訊設置過濾器。單個完整節點通常可以支持多少個 SPV 對等體?
期望數百萬 SPV 節點使用者連接到約 6,000 個完整節點是否合理?
一般來說,BIP37 布隆過濾 SPV 的擴展性很差,但很難說它在實際工作中到底有多差。
每個對等點都必須從他們最後一次與網路聯繫起同步整個區塊鏈,在最壞的情況下,這大約是 50GB。節點必須從磁碟載入每個塊,將其過濾到客戶端規範並返回結果。金額將增長到比特幣或時間結束,以先到者為準。如果沒有一些協議更改,修剪與 BIP37 SPV 不兼容,因為它希望所有塊在所有主機上都可用。
對於每個同步的錢包,每個傳入的塊和交易都必須單獨過濾。這涉及不可忽略的 CPU 時間量,並且必須為每個對等點依次為每個庫存項目完成。
- 目前還不清楚一個普通節點到底有多少 CPU 能力,但至少有一部分節點執行在像 Raspberry Pi 這樣的桶底硬體上,它不太可能能夠愉快地為多個節點提供服務。時間。
同樣,大部分偵聽節點都託管在預算 VPS 提供商上,這些提供商提供單個共享核心和極差的性能。OVH有 300 個,Hetzner有 300 個Digital Ocean有 124 個,CloudAtCost確實排在最後,有 6 個。
BIP37 容易受到微不足道的拒絕服務攻擊,可用的展示程式碼能夠通過過濾器的快速庫存請求來削弱節點,從而導致連續的磁碟搜尋和高 CPU 使用率。很容易說客戶可以使用工作證明(但這在像手機這樣的電池供電設備上是不可能的)或小額支付(如果節點不知道它已經收到錢,則不可能),但兩者都沒有真正提供明確的解決方案.
也可能有少於 6000 個偵聽節點,一些被修剪,這對於 SPV 客戶端同步來說相當無用,許多正在偵聽 IPv4 和 IPV6,因此在該數量上重複。實際節點的實際數量可能更多在 5000 個左右,並且不在撥號速度上行鏈路上的節點數量要低得多。
期望數百萬 SPV 節點使用者連接到約 6,000 個完整節點是否合理?
絕對不是,即使只是因為程式碼預設最多有 117 個傳入連接,這將是網路中總共大約 50 萬個可用套接字(其中大部分今天已經被消耗)。