轻钱包要发现与自己地址有关的交易,可以把地址逐个发给服务器,也可以把每个区块的紧凑过滤器下载到本地再匹配。BIP157负责“怎样请求和验证过滤器序列”,BIP158负责“过滤器里放什么、怎样压缩”。两份规范合起来才是一条完整链路。
先验证过滤器头链
服务节点提供过滤器、过滤器头和检查点。每个过滤器头把当前过滤器哈希与前一个头链接,轻客户端可从多个节点比较检查点,降低单一服务端替换历史过滤器的风险。头链一致并不代表区块内容已下载,仍要在命中后取完整区块。
本地匹配为何改善隐私
钱包不需要告诉节点自己关心的每个地址,而是接收统一过滤器并在本机查询脚本集合。过滤器不会漏掉按规范加入的元素,却允许一定概率误报。误报只会多下载区块,不会让真实相关交易被过滤器悄悄省略。
过滤器只负责发现候选
- BIP157定义轻客户端获取过滤器、过滤器头和检查点的P2P消息,以便验证过滤器序列。
- BIP158定义基本过滤器的元素集合和Golomb-coded set编码,客户端在本地测试自己的脚本是否可能匹配。
- 过滤器设计避免漏掉被纳入集合的相关元素,但允许误报;匹配后客户端仍需下载完整区块确认。
| 数据 | 用途 | 能否证明交易存在 |
|---|---|---|
| filter | 本地测试脚本是否可能命中 | 不能,允许误报 |
| filter header | 串联并验证过滤器顺序 | 证明承诺链一致性 |
| block | 读取真实交易和见证 | 可以最终确认 |
网络行为仍可能暴露钱包
若钱包命中后立刻只向同一个节点请求某几个区块,节点仍能从请求时机推测兴趣。地址复用、少量节点连接、固定IP和首次同步模式也会留下特征。更好的实现会并行连接、批量或延迟请求,并避免把过滤器隐私宣传成匿名。
轻钱包同步时要记录什么
- 核对服务节点支持BIP157
- 从多个节点比较检查点或头链
- 本地保存脚本集合并处理误报
- 命中后下载完整区块验证交易
- 评估IP、时序和地址复用泄露
本地匹配仍会泄露网络特征
紧凑过滤器不是Bloom filter的简单改名,也不是区块合法性证明。它解决的是发现候选区块的带宽与查询隐私问题;区块头验证、交易确认、脚本执行和双花判断仍由轻客户端的其他组件承担。
确认UTXO与交易关系可先看比特币UTXO模型;时间相关过滤结果应结合Median Time Past理解,未确认交易费用问题可用RBF和CPFP处理。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。