# Users may not be able to fully redeem USD1 into USDT even when reserve ratio is above 100%

Unitas reserve ratio counted portfolio (yield-invested) funds as reserves, so USD1 redemptions to USDT could revert despite a >100% ratio.

- Payout: Contest reward
- Severity: medium
- Program: Unitasprotocol
- Credited: 0x00ffDa
- Disclosed: 2023-04-19
- Write-up quality: 6/10
- Original: https://github.com/sherlock-audit/2023-04-unitasprotocol-judging/issues/95
- Library page: https://bugbountylibrary.com/r/sherlock%3A2023-04-unitasprotocol%3AM-4
- Tags: domain:web3 impact:dos impact:funds-loss kind:contest platform:sherlock sev:medium tech:solidity technique:source-review vuln:accounting-error vuln:business-logic

**Target:** Unitas.sol reserve ratio / redemption logic
**Root cause:** _getTotalReservesAndCollaterals uses _getBalance(token), which still includes funds moved into portfolio (strategic investments), so reserve ratio overstates redeemable liquidity.
**Steps:**
1. Note _getBalance includes portfolio; sending portfolio leaves balance unchanged
2. Compute reserveRatio = allReserves/liabilities with portfolio included
3. USD1/USDEMC appreciates so liabilities rise while available (non-portfolio) balance stays fixed
4. User redeems USD1 for USDT; Unitas available balance insufficient, pulls from InsurancePool
5. InsurancePool available balance also insufficient (portfolio portion) -> redemption tx reverts
**How found:** Code reading of _getReserveStatus/_getTotalReservesAndCollaterals and PoolBalances: observed balance unchanged after portfolio transfer, meaning portfolio is double-counted as liquid reserve.
**Insight:** When a protocol reports a collateralization ratio, check whether the numerator includes assets that were moved out to external yield strategies; balance-based accounting often still counts them, so solvency ratios overstate redeemable liquidity.
