Balancer V1 Hack

Reported loss $234K
Ethereum
Rounding Error

What happened

On 31 August 2026 an attacker drained about $234,000 from a legacy Balancer V1 pool on Ethereum holding DPI, USDC, WETH and WBTC in equal weights. SlowMist attributed the loss to a precision (rounding) flaw in the pool's single-asset join path, the same bug family behind the November 2025 Balancer V2 exploit.

The attacker used flash loans from Spark, Morpho and Uniswap V3, pushed the pool's WBTC balance down to dust with swaps, and then minted 4,408.8 BPT while paying just 1 satoshi of WBTC. The BPT were redeemed for the pool's DPI, USDC, WETH and WBTC. Balancer V1 pools are immutable, so the code could not be patched in place. SlowMist identified the attacker as 0x338c7ec9befbb451d66fd8a468c32184f5689a41 and the attack contract as 0x9caa8d0e44b22f50057d2f4ce0d1446529e11be3.

How it happened

  1. The attacker took flash loans from Spark, Morpho and Uniswap V3.
  2. Public swaps against the pool drove its WBTC reserve close to zero.
  3. The attacker called joinswapPoolAmountOut, asking for 4,408.8 BPT and letting the pool work out the WBTC deposit required.
  4. calcSingleInGivenPoolOut computes that input with 18-decimal fixed-point math. With the WBTC balance at dust, the result truncated to 1 satoshi, and the pool had no minimum input, minimum balance or relative-error check to stop it.
  5. The attacker redeemed the BPT for DPI, USDC, WETH and WBTC, repaid the flash loans and kept about $234,000.

Protocol details

Classification Token & Share Accounting
Protocol Type DEX
Implementation language Solidity
Protocol links Website @Balancer

Build your security review skills

Work through hands-on labs covering real exploit mechanics, review techniques, and defensive patterns.