In StrategyOp.balanceDeployed, trategyMainnet.sol, and StrategyArb.sol
The transmuter's getUnexchangedBalance() already includes the underlying assets deposited, the strategy then adds underlying.balanceOf() again, creating a double-counting scenario.
The vulnerability is because of incorrect assumptions about state transitions in the transmuter system:
When assets are deposited into the transmuter, they're counted in getUnexchangedBalance()
The strategy incorrectly assumes these assets should also be counted separately through underlying.balanceOf()
This creates an accounting overlap where the same assets are counted in multiple places
The relationship between transmuter balances and underlying token balances was misunderstood in the original implementation. claimable + unexchanged can exceed balanceDeployed() due to this double-counting, breaking the fundamental accounting assumptions of the system.
In all three strategies (StrategyOp.sol, StrategyMainnet.sol, StrategyArb.sol), the core issue lies in
The underlying issue arises from a lack of understanding of the Transmuter's accounting system.
When assets are deposited via transmuter.deposit(), they're counted in getUnexchangedBalance(). The strategy then counts these same assets again through underlying.balanceOf()
Inflated Total Value Reporting
Incorrect Share Price Calculations
Because of incorrect assumptions about state transitions in the transmuter system, where the relationship between transmuter balances and underlying token balances was fundamentally misunderstood in the implementation.
In StrategyOp.sol, StrategyMainnet.sol, and StrategyArb.sol
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.