BIP157紧凑过滤器如何工作? 图 1
BIP157紧凑过滤器如何工作? · 图 1

轻钱包要发现与自己地址有关的交易,可以把地址逐个发给服务器,也可以把每个区块的紧凑过滤器下载到本地再匹配。BIP157负责“怎样请求和验证过滤器序列”,BIP158负责“过滤器里放什么、怎样压缩”。两份规范合起来才是一条完整链路。

先验证过滤器头链

服务节点提供过滤器、过滤器头和检查点。每个过滤器头把当前过滤器哈希与前一个头链接,轻客户端可从多个节点比较检查点,降低单一服务端替换历史过滤器的风险。头链一致并不代表区块内容已下载,仍要在命中后取完整区块。

本地匹配为何改善隐私

钱包不需要告诉节点自己关心的每个地址,而是接收统一过滤器并在本机查询脚本集合。过滤器不会漏掉按规范加入的元素,却允许一定概率误报。误报只会多下载区块,不会让真实相关交易被过滤器悄悄省略。

过滤器只负责发现候选

  1. BIP157定义轻客户端获取过滤器、过滤器头和检查点的P2P消息,以便验证过滤器序列。
  2. BIP158定义基本过滤器的元素集合和Golomb-coded set编码,客户端在本地测试自己的脚本是否可能匹配。
  3. 过滤器设计避免漏掉被纳入集合的相关元素,但允许误报;匹配后客户端仍需下载完整区块确认。
数据用途能否证明交易存在
filter本地测试脚本是否可能命中不能,允许误报
filter header串联并验证过滤器顺序证明承诺链一致性
block读取真实交易和见证可以最终确认

网络行为仍可能暴露钱包

若钱包命中后立刻只向同一个节点请求某几个区块,节点仍能从请求时机推测兴趣。地址复用、少量节点连接、固定IP和首次同步模式也会留下特征。更好的实现会并行连接、批量或延迟请求,并避免把过滤器隐私宣传成匿名。

轻钱包同步时要记录什么

  1. 核对服务节点支持BIP157
  2. 从多个节点比较检查点或头链
  3. 本地保存脚本集合并处理误报
  4. 命中后下载完整区块验证交易
  5. 评估IP、时序和地址复用泄露

本地匹配仍会泄露网络特征

紧凑过滤器不是Bloom filter的简单改名,也不是区块合法性证明。它解决的是发现候选区块的带宽与查询隐私问题;区块头验证、交易确认、脚本执行和双花判断仍由轻客户端的其他组件承担。

确认UTXO与交易关系可先看比特币UTXO模型;时间相关过滤结果应结合Median Time Past理解,未确认交易费用问题可用RBF和CPFP处理。