2026年9月24日,攻击者从Bitget卷走了约3.875亿美元。五天后,其第47期储备证明报告的快照出炉,整体储备率显示为131%。与此同时,提现还在一个币种一个币种地恢复。

这两个数字放在一起,比任何科普文章都说明问题。交易所丢了一大笔钱,在某个周二上午9点(UTC)的账面上,它持有的资产仍然多于欠用户的负债。但这个比率说不出来的东西同样关键:攻击者是怎么进来的,以及下一周资产负债表会变成什么样。

打开网易新闻 查看精彩图片

如果你基于交易所API做开发,或者只是把币放在交易所里,你需要知道一份储备证明报告覆盖了什么,又在哪里停下。

资产和负债,必须分开证明

储备率是资产除以负债,按币种分别计算,而且两边要各自独立证明。

资产证明展示交易所控制着特定的链上地址。通常做法是公布地址,并用每个私钥签一条消息。以OKX为例,它提供开源工具,用来验证签名的"我是OKX地址"消息,并把余额与某个区块高度的快照进行比对。

负债证明展示交易所欠用户什么,这是更难的一半。公布每个用户的余额会毁掉隐私,所以通行做法是Merkle求和树,Vitalik Buterin在2022年关于偿付能力证明的文章里详细讲过这个结构。

OKX第47期报告列出了BTC 109%、ETH 101%、USDT 105%、USDC 100%。这些数字之所以能被读作储备率,前提是资产和负债是在同一个快照上被证明的。

每个用户是一片叶子

每个用户成为一片叶子:一个加盐用户标识符的哈希,加上该用户的余额。每个父节点存储子节点的哈希和它们余额的总和,于是根节点最终承诺了总负债。

交易所只公布根。你拿到的是从你的叶子到根这条路径上所有兄弟节点组成的证明。验证工具重新计算这条路径,如果结果落在公布的根上,你的余额就被计入了。

余额用bigint表示,单位是该资产的最小单位,因为浮点数不该出现在钱附近。总和也会进入每一个哈希,所以改动任何一处小计,都会破坏经过它的每一条路径。

假设交易所持有890 ETH,但欠用户1390 ETH。它可以添加一个余额为-500 ETH的假账户,根节点就会显示负债为890 ETH,与储备恰好匹配。

在普通Merkle求和树里,防御手段就是父节点里的那个检查:负数总和直接抛错。路径经过假账户附近的用户会看到负值并拒绝该证明。但这只有在那个分支里真有人跑检查时才有用,而交易所可以赌没人会跑。Buterin指出,对不诚实的交易所来说,悄悄把这些用户排除在树外同样有效。

零知识证明把这个赌注从桌上拿走了。zk证明可以展示树中每个余额都非负,且它们加起来等于声称的总数,而不泄露任何单个余额。OKX把负债证明迁移到了zk-STARKs。自2024年9月以来的报告,用户下载一个包含证明文件,用开源验证器运行,另一个单独的文件证明总数和非负约束。

FTX之后的标准安慰剂

储备证明在2022年11月FTX崩塌后成为标准的安抚手段。一个月后,会计师事务所Mazars暂停了为所有加密客户提供的这项工作,理由是担心"公众理解这些报告的方式"。它的报告遵循既定程序,不是审计,描述的只是过去某一个时间点。

四年过去,缺口还是那些。

9月24日盗窃案之后,Bitget从保护基金中弥补了损失,该基金此前持有5500 BTC。9月30日它表示基金已回到3.09亿美元。提现方面,BTC于9月28日恢复,ETH于9月29日恢复,USDT于9月30日恢复,其他代币、法币和P2P在10月2日跟进。

第47期报告快照时间为9月29日09:00 UTC,覆盖19种资产,整体比率131%,低于上一期报告的135%。其中BTC为142%,ETH为110%,USDT为107%,USDC为154%。快照前24小时,净流出约4.63亿美元。

所以Bitget在这样规模的盗窃和一波提现潮中保持了偿付能力,报告也显示了这一点。至于攻击者是怎么进来的、基金多快能重建、9月23日的比率是多少,你需要别的信息源。