Balancer V2攻击事件深度解析:复杂操纵引发逾1.2亿美元损失
11月3日,Balancer V2协议及其分叉项目在多条区块链上遭遇了一起高度复杂的攻击事件,导致超过1.2亿美元的严重资产损失。BlockSec团队在第一时间发出预警[1],并迅速给出了初步分析报告[2]。根据我们的调查,此次攻击的核心原因在于攻击者通过操纵不变量(invariant)扭曲了BPT(Balancer Pool Token,即流动性池的LP代币)的价格计算,从而利用一次精心设计的batchSwap操作从某个稳定池(stable pool)中获利。
背景知识
1. 缩放与取整
为了统一不同代币的小数位,Balancer合约采用了以下两种操作:
-
upscale:将余额与数额放大到统一的内部精度后再进行计算;
-
downscale:将结果缩回原生精度,并进行有方向的取整(例如输入端通常向上取整,确保池子不少收;输出路径则常向下截断)。
结论:在同一笔交易内,由于不同环节采用的取整方向不对称,在极小步反复执行时,会产生系统性微小偏差,为攻击埋下隐患。
2. D与BPT价格
本次攻击主要影响了Balancer V2协议中的Composable Stable Pool[3]以及其分叉协议。Stable Pool适用于那些预期能够保持接近1:1兑换比例(或在已知汇率下进行兑换)的资产,允许在不产生显著价格冲击的情况下进行大额兑换,从而大幅提升相似资产或相关资产之间的资金利用效率。
-
该池采用Stable Math(基于Curve的StableSwap模型),不变式D代表池子的“虚拟总价值”。
-
BPT (Pool的LP Token) 价格近似为:

从上述公式可以看出,若能让D在账面上变小(即使实际资金未流失),就能让BPT价格变得更便宜。BPT代表的是流动性池的份额,用于计算撤出流动性时能获得多少池中储备资产。因此,如果攻击者能够获得更多BPT,最终在撤出流动性时便能获利。
攻击分析
以Arbitrum上的一笔攻击交易为例,batchSwap操作可分为三个阶段:
第一阶段:攻击者将BPT兑换为底层资产,以精确调整其中一种代币(cbETH)的余额至四舍五入边界的临界点(数量 = 9)。这一步为下一阶段的精度损失(precision loss)创造了条件。
第二阶段:攻击者使用精心构造的数量(= 8),在另一种底层资产(wstETH)与cbETH之间进行交换。由于在缩放代币数量时进行了向下取整(rounding down),计算得到的Δx略小(从8.918变为8),从而导致Δy被低估,并使不变量D(来源于Curve的StableSwap模型)变小。由于BPT价格 = D / totalSupply,BPT价格被人为压低。

第三阶段:攻击者将底层资产反向兑换回BPT,在恢复池内平衡的同时,利用被压低的BPT价格获利——获得更多的BPT代币。
最后,攻击者通过另一笔获利交易进行流动性撤回,从而利用多获得的BPT获取池中其他底层资产(cbETH和wstETH)完成获利。
攻击交易:
https://app.blocksec.com/explorer/tx/arbitrum/0x7da32ebc615d0f29a24cacf9d18254bea3a2c730084c690ee40238b1d8b55773
获利交易:
https://app.blocksec.com/explorer/tx/arbitrum/0x4e5be713d986bcf4afb2ba7362525622acf9c95310bd77cd5911e7ef12d871a9
参考文献:
[1] https://x.com/Phalcon_xyz/status/1985262010347696312
[2] https://x.com/Phalcon_xyz/status/1985302779263643915
[3] https://docs-v2.balancer.fi/concepts/pools/composable-stable.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代币币情的观点或立场
首页
快讯