Balancer V1 旧池:舍入错误导致 234,000 美元的损失,而且没有人可以暂停池
核心要点
- 2026 年 8 月 31 日,Balancer 呼吁流动性提供者退出已退役的 V1 池,因为攻击者通过舍入误差从其中一个池中提取了大约 234,000 美元。
- Balancer 同一天证实,旧的 V1 合约存在一个缺陷,可以通过该缺陷耗尽流动性提供者的余额,并将受影响的人指向旧的退出界面。

如果您在旧的 Balancer V1 池中拥有流动性,则必须自行提取。没有人可以为您暂停这些池。 2026 年 8 月 31 日,Balancer 呼吁流动性提供者退出已退役的 V1 池,因为攻击者通过舍入误差从其中一个池中提取了大约 234,000 美元。这些合同的日期从 2020 年开始,不能暂停,而且曾经建造这些合同的公司自 2026 年春季以来就已经不存在了。因此,退出完全取决于您。我们于 2026 年 9 月 1 日在以太坊区块链上亲自测量了情况,而不是根据报告进行汇总。由此产生的结果如下:受影响的池实际上是空的,受到攻击的函数仍然位于合约中,并且生产此类池的工厂运行不变。 8 月 31 日 Balancer V1 池中发生的情况:由于舍入误差,损失了 234,000 美元 根据安全公司 SlowMist 的分析,2026 年 8 月 31 日,根据 Balancer V1 设计构建的流动性池损失了约 234,000 美元。该池持有四种资产,其中包括Wrapped Bitcoin (WBTC),这是以太坊上代表的比特币形式。攻击者不需要偷来的钥匙,也不需要后门。他只使用合约的公共函数,就像任何其他用户一样。 Balancer 同一天证实,旧的 V1 合约存在一个缺陷,可以通过该缺陷耗尽流动性提供者的余额,并将受影响的人指向旧的退出界面。该公司表示,其其他产品不受影响。重要的补充来自 Balancer 本身:退休的池是不可暂停的。没有任何开关可以停止其内部的交易。与今年其他事件相比,损失规模较小。它的意义还在于其他方面。该漏洞与 2025 年 11 月对 Balancer V2 的攻击属于同一家族,根据来源,该漏洞造成 1.1 亿至 1.28 亿美元的损失。同样的算术逻辑,同样的不精确性,九个月后,合同中不再有人照顾。舍入误差、BPT 和 joinswapPoolAmountOut:攻击背后的术语 必须理解三个术语,否则事件将保持不透明。什么是流动性池 流动性池是区块链上的一份合约,多个用户将余额存入其中,以便其他人可以在这些资产之间进行交换并收取费用。无论谁存款,都会收到池份额作为回报。在 Balancer,这些份额被称为 Balancer 池代币,简称 BPT。因此,BPT 只不过是您在底池中所占份额的收据。在这种情况下,舍入误差意味着什么区块链不使用小数进行计算,而是使用整数和固定的小数位数进行计算。 Balancer V1 内部工作,保留 18 位小数。不过,WBTC 只有 8 个,USDC 只有 6 个。如果满足这些精度,合约就必须四舍五入。舍入误差是指当舍入总是落在同一方向并且没有人检查结果是否仍然有意义时出现的间隙。 joinswapPoolAmountOut 函数的作用 该函数颠倒了通常的顺序。通常情况下,您会说明您存入的金额,合同会计算您为此获得的资金池份额。通过 joinswapPoolAmountOut,您可以指定您想要多少股票,合约将向后计算您必须为这些股票存入多少资金。这种逆向计算就是攻击点。 1 聪 4,408.8 个矿池代币:攻击的算术原理 该序列可以分三步列出,而且平庸得令人震惊。首先,攻击者通过一系列完全普通的互换来减少矿池中的 WBTC 持有量,直到几乎什么都没有剩下。挤压储备金是真正的技巧,因为合约的向后计算取决于手头的余额。在第二步中,他通过上述功能请求了大量的池份额。由于准备金实际上为零,因此计算将所需的股份四舍五入为一个聪,这是比特币的最小可表示部分,价值仅为一美分的一小部分。无论如何,该合约都铸造了所要求的全部数量:根据慢雾的分析,4,408.8 股。在第三步中,他再次赎回这些股份,并获得了该池全部内容中他应得的比例。他为此支付了 1 聪。慢雾简单地描述了问题的核心:矿池缺乏基本的保障措施,其中包括最低投入、最低余额和相对误差检查。微小的输入,完整的输出:这就是向后计算没有下限时的行为方式。不可暂停:为什么没有人可以停止 Balancer V1 遗留池在现代 DeFi 协议中,紧急停止是标准设备。当缺陷被发现时,团队或多重签名地址会冻结受影响的合约,并为用户赢得时间。 Balancer V1 诞生于一个尚未确定的时期。合同没有这样的转换。由此而来的是不熟悉的角色分配。在正常情况下,协议会保护您,您只需等待。这里没有人做保护。合约继续运行,易受攻击的函数保持可调用状态,将您的权益移出危险区域的唯一行动就是您自己的撤回。这就是为什么 Balancer 的行动号召如此直接。
我们在 9 月 1 日进行的测量:被利用池中仍然存在哪些内容 为了让您不必依赖二手账户,我们自己读出了受影响的合约。这项调查由 cryptoticker.io 于 2026 年 9 月 1 日进行。我们如何测量 我们直接通过公共以太坊端点查询地址 0x2257aa…ac57 处的矿池合约,以及关联的 Balancer V1 工厂和作为攻击者的地址 SlowMist。总共对 3 个合约和地址进行了 14 次单独查询,所有查询均在世界标准时间 2026 年 9 月 1 日 18:52 至 18:55 之间进行,每个查询位于区块 25,884,349。调查结果详细。该池持有四种资产:USDC、Wrapped Ethereum (WETH)、WBTC 和指数代币 DPI。剩下的是 1.185195 USDC、0.00047920 WETH、0.0000149 WBTC 和 0.02062253 DPI。那不是残留物,那是灰尘。已发行池份额的总供应量为 6.0763871974 BPT,互换费用为 0.5%。合同上的两个状态标志很有启发性。该池已最终确定,因此其组成无法再更改。并且它仍然对公共交换开放。它已被清空,但尚未停止流通。工厂根据要求确认这是自己生产的正品水池。最重要的一点涉及程序代码本身。存储在区块链上的矿池代码大小为 22,537 字节,受攻击函数的标识符在其中保持不变。以太坊上的合约事后无法更改。只要链条运行,一旦发布的内容就会保持这种形式。 Balancer V1 工厂仍在运行:至今仍可以创建新的遗留池 测量的第二部分是令人惊讶的部分。所有 Balancer V1 池的起源工厂位于以太坊上的地址 0x9424B1…76Bd。它仍然存在,其代码运行到 24,407 字节,并且该代码包含运行攻击的同一函数的标识符。这是很合乎逻辑的,因为这样的工厂在其内部携带了池的蓝图,并在每次新创建时传递它。实际上,这意味着:今天任何想要创建新 Balancer V1 池的人都可以这样做,并且他们将获得具有相同算术逻辑的池。我们没有创建一个池来证明这一点,这将是一种干预,而不是一种测量。该语句基于工厂代码中的蓝图。对于作为读者的您来说,这与其说是关于 Balancer 的警告,不如说是对该技术属性的警告:旧代码不会消失。它只是变得无人监督。你受到影响了吗?如何发现钱包中的 Balancer V1 头寸 大多数散户投资者并未受到此事件的影响。任何在交易所或硬件钱包中持有加密资产并且从未提供过流动性的人与 V1 池无关。仅当以下描述之一适合您时,您才会受到影响。您在 2020 年至 2022 年间将余额存入 Balancer 池中,但从未取回该权益。
你的钱包里有一个代币,它的名字暗示着一个矿池,但它的价格却没有清晰地显示出来。
您当时通过另一个在后台使用 Balancer V1 合约的提供商的界面进行存款。
您为那个时期活跃的人管理一个钱包,例如继承遗产。最快的测试需要几分钟:打开区块链浏览器,输入您的钱包地址并查看代币列表。矿池份额本身就是作为代币出现的。如果您发现这样的条目,请通过 Balancer 的旧退出界面检查其后面是否有 V1 池。同模铸造:Balancer V1 蓝图也可以在与 Balancer 无关的项目中运行。 V1代码的分叉:为什么舍入误差不会在Balancer处停止 Balancer V1是开源的。多年来,许多项目都复制了该代码并根据自己的目的进行了调整。这在这个行业很常见,并且长期以来一直是质量的标志:经过审计的代码,您不必从头开始编写。现在弊端就显现出来了。如今,进入和退出的算术逻辑在与 Balancer 无关的程序中运行,其操作员甚至不会听到 8 月 31 日的通知。 《加密时报》在其对该事件的描述中准确地指出了这一点,并提到了 2026 年 6 月的一个案例,其中攻击者利用了 Polygon 链上海洋协议重建池中的类似弱点。对你来说,结果是一个令人不舒服的经验法则:检查你是否曾经接触过 Balancer 本身是不够的。如果您在某个时候向一个池提供了流动性,而该池的运营商多年来没有发布任何内容,则同样的考虑也适用。
