In all strategy variants (StrategyArb.sol, StrategyMainnet.sol, StrategyOp.sol), the balance accounting is incorrect due to double counting
The cause happen from a fundamental misunderstanding of what getUnexchangedBalance() returns from the Transmuter contract. The getUnexchangedBalance() function already includes the underlying token balance in its calculation.
This leads to:
First count: Through transmuter.getUnexchangedBalance()
Second count: Direct underlying.balanceOf()
In the balance accounting system across all three strategy implementations (Mainnet, Optimism, and Arbitrum) that interact with Alchemix's Transmuter contract.
Affected Components:
StrategyMainnet.sol
StrategyOp.sol
StrategyArb.sol
Core Issue: balanceDeployed()
from fundamental misunderstanding of the Transmuter's accounting system. The getUnexchangedBalance() function from ITransmuter.sol already includes the underlying token (WETH) balance in its calculation
Impact Across Chains:
Ethereum Mainnet:
Affects WETH/alETH strategy using Curve for swaps
Double counts WETH positions
Optimism:
Affects WETH/alETH strategy using Velodrome for swaps
Same accounting error in balance reporting
Arbitrum:
Affects WETH/alETH strategy using Ramses for swaps
Identical balance inflation issue
Real-world Implications:
Share Price Calculation:
Inflated total assets lead to incorrect share price calculations
Users receive fewer shares than they should when depositing
Risk Management:
Strategy appears to have more assets than it actually does
Could lead to exceeding intended risk parameters
In all three strategy variants (StrategyMainnet.sol, StrategyOp.sol, StrategyArb.sol), the balance calculation is implemented as
The root cause is that transmuter.getUnexchangedBalance() from ITransmuter.sol already includes the underlying token (WETH) balance in its calculation
This what creates a double-counting scenario:
First count: Through getUnexchangedBalance() which includes WETH
Second count: Direct addition of underlying.balanceOf()
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.