布隆过滤器 - Bloom filters
还涵盖交易布隆过滤(Transaction bloom filtering)和 BIP37
交易布隆过滤是一种方法,允许轻量级客户端仅接收影响其钱包的交易数据,从全节点中接收到的交易数量仅限于与其钱包有关的交易(加上可配置数量的额外交易,以产生对客户端所属交易的合理否认)。
布隆过滤器提供了创建一个紧凑过滤器的能力,该过滤器保证匹配指定字符串,并且对其他字符串的误报率可配置。轻量级客户端可以为其所有钱包地址创建一个布隆过滤器,通过 BIP37 中定义的 P2P 协议消息将该过滤器发送到节点,然后从节点请求特殊形式的区块(默克尔区块)。
默克尔区块,也在 BIP37 中定义,将仅包含与先前发送的过滤器匹配的交易,加上区块头和将每个匹配交易连接到区块头中的默克尔根的部分默克尔分支。
如果交易与过滤器匹配,客户端还将接收节点正在中继的新未确认交易的通告。
当 BIP37 受欢迎时,大多数使用它的轻量级客户端在移动设备上运行,具有有限的带宽,因此选择了低误报率以最小化它们的带宽使用。这意味着他们基本上向他们联系的任何节点提供了他们的地址列表。预计注重隐私的用户可以通过设置更高的误报率来减轻这种隐私损失,但研究表明,为了提供合理的否认,这个率需要相当高。
作为附加问题,为 BIP37 过滤器服务的节点必须为每个客户端单独进行过滤,且可能以一种要求节点对每个区块执行大量 CPU 处理的方式创建过滤器。这导致了一系列已知的针对节点的拒绝服务攻击向量。
尽管在实践中 BIP37 允许客户端使用相当少的带宽,但它比基于大型交易数据库的其他远程交易扫描方法更慢且使用更多带宽。今天许多受欢迎的轻量级客户端查询这些数据库,而不是使用交易布隆过滤器。
注意:本主题仅指 BIP37 交易布隆过滤器。在比特币中还有通用布隆过滤器的使用(例如在比特币核心的交易中继跟踪中),它们不被归入本主题索引。
主要代码和文档
Optech 新闻简报及网站提及
2023
2021
2020
2019
参见
Last updated