Skip to content
Request an audit

‹ All findings

BasicVault::_redeem() does not correctly deal with a disabled redeem queue after it was enabled

MediumMitosis·Three Sigma · Cross-chain liquidity layer 1 · 25th June, 20243S-Mitosis-M05

Description

BasicVault::_redeem() only calls BasicVault::_resolveWithIdleBalance() when the redeem queue is enabled, but it should also do it when it is disabled as not enough assets may have been reserved.

Additionally, when the redeem queue is disabled, it only checks the balance of the contract, not the _idleBalance(), as amounts may have been reserved to fulfill requests.

Recommendation

solidity
... _resolveWithIdleBalance($v2, asset_);
if ($v2.redeemQueueEnabled) {
    uint256 requestId = $v2.redeemQueue.push(_msgSender(), amount);
    emit RedeemQueued(receiver, address(asset_), requestId);
} else {
    if (_idleBalance($v2, asset_) < newAmount)
    revert("You're unable to redeem your assets now. Please try again later.");
    asset_.safeTransfer(receiver, newAmount);
}
...

Status

Addressed in #cfd54e5, #f379467.