跳到主要内容

1.28 亿美元的舍入误差:微小的数学漏洞如何清空了横跨九条链的 DeFi 最老牌 AMM

· 阅读需 12 分钟
Dora Noda
Software Engineer

8 wei。这大约是 0.000000000000000008 个代币 —— 这个数量微小到几乎没有实际的美元价值。然而在 2025 年 11 月 3 日,一名攻击者利用这种规模的舍入错误(rounding errors),窃取了价值 1.28 亿美元的资产,在不到 30 分钟的时间内抽干了 9 条区块链上 Balancer 的 Composable Stable Pools。

Balancer V2 漏洞利用事件现已成为历史上规模最大的单漏洞、多链 DeFi 攻击事件。它在一夜之间抹去了 Balancer 52% 的总锁仓量(TVL),该代码曾通过了行业顶尖公司的十多次安全审计,并迫使一条链 —— Berachain —— 执行紧急硬分叉以追回资金。漏洞究竟是什么?仅仅是一行代码的舍入方向错误。

Balancer 池的工作原理 —— 以及它们在哪里崩溃​

Balancer V2 借鉴了 Curve 的 StableSwap 模型中的一个概念:一个被称为 D 的数学不变值(invariant),它代表了池中锁定的总价值。每当用户进行代币交换时,协议都会重新计算 D 以确保池子保持平衡。用户在注入流动性时收到的 Balancer 池代币(BPT)的价格直接由该不变值推导得出:BPT 价格 = D / 总供应量 (totalSupply)。

在计算 D 之前,协议必须使用缩放函数(scaling functions)将代币余额归一化为通用精度。这就是致命缺陷所在。

_upscaleArray 函数在将原始代币余额转换为缩放值时使用了 mulDown(向下舍入)。对于正常大小的余额(数千或数百万个代币),向下舍入一个 wei 的零头是无关紧要的。但当代币余额被推到仅 8–9 wei 的边界时,Solidity 的整数除法会将这种微小的舍入错误演变成巨大的相对偏差。

在 8 wei 时,即使向下舍入 1 wei 也代表 12.5% 的精度损失。将这种扭曲的余额代入不变值计算中,D 就会下降。当 D 下降时,BPT 价格也随之下降。当 BPT 价格被人为压低时,攻击者就可以廉价买入并以全价赎回。

攻击过程:单笔交易中的 65 次微额交换​

Check Point Research 的区块链监控系统在 UTC 时间 2025 年 11 月 3 日 07:46 标记了该漏洞。那时,攻击者的智能合约已经在执行一系列毁灭性的操作。

攻击分三个阶段展开,全部打包在包含 65 次交换操作 的单笔 batchSwap 交易中:

阶段 1 —— 推至边界。攻击者将大量 BPT 换成标的代币,故意将一种代币的池余额压低至 8–9 wei 的关键阈值。在这个余额水平下,涉及该代币的后续每一步操作都会触发最大的精度损失。

阶段 2 —— 复合误差。由于一种代币被固定在舍入边界,攻击者执行了快速的小额交换。每次交换都会触发 _upscaleArray 函数在缩放过程中向下舍入,导致不变值 D 被系统性地低估。单次交换的精度损失微乎其微,但在同一次 batchSwap 调用的 65 次操作中,损失急剧复合 —— 足以将 BPT 价格人为压低至远低于其实际价值的水平。

阶段 3 —— 低买高赎。攻击者以被压低的价格购买 BPT,然后立即以全价将这些代币赎回为底层资产。操纵价格与真实价格之间的差额就是纯利润。

整个过程 —— 从第一次交换到最后一次抽干 —— 耗时不到 30 分钟。攻击者部署了将攻击逻辑内置于构造函数(constructor)中的自定义智能合约,这意味着攻击在部署后自动执行,无需进一步交互。

九条链,一个漏洞​

使这次事件从严重的攻击升级为历史性事件的原因在于其波及范围。同样的漏洞代码运行在部署了 Balancer V2 Composable Stable Pools 的每一条链上:

  • Ethereum —— 最大的资金池,损失最惨重
  • Arbitrum —— 大量流动性被抽干
  • Base —— Coinbase 的 L2 遇袭
  • Optimism —— OP Stack 资金池被搬空
  • Polygon —— 长期存在的资金池成为目标
  • Avalanche —— C-Chain 资金池遭到破坏
  • Gnosis —— 规模较小但仍受影响
  • Berachain —— 新启动的链遭受重创
  • Sonic —— 最新的部署,同样存在漏洞

攻击者不需要九个不同的漏洞。他们只需要一个 —— 部署九次。Balancer 的共享代码库虽然实现了高效的多链部署,但也成为了同步多链破坏的媒介。

重要的是,其他 Balancer 池类型(加权池 Weighted Pools、托管池 Managed Pools)以及较新的 V3 协议完全未受影响。该漏洞仅针对 Composable Stable Pool 的数学计算。

TVL 的崩塌​

在遭到攻击前,Balancer V2 的总锁仓量为 4.42 亿美元。在 24 小时内,这一数字暴跌至 2.14 亿美元 —— 跌幅达 52%。随着消息传开,流动性提供者出于谨慎纷纷从未受影响的池中撤资,TVL 在接下来的几周内继续下滑至约 1.82 亿美元。

对于一个自 2020 年以来一直是 DeFi 支柱的协议来说,这种跌幅是毁灭性的。Balancer 曾熬过了 2022 年的熊市、Terra 的崩盘和 FTX 的内爆。一个舍入错误做到了宏观灾难都没能做到的事情。

恢复与补救:硬分叉、白帽行动与 3300 万美元的追回​

事件发生后,引发了 DeFi 历史上最富戏剧性的追回行动之一。

Berachain 的紧急硬分叉。 这条新上线的链采取了最激进的行动:验证者协作进行了紧急硬分叉,冻结了攻击者在链上的资金。一位自称白帽的操作者归还了价值 1280 万美元的 Berachain 遭窃资产,使该链上受影响的用户得以全额追回损失。

StakeWise 的直接追回。 这一流动性质押协议通过其紧急多签执行了合约调用,追回了约 5,041 枚 osETH(1930 万美元)和 13,495 枚 osGNO(170 万美元)—— 占其被盗 osETH 的 73.5%。

社区白帽行动。 额外的追回行动使总追回金额达到约 3300 万美元,将净损失降至约 9500 万美元。

剩余资金(主要分布在 Ethereum 和 Arbitrum 上)已被攻击者转换为 ETH,目前仍留在已识别的钱包中。是否能通过谈判、法律行动或漏洞赏金计划追回这些资金尚不确定。

十次审计,零漏洞检出​

关于 Balancer 漏洞利用最令人不安的事实是:该代码已接受过超过十次审计,审计方包括业内最受尊敬的安全机构,如 OpenZeppelin、Trail of Bits 和 Certora。

2022 年,Certora 对 Balancer V2 的关键偿付能力属性进行了形式化验证。但这些形式化证明并未专门涵盖缩放函数中的舍入方向风险。验证过的属性证明了在“正常情况”下资金池不会被掏空 —— 但“正常情况”并未考虑到攻击者故意将代币余额推至 8 wei 的极端情况。

Trail of Bits 在漏洞发生后指出,舍入问题在早期的审计中曾被标记,但并未被列为高风险。当时的理由是可以理解的:单次舍入误差产生的损失微乎其微。没有人模拟过当 65 次此类误差在单个原子交易中叠加时会发生什么。

这反映了 DeFi 行业不断重温的一个模式:审计是有范围的审查 —— 是特定代码在特定时刻的快照。它们测试已知的攻击模式并验证特定属性,但并不是绝对保证。当协议演进、新增资金池类型或代码部署到新链时,审计过的代码与生产环境中运行的代码之间的差距会悄然扩大。

“规范即法律”论点​

Balancer 漏洞利用已成为**形式化规范(formal specification)**倡导者的典型案例 —— 即在编写代码之前,先对协议的行为编写数学定义的做法。

由 a16z 和 Certora 等机构倡导的论点很简单:如果 Balancer 维护了一套形式化规范,规定“舍入绝不能导致 D 在每次操作中减少超过 X%”或“N 次兑换的累计舍入误差必须保持在界限内”,那么该漏洞在验证阶段就会被发现,而不是在生产环境中爆发。

大多数 DeFi 审计中使用的典型不变性原则 —— “舍入必须有利于协议” —— 被证明是不够的。它抓住了舍入的方向,但未能捕捉到跨多操作流程的累计误差量级。 “规范先行”的方法将迫使协议设计者定义并捍卫其系统依赖的每一个数学不变性,包括极端余额范围内的边缘情况。

这种方法是否能跟上 DeFi 开发的节奏仍是一个待解决的问题。编写和维护形式化规范需要巨大投入,但正如 Balancer 漏洞所展示的,不这样做的代价可能是九位数的损失。

这对 DeFi 安全意味着什么​

Balancer 漏洞利用具象化了几个正在重塑行业对协议安全思考的趋势:

共享代码库放大风险。 多链部署效率很高,但这也意味着单个漏洞会演变成一场多链灾难。跨链部署的协议需要针对特定链的监控,并具备独立暂停单个部署的能力。

高精度算术是头等安全大事。 舍入误差并非微不足道的记账问题。在管理着数十亿美元锁仓量(TVL)的协议中,哪怕是低于一分钱的精度损失也可能被武器化。每个缩放、归一化和转换函数都需要进行明确的舍入方向分析。

批量操作需要有损界限保证。 batchSwap 函数的设计初衷是提高 Gas 效率 —— 允许在单个交易中进行多次兑换。但它也允许误差在没有中间验证的情况下叠加。未来的实现应在批量操作之间加入不变性检查,而不仅仅是在开始和结束时。

持续安全胜过点对点审计。 Trail of Bits 的事后分析强调,行业需要从孤立的审计委托转向持续的安全合作伙伴关系 —— 包括持续的模糊测试(fuzzing)、演进代码库的形式化验证,以及具有自动暂停能力的实时监控。

恢复基础设施至关重要。 Berachain 能够进行硬分叉并冻结资金,以及 StakeWise 的紧急多签追回,挽救了 3300 万美元。那些在需求出现前就投资于事件响应基础设施的协议和链,在不可避免的漏洞利用发生时,将处于更有利的地位。

Balancer V3 之问​

一线生机:Certora 确认 Balancer V3 的架构不受此漏洞影响。V3 的重新设计解决了导致该攻击的缩放不一致问题,这表明 Balancer 团队早已意识到精度处理是一个需要改进的领域 —— 即便当时并未预见到具体的攻击向量。

对于衡量是否重返 Balancer 的流动性提供者(LP)而言,V3 的采用率成为了关键指标。该协议的长期生存能力取决于其能否在信心进一步流失之前,将剩余的 V2 流动性迁移到更安全的架构中。

不断重复的教训​

自 2020 年以来,DeFi 因闪电贷攻击和数学漏洞造成的损失已超过 20 亿美元。Balancer 遭到的攻击是行业至今仍无法打破的一种模式的最鲜明例证:微小的算术错误对审计人员来说是不可见的,并被忽视了多年,但当攻击者找到正确的操作序列并将其叠加放大时,就会演变成高达九位数的灾难。

8 wei 的舍入误差。1.28 亿美元被盗。9 条链受损。绕过了 10 次审计。从第一次交换到最后一次资金被掏空仅用了 30 分钟。

这些数字讲述了一个 DeFi 行业再也无法忽视的故事:在一个“代码即法律”的系统中,每一个舍入决策都是一个安全决策。


BlockEden.xyz 为多个区块链网络提供企业级 RPC 和 API 基础设施,其内置的监控功能旨在检测异常的链上活动。在 DeFi 协议应对跨链安全挑战之际,具备实时可观测性的可靠基础设施变得至关重要。欢迎 探索我们的 API 市场,在以安全为核心的基石上进行开发。