Monero Bulletproofs+ 与 Bulletproofs 对比:2026 年深度解读
Monero Bulletproofs+ 与 Bulletproofs 对比:2026 年深度解读
2022 年 8 月 13 日,Monero(门罗币)的网络升级悄悄换掉了一块几乎没有用户会直接看到、却人人都在依赖的密码学组件。Bulletproofs+ 取代了最初的 Bulletproofs 范围证明,为每一笔交易再削去几百字节,同时也为全网数千个守护链上规则的全节点节省了验证时间。如果你曾经通过 MoneroSwapper 这类免 KYC 的服务转移过 XMR,那笔交易里就背着这样一份证明——它是一份数学凭据,用来证明你没有凭空"印"出新的币。
这两个名字听起来几乎一模一样,发布说明里也很少把差别讲清楚。Bulletproofs+ 到底是隐私升级?速度升级?还是一套全新的系统?一句话:它是效率升级,而不是隐私升级。本文会拆解每种证明究竟做了什么、Monero 为何分别在 2018 年 10 月和 2022 年 8 月采用它们,以及到了 2026 年,这两者之间的实际差距对一笔普通交易而言到底有多大意义。
Monero 为什么需要范围证明
Monero 通过 RingCT(环机密交易,2017 年 1 月引入)来隐藏交易金额。它不会把金额明文写出来,而是让每个输出存储一个形如 C = xG + aH 的 Pedersen 承诺,其中 a 是被隐藏的金额,x 是一个随机致盲因子,G 和 H 是两个固定的椭圆曲线生成元。这样一来,全网可以验证"输入金额等于输出金额",却完全无从知晓涉及的具体数字。
但这种保密性也带来了一个危险的漏洞。既然谁都看不见金额,那又是什么在阻止一个恶意发送方把承诺设成一个巨大的数值、让它在曲线的群阶上发生回绕——从而凭空造出 XMR 呢?这正是范围证明发挥作用的地方。
- 防通胀:范围证明能在不泄露具体数字的前提下,证明每一个被隐藏的金额都落在合法区间 [0, 264) 之内。没有负数金额,没有整数溢出,也就没有伪造出来的币。
- 零知识:证明本身不会泄露关于真实数值的任何信息。验证者只知道"这个数在范围内",永远不会知道这个数本身。
- 无需可信设置:与许多 zk-SNARK 构造不同,Bulletproofs 和 Bulletproofs+ 都不需要任何秘密仪式,也就不存在日后可能被用来伪造证明的"有毒废料"。
- 可聚合:单个证明可以一次性覆盖一笔交易的全部输出,因此证明大小随输出数量只是对数级增长,而非线性增长。
这些证明占用的每一个字节,都会永远留在区块链上,被地球上每一个节点复制保存。这就是为什么范围证明的效率绝不是一个无关紧要的脚注——它直接影响着 Monero 的手续费、同步时间和长期存储负担,而这几项又共同支撑着它的可替代性(fungibility)。
Bulletproofs:2018 年的突破
在 Bulletproofs 出现之前,Monero 用 Borromean 环签名来构造范围证明。它们能用,但对空间极其不友好:证明大小随被证明的比特数线性增长,一笔仅有两个输出的交易就能膨胀到大约 13 KB。对于一条本就背负着沉重环签名数据的隐私链来说,这是难以为继的。
Bulletproofs 由 Benedikt Bünz、Jonathan Bootle 等人于 2017 年提出,并随 2018 年 10 月的网络升级登陆 Monero 主网。效果立竿见影:一笔典型交易缩小了约 80%,从约 13 KB 降到约 2.5 KB,手续费中位数更是暴跌超过 95%。直到今天,这仍是 Monero 历史上单次幅度最大的效率提升之一。
Bulletproofs 的底层原理
Bulletproofs 内部的引擎是内积论证(inner-product argument,IPA)。证明者把金额的各个比特编码进两个向量,然后必须说服验证者:这两个向量的内积等于某个特定值。协议并不会发送完整的向量,而是分成好几轮进行,每一轮把向量长度减半。经过 log2(n) 轮之后,只剩下寥寥几个曲线点需要传输。
这种对数级的伸缩正是它的魔力所在。证明一个 64 位范围只需要几百字节的证明,而聚合多个输出也只是多加几个元素,而不是再附上一份完整的证明。为了让内积论证具备零知识性,原版 Bulletproofs 会额外附加一些致盲项,与核心论证一起发送出去。
批量验证
Bulletproofs 还允许节点把许多份证明放在一次批处理操作里一起验证,这比逐个单独检查要便宜得多。当一个全节点同步多年的历史,或者校验一个刚刚挖出、塞满了内存池交易的新区块时,这一点的价值会被极度放大。
Bulletproofs+ 与 Bulletproofs:真正的区别
Bulletproofs+ 出自 Heewon Chung、Kyoohyung Han、Chanyang Ju、Myungsun Kim 与 Jae Hong Seo 在 2020 年发表的论文。它的核心创新,是用一种加权内积论证(weighted inner-product,WIP)取代了原来的内积论证。WIP 把零知识所需的致盲直接折叠进论证本身,因此证明者不再需要像原版 Bulletproofs 那样,单独传输那些掩码项。
需要传输的元素更少,就意味着证明更小、验证也略微更省。在 Monero 的实际部署中,Bulletproofs+ 把一笔交易里范围证明的那一部分削减了大约 5%–7%,并适度加快了验证速度。这是一次渐进式的精修——远谈不上 2018 年那种 80% 的飞跃,但它是免费的节省,会在数以百万计的交易和每个节点的存储上不断累积。
关键在于:两者的隐私属性完全相同。两种证明对金额的隐藏程度一模一样;它们都依赖同样的 64 位范围和同样的 Pedersen 承诺方案。任何把 Bulletproofs+ 宣传成"更私密"的说法都是站不住脚的。隐私来自 RingCT、环签名和 CLSAG——范围证明只负责保证金额的诚实。
| 属性 | Bulletproofs(2018) | Bulletproofs+(2022) |
|---|---|---|
| Monero 激活时间 | 2018 年 10 月(v8) | 2022 年 8 月(v15) |
| 核心论证 | 内积论证 | 加权内积论证 |
| 零知识致盲 | 单独发送额外项 | 折叠进论证内部 |
| 相对前代的证明大小 | 比 Borromean 小约 80% | 比 Bulletproofs 小约 5%–7% |
| 验证速度 | 快,可批量 | 略快,可批量 |
| 可信设置 | 无 | 无 |
| 所证明的范围 | [0, 264) | [0, 264) |
| 隐私影响 | 隐藏金额 | 相同——仅效率提升 |
2022 年 8 月的升级做的不止是替换范围证明。它同时上线了 view tag(视图标签),把钱包扫描速度提升了约 40%,并把环大小(ring size)从 11 个诱饵提高到了 16 个。Bulletproofs+ 恰好抵消了更大的环所增加的额外体积,让交易即便在匿名集扩大的情况下也依然保持精简。
WIP 论证究竟省在了哪里
要理解这 5%–7% 是从哪里挤出来的,得回到原版 Bulletproofs 的结构。为了让内积论证不泄露向量内容,原版方案需要在核心论证之外,额外计算并发送几个用于致盲的承诺与标量——这些项本身并不携带"金额诚实"的信息,纯粹是为零知识性服务的额外开销。每多一项,就多出几十个字节,也多一次需要被验证者处理的群运算。
加权内积论证的巧妙之处,在于它给内积的每一项引入了一个权重因子,并借助这个结构把致盲"内生"地编织进论证流程。换句话说,原本要单独打包寄出的掩码项,现在被吸收进了那些本来就要发送的元素里。结果就是更少的曲线点、更短的证明,以及验证端更少的标量乘法。对单笔交易而言这只是几百字节级别的差异,但放到共识层面,就意味着同样的安全保证用更少的资源就能达成。
值得强调的是,这两套论证的安全性假设是一致的:都建立在离散对数难题之上,都不需要可信设置。Bulletproofs+ 并没有用安全性去交换体积——它只是把同一件事做得更紧凑了。
一笔交易里范围证明的旅程
把这些证明放回一笔 XMR 支付的完整生命周期里看,会更直观。下面的步骤追踪了单个输出从创建到确认的全过程。
- 承诺金额。你的钱包为每个输出选取一个随机致盲因子,构建 Pedersen 承诺 C = xG + aH,把数值在链上隐藏起来。
- 生成证明。钱包构造一份聚合的 Bulletproofs+ 范围证明,覆盖每一个输出,证明每笔金额都落在 [0, 264) 之内而又不暴露它。
- 广播。签名后的交易——环签名数据、密钥镜像(key image)、各项承诺以及范围证明——通过 Dandelion++ 在网络中传播,落入内存池。
- 验证。每个全节点检查范围证明(通常与其他证明一起批量处理),确认输入与输出平衡,并在转发之前校验环签名。
- 确认。矿工把交易打包进一个区块;经过十个确认之后,资金即被视为已结算、可花费。
如果单单一份范围证明没能通过验证,整笔交易就会被拒绝——不存在"部分"接受这回事。正是这种全有或全无的规则,让防通胀的保证密不透风。
这种差别在实践中意味着什么
对普通用户来说,从 Bulletproofs 切换到 Bulletproofs+ 是完全无感的。你更新了钱包,你的交易就自动开始构造更新版本的证明了。没有任何币变得不可花费,没有地址发生变化,你的隐私状况也丝毫未变。好处全都落在了网络层面。
2026 年,一笔标准的"两输入、两输出"Monero 交易大约重 1.5 KB,在普通优先级下的成本还不到一美分的零头。即便环大小已经跳到 16,这个数字仍然这么低,Bulletproofs+ 就是原因之一。把这 5%–7% 的范围证明节省,乘以每年确认的数百万笔交易,你得到的就是切实更瘦的区块、新节点更快的初始同步,以及任何在普通硬件上通过 Tor 运行 Monero 的人更轻的负担。
这种效率会直接转化为可及性。更低的手续费和更小的交易,让架设一个节点的成本更低,从而使网络保持去中心化。当你通过 MoneroSwapper 换入 XMR 并提到自己的钱包时,那笔交易里搭载的证明,与 2026 年其他每一位用户产出的,都是同一份精简的 Bulletproofs+ 对象——这维护了可替代性,因为一个 XMR 输出在密码学上与下一个无法区分。
值得一提的是,范围证明只是 Monero 隐私栈中的一层。像国家税务总局这样的税务机关、以及像中国证监会这样的监管机构,都会审视加密货币的资金流向,但范围证明不会透露关于发送方、接收方或金额的任何信息。它唯一的职责是对"供应量"保持诚实,而不是提供匿名性——匿名那部分工作,由协议的其他部分来完成。
累积效应:区块链体积与节点运营
单看一笔交易,5%–7% 听上去微不足道。但 Monero 的区块链是一份只增不减的账本:每一个曾经被写入的字节,都要由全球每一个全节点永久保存下来。把这个比例放到多年、数千万笔交易的尺度上看,节省下来的就是实打实的几个 GB 存储,以及新节点首次同步(IBD,初始区块下载)时少花掉的时间。
这一点对在受限环境中运行节点的人尤其重要。如果你在一台树莓派上、或者在内存池流量需要经过 Tor 路由的环境里跑 monerod,验证开销越低、链增长越慢,独立运行一个完整节点就越现实。而能独立验证的节点越多,就越没有人需要去信任第三方来确认自己的余额——这恰恰是 Monero 去中心化承诺的根基。
中国人民银行等机构对加密货币长期保持着审慎甚至限制性的立场,这也让"自托管"和"可独立验证"对许多用户而言不再是可选项,而是一条底线需求。Bulletproofs+ 这类效率改进,正是把这条底线维持在普通硬件触手可及范围之内的幕后功臣之一。
Monero 范围证明的演进简史
把范围证明放进 Monero 的升级时间线里,更能看清 Bulletproofs+ 的分量。Monero 大约每隔半年就进行一次计划内的网络升级(硬分叉),这种节奏在主流币里相当罕见,也正是它能够持续替换底层密码学的原因。
- 2017 年 1 月:RingCT 上线,金额从此被 Pedersen 承诺隐藏,范围证明首次成为必需品,当时由 Borromean 环签名实现。
- 2018 年 10 月:Bulletproofs 取代 Borromean,交易体积骤降约 80%,手续费随之崩塌。这是范围证明史上的分水岭。
- 2020 年 10 月:CLSAG 取代原来的 MLSAG 环签名,进一步压缩了交易体积、加快了验证——这部分动的是"是谁花钱",与范围证明并行推进。
- 2022 年 8 月:Bulletproofs+ 接棒 Bulletproofs,并同时引入 view tag 和 16 的环大小。
看清这条脉络就会明白:Monero 几乎从不"原地不动"。每一次升级都在隐私与效率这两条轴上同时往前推进一点,而范围证明只是其中一条轴。把 Bulletproofs+ 误当成隐私升级,往往恰恰是因为它和真正的隐私改动(更大的环、view tag)被打包进了同一次硬分叉里。
上线之前:Bulletproofs 的多轮安全审计
把一段未经检验的密码学直接塞进一条承载着真实价值的隐私链,是极其危险的。正因如此,Bulletproofs 在 2018 年登陆主网之前,经过了好几家独立机构的安全审计——其中包括 Kudelski Security、QuarksLab 与 OSTIF 等组织牵头的评审,重点排查实现中是否存在可能被用来伪造范围证明、进而无声增发的缺陷。
这一点之所以重要,是因为范围证明承担的是 Monero 的"防伪底线"。环签名出问题,最坏情况是某笔交易的发送方被去匿名化;而范围证明一旦被攻破,攻击者就有可能凭空造币,并且因为金额本就被隐藏,这种增发可能在很长时间内都无法被察觉。2018 年的多轮审计、以及 2022 年 Bulletproofs+ 部署前同样审慎的评审流程,正是社区对这条底线极度重视的体现。
这也从另一个角度解释了 Monero 为何不轻易拥抱需要可信设置的方案:审计可以验证一段代码的正确性,却无法证明某次秘密仪式真的销毁了它的"有毒废料"。Bulletproofs 与 Bulletproofs+ 把信任的对象,从"一群人是否诚实地办完了仪式",转移到了"数学与公开代码是否经得起反复审视"——而后者是可以被一遍又一遍检验的。
Bulletproofs+ 与其他隐私技术的横向对比
Monero 选择 Bulletproofs+ 这条路,背后是一系列权衡。把它和其他主流的金额/交易隐私方案放在一起看,更容易理解为什么。
- 对比 Zcash 的 zk-SNARK:Zcash 的屏蔽交易用 zk-SNARK 同时隐藏发送方、接收方和金额,证明极小、验证极快,但早期版本依赖一次性的可信设置仪式("加密庆典"),一旦其秘密参数泄露便可能被用于无声增发。Monero 用 Bulletproofs+ 换来的,是彻底免去这种信任假设——代价是证明稍大、验证随规模增长。
- 对比 zk-STARK:STARK 同样无需可信设置且抗量子,但证明体积通常比 Bulletproofs 大得多,对一条强调小交易、低手续费的链来说并不划算。
- 对比纯环签名方案:范围证明解决的是金额,环签名解决的是身份;二者无法相互替代。Bulletproofs+ 的意义正在于以最低的字节代价,把"金额诚实"这件事钉死。
一句话总结这套取舍:Monero 宁可让证明大一点、验证慢一点,也不愿引入任何可能被滥用来增发的秘密。Bulletproofs+ 正是在这个前提下,把无需信任的范围证明做到了当前效率天花板的附近。
字节都去哪儿了:一笔交易的体积构成
既然 Bulletproofs+ 省的是范围证明那一部分字节,不妨看看一笔典型交易的体积究竟花在了哪里。对一笔 2026 年常见的"两输入、两输出"交易来说,体积大致分布在这样几块:
- 环签名(CLSAG):通常是占比最大的一块,因为每个输入都要带上 16 个环成员的相关数据。环大小升到 16 之后,这部分的权重进一步上升。
- 范围证明(Bulletproofs+):覆盖全部输出的那一份聚合证明,得益于对数级伸缩,它在总体积里的占比远小于环签名。
- 密钥镜像、承诺与输出公钥:每个输入带一个密钥镜像用于防双花,每个输出带一个 Pedersen 承诺和一个一次性公钥。
- 杂项:交易版本、解锁时间、手续费字段、额外数据(extra)等少量开销。
从这个结构能看出 Bulletproofs+ 节省的"位置感":它优化的并不是交易里最大的那一块,但因为范围证明是每笔交易雷打不动都要携带的固定成本,哪怕只省 5%–7%,乘以全网交易量也是一笔可观的长期账。这也解释了为什么社区愿意为这种看似不起眼的改良专门推动一次硬分叉。
通往 FCMP++ 的路线图:下一步会发生什么
如果说 Bulletproofs+ 是对"金额"这一面的打磨,那么 Monero 社区接下来真正押注的,是对"发送方"这一面的彻底重写。环签名虽好,但它把你藏进去的诱饵数量是有限的——目前是 16 个。FCMP++(全链成员证明)的目标,是把每一笔花费的来源隐藏在整条区块链的所有输出之中,而不再局限于一个小小的环。
这是一次范式级的跃迁,潜在的匿名集会从 16 跳到数千万。它依赖一套全新的证明系统(基于所谓的 curve trees 等结构),与 Bulletproofs+ 这样的范围证明是相互独立、各司其职的两个组件。围绕它,社区还在推进 Seraphis 这一新的交易协议框架,以及 Jamtis 这套新的地址方案。
对范围证明而言,这意味着即便 FCMP++ 上线,Bulletproofs+ 大概率仍会原封不动地守在自己的岗位上:金额还是要被证明落在合法区间之内,这件事不会因为成员归属方式的改变而消失。理解 Bulletproofs 与 Bulletproofs+ 的区别,因此并不是一段过时的历史,而是看懂 Monero 未来每一次升级时的基础词汇。
关于 Bulletproofs+ 的常见误区
- "升级之后我的隐私更强了。"没有。隐私强度由 RingCT、环签名和 CLSAG 决定,Bulletproofs+ 一个字节都没碰它们。
- "Bulletproofs+ 是一种全新的隐私币技术。"不是。它是范围证明这一个零部件的迭代,作用范围仅限于"证明金额合法"。
- "我需要手动迁移旧币。"不需要。证明在每次发送时即时生成,旧币照常可花。
- "加号意味着附加了某种额外功能。"这里的 "+" 仅指论证结构上的改良(加权内积),不代表多了什么面向用户的开关或特性。
常见问题(FAQ)
Bulletproofs+ 会让我的旧 Monero 变得不可花费吗?
不会。这次变更是一次共识层升级,在某个特定的区块高度激活。2022 年 8 月分叉之后,更新过的钱包只是开始为新交易构造 Bulletproofs+ 证明而已。在旧的 Bulletproofs 时代收到的币花起来完全没问题——证明是在你每次发送时新鲜生成的,并不会和你的余额一起被永久存储。
Bulletproofs+ 比 Bulletproofs 更私密吗?
不。两者对金额的隐藏程度完全一样,证明的也是同一个 [0, 264) 范围。Bulletproofs+ 纯粹是效率改进——更小的证明和略快的验证。Monero 真正的隐私来自 RingCT、隐身地址(stealth address)和 CLSAG 环签名,这些都和范围证明无关。
我需要做什么才能用上 Bulletproofs+ 吗?
只要运行一个当前版本的钱包就行。官方 Monero 软件(GUI 和 CLI)以及口碑良好的第三方钱包,自 2022 年升级以来就默认构造 Bulletproofs+ 证明。没有开关需要切换,也没有迁移需要执行——这一切都是自动的。
Monero 为什么不直接用 zk-SNARK?
大多数高效的 zk-SNARK 系统都需要一次可信设置仪式,而这会产生一些秘密参数;这些参数一旦泄露,攻击者就能伪造证明、神不知鬼不觉地增发供应量。Bulletproofs 和 Bulletproofs+ 不需要这样的仪式,与 Monero 去信任的理念一致。代价是证明略大一些,验证开销也会随陈述规模而增长。
范围证明和环签名是一回事吗?
不是,它们解决的是两个完全不同的问题。环签名(以及 CLSAG、未来的 FCMP++)负责隐藏"是谁花的钱"——把真正的发送方混进一组其他输出里。范围证明(Bulletproofs+)则负责证明"金额是诚实的"——确保被隐藏的数值落在合法区间内、没有人凭空造币。一笔 Monero 交易会同时携带这两者,缺一不可。
Bulletproofs+ 之后是什么?
下一个重大飞跃是 FCMP++(全链成员证明,Full-Chain Membership Proofs),它的目标是用一种把每一笔花费隐藏在整条区块链之中、而非藏在 16 个诱饵组成的环里的证明,来取代环签名。它使用自己的一套证明机制,在 2025–2026 年间持续处于活跃测试阶段,计划在未来的一次硬分叉中上线。即便 FCMP++ 彻底改造了隐私中"成员归属"的那一面,像 Bulletproofs+ 这样的范围证明很可能仍会保留住自己的岗位。
为什么范围证明的区间是 [0, 2^64)?
这个上界来自 Monero 金额的内部表示方式:每个金额都用一个 64 位无符号整数来记账(以最小单位 piconero 计,1 XMR = 1012 piconero)。证明数值落在 [0, 264) 之内,等价于证明它是一个合法的、不会溢出的非负金额。这个区间从 Bulletproofs 到 Bulletproofs+ 始终没有改变。
Bulletproofs+ 会不会拖慢我发送交易的速度?
几乎不会。生成证明的开销主要发生在你的钱包本地,时间在毫秒到数百毫秒量级,普通用户感知不到。真正受益的是验证端——也就是全网每一个需要检查你这笔交易的节点。换句话说,Bulletproofs+ 在你这边几乎免费,却在网络那一侧持续省钱。
我能在区块浏览器里看到 Bulletproofs+ 证明吗?
能。在 getmonero.org 生态的区块浏览器里查看一笔 2022 年 8 月之后的交易,你会在交易的原始数据中看到标记为 Bulletproofs+ 的字段(更早的交易则标记为 Bulletproofs 或更老的格式)。你看到的是证明的承诺与曲线点等密码学数据,而不是任何金额——这恰恰说明了它能在隐藏数值的同时仍可被公开验证。
给普通用户的实用建议
- 保持钱包更新。只要你用的是近年来维护活跃的钱包,Bulletproofs+ 就是默认行为,无需任何配置。
- 别为"更私密的证明"买单。市面上若有人以"升级到更匿名的 Bulletproofs+"为名收费或推销,那纯属营销话术——这项改进早已对所有人免费生效。
- 关心隐私,就该关心环签名与网络层。真正影响你匿名性的,是环大小、隐身地址、以及是否经由 Tor 或 I2P 广播,而不是范围证明用的是哪一版。
- 有条件就跑一个节点。如果硬件允许,自己运行一个 monerod 全节点。Bulletproofs+ 带来的更低验证开销,正是让这件事在普通设备上可行的原因之一。
结语
Bulletproofs 是那场革命——2018 年一次 80% 的体积削减,让机密金额第一次变得切实可用。Bulletproofs+ 则是打磨——2022 年一次 5%–7% 的精修,用加权变体换掉了内积论证,把零知识折叠进证明本身,在每一笔交易上省下字节,却丝毫没有改变你的隐私。搞清楚这个区别,你就能一眼识破那个把新版证明吹成"更匿名"的营销神话:它根本不是,它也根本不需要是。
两种证明的目标始终一致——在金额保持密封的同时,保证没有人能够伪造 XMR。正是这份不动声色的完整性,让每一枚币都能彼此互换。准备好上手了吗?你可以通过 MoneroSwapper 匿名购买 Monero,无需账户、无需 KYC,而你收到的每一个输出,都会搭载与全网其余部分所信任的那份同样精简、久经实战检验的 Bulletproofs+ 证明。
🌍 阅读其他语言