141 / 691NEUTRINO

Compact Block Filters

BIP 157 与 BIP 158 规定的紧凑区块过滤器

Compact Block Filters 让轻钱包用小型确定性过滤器在本地寻找相关区块。BIP 157 规定传输和验证,BIP 158 定义内容与编码。

Compact Block Filters 是面向轻客户端的概率性区块索引。钱包下载过滤器并在本地测试自己的脚本,而非像 BIP 37 那样向服务器发送个人地址过滤器。审阅时 BIP 157 和 BIP 158 均为 Deployed,但不能替代完整的共识验证。

BIP 157 定义 getcfilters/cfilter、getcfheaders/cfheaders 和 getcfcheckpt/cfcheckpt 消息。BIP 158 规定 0x00 类型的 basic 过滤器。客户端先同步区块头,再同步过滤器头和过滤器;匹配后下载区块并查找实际交易。这不同于 BIP 152 用于快速转发区块的 Compact Blocks。 [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

过滤器包含新输出的 scriptPubKey,但排除以 OP_RETURN 开头的脚本;还包含输入花费的先前输出脚本,但排除 coinbase 输入。空项被省略,元素组成集合。它不索引所有 txid、地址字符串或 witness 数据;构建时还需要被花费的先前输出。 [BIP 158 — Compact Block Filters for Light Clients]

SipHash-2-4 的值映射到 N × M 范围、排序,再用 Golomb-Rice 编码相邻差值。Basic 使用 P=19、M=784931;密钥取区块哈希 little-endian 表示的前 16 字节。序列化以 CompactSize 编码的 N 开头。非成员查询可能以约 1/M 的概率误匹配;正确过滤器不会漏掉已包含元素。 [BIP 158 — Compact Block Filters for Light Clients]

过滤器哈希是其序列化结果的 double-SHA256。过滤器头是该哈希与前一个过滤器头拼接后的 double-SHA256。这形成可验证链接,但承诺并未写入共识区块头。因此,仅靠哈希无法识别所有连接节点提供的自洽伪造链。 [BIP 157 — Client Side Block Filtering]

若没有安全连接的可信节点,BIP 157 建议连接多个独立节点。发生分歧时,客户端定位首个差异,用区块及必要的先前输出数据核验过滤器。正确过滤器的保证依赖至少一个诚实节点。重组后,过滤器必须跟随新分支,并重新计算相关钱包状态。 [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

本地匹配不会向节点透露监控脚本列表。但之后的完整区块请求仍暴露兴趣,可与 IP 地址或重复查询关联。BIP 157 建议在出站节点中随机选择区块来源;提供区块的节点无需提供过滤器。这不保证匿名。 [BIP 157 — Client Side Block Filtering]

过滤器对应已确认区块,而非当前 Mempool。匹配不证明收到支付或拥有花费权限;必须依靠交易与必要验证。节点可在裁剪区块后保留过滤器,但可能无法再提供旧完整区块。轻客户端的资源节省不能替代 Full Node 安全模型。 [BIP 157 — Client Side Block Filtering]

Bitcoin Core 29.0 中,-blockfilterindex 建立索引;-peerblockfilters 启用对等服务并要求 basic 索引。NODE_COMPACT_FILTERS 表示该服务。getblockfilter RPC 返回指定区块的 filter 和 header。仅有 RPC 或索引不代表已通过 P2P 提供过滤器;本条目不修改节点配置。 [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]

要获得更完整的理解,请将本词条与以下词条结合阅读: Neutrino, Full Node, 修剪节点, Bitcoin 隐私, 紧凑区块中继. 反向关联还来自: Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block Filtering规范DOC · 002BIP 158 — Compact Block Filters for Light Clients规范DOC · 003Bitcoin Core 29.0 — getblockfilter RPC文档DOC · 004Bitcoin Core 29.0 — Filter service configuration一手来源
来源优先 · 非投资建议