轻钱包怎么抓一个超大区块:BIP-180 的区块大小欺诈证明 图 1
轻钱包怎么抓一个超大区块:BIP-180 的区块大小欺诈证明 · 图 1

SPV 信任模型里有一句常被略过的话:轻客户端信任的是“最多算力的链”,而不是每条规则都被诚实执行。区块大小上限就是规则里最容易被悄悄违反又最难被发现的一条——轻客户端只拿得到区块头,从头上根本看不出真实区块是四十兆还是四十亿兆。2017 年 3 月,Luke Dashjr 提交 BIP-180,想把“这个区块太大了”变成任何人都能提交、任何节点都能秒验的一张收据。2017 年 3 月 17 日立项,最终状态 Closed。

它的思路先讲直觉。轻客户端从诚实节点拿到区块头的默克尔根,然后收到一个声称“这是全部”的交易默克尔证明集。如果打包者做坏事,把大量交易藏在承诺里不发,轻客户端自己发现不了。欺诈证明的玩法是换一个人举证:完整节点或者任何凑齐了交易数据的人,把默克尔树的暴露面拼出来——每个分支要么给链接哈希,要么在叶子处补一份“这笔交易实际有多大”的体积证明。所有分量加起来给区块大小一个下界,下界越过上限,欺诈成立。

叶子处的体积证明是最见巧思的地方。证明一笔交易有十万字节,最笨的办法是把交易原文连哈希过程一起交出来,那等于重发一遍区块。BIP-180 利用 SHA-256 的分块结构:交易体积按每块 64 字节计,哈希过程中除了最后不足一块的尾巴,前面的部分全部塌缩成一个 256 比特的中间态。于是证明的形态变成“中间态加总长加最后一小段原始尾巴”,验证者把尾巴继续喂进中间态、跑完填充逻辑,得到的哈希与默克尔树叶子一致,体积就被钉死了。整份证明的体积与交易真实大小近似无关。

按规范,一份证明先写一个 varint,内容是区块内交易数取对数向下取整加一,它决定后续分支结构的层数;随后是两组尺寸分量,分别给“剥除见证数据后的体积”和“完整体积”构造下界,分量要么是默克尔链接加所在层数,要么就是刚才那种交易体积证明。轻客户端验完哈希结构、把所有分量加总,与协议上限一比即可裁决。

值得停下来辨析的一点是:欺诈证明这个词今天主要活在 Optimistic Rollup 语境里,指的是“重放一段计算、指出结果不对”。BIP-180 是同词不同活——它证明的是数据体积,一次哈希就能验完,没有争议期、没有互动游戏、也不需要链上裁决合约。两者的共同祖先只是一个朴素观念:把“你没证据”倒转成“你有证据且我能秒验”。

它为什么停在 Closed?提案文本没有写失败原因,可以确认的是背景:它诞生在 2017 年扩容路线之争最激烈的节点,面向的是当时区块接近体积上限的紧张局势;此后隔离见证给交易体积重新记账、市场共识转向链下扩容,专门给“体积欺诈”修一条 P2P 通道的动力就消散了。把这段写成“被某某事件否决”都是编造,诚实的说法是需求消退加路线转向。

误区清单。一,以为 SPV 轻客户端现在就能主动验证区块大小——不能,BIP-180 从未部署,今天没有任何主流节点软件收发这种证明。二,把它与紧凑区块、带宽欺诈证混为同一条 BIP——BIP-180 只谈体积。三,以为 SHA2 中间态是比特币独有暗器——它是 SHA-256 规范的公开性质,任何哈希库都提供。

快速问答。问:对今天的普通用户意味着什么?答:没有直接操作含义,它解释的是“全节点验证为什么不可替代”。问:Rollup 的欺诈证明能替代它吗?答:领域不同,前者验计算后者验体积。问:如果区块上限再次吃紧,这条路线会复活吗?答:技术上仍完整可用,政治上取决于那时的社区共识。

风险提示:本文讨论历史提案机制,不构成投资建议;评估任何轻钱包的安全边界时,请以项目方当前文档为准,不要依据旧提案推断现实实现。