托管机构如何向用户自证「这些币还在」?最古老的答案是签名:给某个地址签一条消息。但一个签名要等一堆签名汇总,钱包和硬件设备都不爱配合。2019 年 1 月 28 日,Steven Roose 提交 BIP-127《简易储备证明交易》,把整件事压缩成「一笔大家都认识的比特币交易」——只不过它被故意造成永远无法确认的样子。状态 Complete。
构造只有三条硬规则。第一,交易第一个输入叫承诺输入:它的前指交易哈希不指向任何真实交易,而是「Proof-of-Reserves: 」加上机构自选声明文本后做 SHA-256 的结果,输出序号固定 0。链上不存在这样一笔前交易,所以这笔交易天生非法,绝不会被哪个矿工确认——它从设计上就是一笔不可能上链的交易,恰好符合「证明不是转账」的定位。第二,其余全部输入照常签名,且签名必须覆盖这个承诺输入(用 SIGHASH_ALL 即自动满足):别人无法从别处复制一份签名拼接到不同的声明上。第三,交易只有一个输出,金额精确等于所有真实输入之和,手续费为零:不留下任何「差点能广播」的歧义。三条规则合起来给了四个承诺——证明复用无门(绑定了声明文本)、签名可公开验证(就是标准交易验证)、构造灵活(输入可以来自任意复杂的钱包体系)、结论锚定区块高度(证明的是「某区块时点这些 UTXO 被控制」,此后涨跌不论)。
真正让机构愿意采用的是它的工程亲和性:验证端不需要任何新软件,一条普通比特币节点就能逐签名复核;签名端不需要新协议,钱包按普通交易流程签即可。原文点名的动机也在这里:储备证明这个词早就有,但每家机构自造一套格式,用户进不了门槛。标准化之后,任意第三方软件都能核对任意机构的证明。
硬件钱包有一个体验死角:设备看到你在「把 UTXO 全部转走」,会弹出「确定要发送全部余额吗」。方案是给 BIP-174 的 PSBT 输入映射加一个新字段——PSBT_IN_POR_COMMITMENT(类型 0x09),里面直接放那段承诺文本。设备识别到它就明白这是储备证明而非转账,可以温和提示而不是红色警告。签名时承诺输入保持空的 scriptSig 与 witness,不签名。
边界必须读清楚。原文专设「这份 BIP 不做什么」一节:这种构造的隐私属性差——所有参与证明的 UTXO 都暴露在验证者眼前,等于把家底摊在桌面上供人围观;更好的隐私方案(如 Provisions 一类密码学研究)存在,但本 BIP 刻意只标准化既成事实的做法。它也不证明偿付能力:证明的是「控制了这些地址」,不说明同一张资产负债表上还有多少欠用户的债;储备证明与负债审计是两个物种,混淆两者是对这份工具最大的误读。
常见误区有三个。其一,以为证明交易可以伪造——签名者必须真持有全部私钥,假的签不出来;但真实签名也可能只挑干净的币签,选择偏差防不住。其二,把承诺输入的哈希当成可点击的交易 ID,它不对应任何存在的东西。其三,以为 PSBT 扩展字段影响共识:它只存在于签名流程的容器里,链上验证根本看不见它。
快速问答。问:普通人怎么验证?答:拿到证明交易文件后,用支持 BIP-127 的验证器或直接导入节点,核对每个输入签名有效、声明文本哈希正确、输出等于输入和。问:为什么不直接签消息?答:交易形态复用了全套现成的签名、序列化与验证基础设施,规模远大于消息签名器。问:证明有效期?答:它证明的是所绑定区块高度那一瞬间的控制权,过期后需要新一轮。
风险提示:本文是机制科普,不构成投资建议,也不构成对任何机构偿付能力的判断;储备证明只说明特定时点部分资产的钥匙在 issuer 手里,与你的存款是否被全额覆盖没有直接关系。

发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。