58352 sc low assets become permanently stuck in tokeautoeth strategy due to strict balance check
Submitted on Nov 1st 2025 at 13:43:40 UTC by @mohitisimmortal for Audit Comp | Alchemix V3
Report ID: #58352
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/strategies/mainnet/TokeAutoEth.sol
Impacts:
Permanent freezing of funds
Description
Description
When deallocating, the TokeAutoEth strategy adapter expects to receive the exact amount of WETH back from the Tokemak AutoETH vault. However, the vault consistently returns slightly less (e.g., 49.99 WETH for a 50 WETH deallocation) due to internal rounding/slippage.
The adapter then fails this check:
TokeAutoEth.sol::
function _deallocate(uint256 amount) internal override returns (uint256) {
...
>> require(TokenUtils.safeBalanceOf(address(weth), address(this)) >= amount, "Strategy balance is less than the amount needed");
...
}Because the returned amount is just below the requested amount, the transaction reverts. This prevents any deallocation from succeeding once assets are allocated.
ex -
allocate(100 weth)
deallocate(50 weth)
auto eth vault only sends 49.99 weth, and then that require st not passes, as 49.99 is not >= 50 weth.
Impact
All assets allocated into the TokeAutoEth strategy become permanently frozen.
Recommendation
Allow a small tolerance/slippage buffer when verifying returned assets, e.g.: require(TokenUtils.safeBalanceOf(address(weth), address(this)) >= amount-SLIPPAGE_TOLERANCE
Where SLIPPAGE_TOLERANCE is 0.5%–2%.
Proof of Concept
Proof of Concept
Add below test into
TokeAutoETHStrategy.t.sol:
run by
forge test --mt test_Revert_during_deallocate_due_to_less_assets_sends_to_adapter -vvvvoutput:
Was this helpful?