从多个对等方下载区块过滤器

一个对等方可以向钱包提供一个不准确的过滤器。有两种方式可以创建不准确的过滤器。对等方可以创建一个引用实际上不存在于相关区块中的交易的过滤器(假阳性)。或者,对等方可以创建一个不引用实际上出现在相关区块中的交易的过滤器(假阴性)。

对不准确过滤器的第一种防护措施是让客户端从多个对等方获取过滤器。BIP157协议允许客户端仅下载一个短短的32字节的对过滤器的承诺,以确定每个对等方是否正在广告与客户端的所有其他对等方相同的过滤器。这样,客户端只需消耗少量带宽来查询许多不同对等方的过滤器,如果所有这些对等方都同意的话。

如果两个或更多不同的对等方对同一区块有不同的过滤器,那么客户端可以下载所有这些过滤器。然后,客户端还可以下载相关的区块。如果区块包含与钱包相关的任何交易,但不包含在其中的任何一个过滤器中,那么钱包就可以确定创建该过滤器的对等方是不准确的——Golomb-Rice编码集始终会包含一个潜在匹配。

或者,如果区块不包含过滤器中可能与钱包匹配的交易,这并不能证明该过滤器是不准确的。为了最小化GCS的大小,我们允许一定数量的假阳性。钱包可以继续从对等方下载附加的过滤器,无论是随机下载还是在它们指示匹配时,然后跟踪客户端的假阳性率。如果它与过滤器设计时所使用的假阳性率明显不同,那么钱包可以停止使用该对等方。在大多数情况下,不准确的过滤器的唯一后果就是钱包使用的带宽比预期更多。

Last updated