Bitcoinj

SPV 布隆過濾器構造,是從區塊鏈中獲取的誤報,或者只是由於與其他地址匹配

  • October 27, 2016

據我了解,SPV 布隆過濾器生成的誤報地址不一定要在區塊鏈上(即是已經使用過的地址)。這是對 SPV 布隆過濾器的正確思考方式嗎?

布隆過濾器是機率性的,您使用它進行的每次嘗試匹配都有特定的機會成為誤報。誤報率取決於過濾器的結構(過濾器的寬度以及添加了多少元素)。一個事務要麼可能匹配,要麼肯定不匹配給定的布隆過濾器。

BIP37在過濾器匹配系統中不包括比特幣地址,相反,對於塊中的每個交易,給定的過濾器都與 TXID、每個輸出腳本、每個輸入腳本和輸入腳本中的每個數據元素匹配。如果任何元素匹配事務被發送到客戶端,是否誤報由客戶端決定。

據我了解,SPV 布隆過濾器生成的誤報地址不一定要在區塊鏈上(即是已經使用過的地址)。

BIP37 SPV 過濾只會返回來自塊的交易(包括到塊頭的默克爾樹路徑),或者來自其記憶體池的與給定過濾器匹配的交易。誤報不是憑空產生的,它們只是碰巧是符合客戶給定標準的其他交易。

最初的意圖是客戶將調整誤報交易的水平,以掩蓋他們正在與之交談的同行的真實意圖,但實際上這似乎完全無效

誤報地址……不一定要在區塊鏈上

您可以將布隆過濾器匹配視為一個函式。

def matches(tx, filter):
   ...

您可以使用給定的過濾器創建一個為此函式返回 true 的事務,這也不意味著對該事務返回 true,因此誤報可能存在於區塊鏈數據之外。但在實踐中,誤報幾乎總是來自區塊鏈/p2p 網路。

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