BIP-98 快速默克尔树:给轻客户端的证明能不能再瘦一点 图 1
BIP-98 快速默克尔树:给轻客户端的证明能不能再瘦一点 · 图 1

先把常规证明的账算清楚

简化支付验证不下载完整区块,靠的是一条默克尔包含证明:交易哈希作为叶子,与兄弟哈希逐层拼接上算,一路算到区块头里写死的默克尔根。证明体积与树高成正比——一个装两千笔交易的区块,一笔交易的证明大约要带十一个三十二字节哈希、做十一次双 SHA-256。对全节点无所谓,对靠流量与电量的轻客户端,这是每次收款都要重复支付的税。

压缩从哪里来

BIP-98 的出发点是默克尔树里存在可推断的结构:当一棵子树的全部叶子都是”空”时,这棵子树的根哈希可以由约定值自己算出来,不必传输。规范因此定义零哈希约定:由约定的空值出发的子树哈希无需携带;同时给出跳过规则——证明经过某父节点时,若其某个子树整体为空,证明可以省掉那一支,验证端按规则复原。对交易数小于满二叉树容量的典型区块,省下的正是补齐用的空支。规范并给出快速默克尔根算法,让按跳过结构算根的过程标准化。

边界与实现的坑

跳过规则让证明的字节数依赖区块内交易数量的分布,实现必须严格处理边界:恰好满树、单交易区块、空子树出现在不同深度。这类”条件省略”是共识编码提案的经典风险面——两套实现对边界的理解差一点,就会出现某类区块上验证结果不一致的共识分裂。提案因此被放在软分叉层:新旧规则兼容地激活,而不只是钱包客户端的私有优化。

部署现实

规范状态为草案:提出后没有进入主网激活流程,实现采用极少。比特币主网轻客户端生态的主流路线是 BIP-157/158 的紧凑区块过滤器加 BIP-152 紧凑区块中继,而不是更小的默克尔证明。把它读成”省带宽的理论方案”是准确的;读成”钱包普遍启用的优化”则不符合事实。评估任何 SPV 优化时先看激活状态,再看钱包与节点的实际支持面,最后看你的对手方会不会给你这种证明。

快速问答

问:它会降低 SPV 安全性吗? 答:规范论证过压缩不改变可验证性——能复原出正确根节点的证明,与完整证明面对同等难度的伪造。风险主要在实现错误,不在模型。

问:和 UTXO 累加器的包含证明什么关系? 答:那类方案证明的是”集合项存在/不存在”,BIP-98 优化的是”区块内某交易存在”的证明传输,两者面向的数据结构不同。

问:今天的钱包为什么不用? 答:主流轻钱包把过滤与索引外包给服务器或索引器,默克尔证明不是它们的热路径,省不省这一半哈希没有实际体感。

一段历史坐标

这类更省证明的提案在 2017 年前后集中出现,背景是当年分段连接路线失败后,社区重新审视轻客户端的数据成本;同年代还有把默克尔根直接写进区块头字段的激进方案。它们共同的教训是:轻客户端优化的瓶颈往往在工程生态——谁实现、谁给钱包用、谁维护测试——而不是数学本身。读优化提案时,比公式更重要的三个问题是:谁部署、怎么测试、激活失败时谁回收设计空间。

换个角度:省的是什么

把省下的字节放回场景里:卫星或窄链接入的节点、按流量计费的嵌入式设备、以及需要连续扫描大量区块的取证工具,每类都吃同一条默克尔路径税。税的量级不大,但重复次数等于请求次数,于是优化从”锦上添花”变成”决定可行性”。这也是为什么这类提案的评审意见里常见一句:先证明真实部署里有这个瓶颈,再谈协议改动。数据没有到、钱包没需求、激活成本却要走一轮软分叉,天平自然不动。

风险提示:本文仅作技术科普,不构成任何投资建议。