Losses & Recovery
What happens when a borrower does not repay: absorption order, loss tokens, recovery claims, first loss capital, and stopping or concluding a pool.
Unrealized Loss Event#
An unrealized loss occurs when off-chain borrowers fail to meet repayment obligations. The Pool Funds Manager declares the loss by calling LendingPoolManager.reportLoss(), specifying the loss amount (up to the total capital owed to the pool).
Loss Absorption Order#
Losses are absorbed in a strict order, protecting senior capital:
- First Loss Capital — provided by the Pool Funds Manager
- Junior Tranche — highest risk, first LP losses
- Mezzanine Tranche — absorbs losses after Junior is depleted
- Senior Tranche — lowest risk, last to absorb losses
Loss Token Issuance#
When a loss is declared:
- The Pool Manager calls
LendingPoolManager.stopLendingPool()to halt pool activity - Non-transferable ERC-1155 unrealized loss tokens are minted to affected LPs proportional to their tranche shares
- A corresponding amount of USDC-IOUs are burned from the tranche to reflect the lost capital
- The lending pool resumes after all loss tokens are issued
Loss tokens can be minted in the same transaction as reportLoss() (via the doMintLossTokens parameter) or in separate batches by anyone calling LendingPoolTranche.batchMintLossTokens().
Each loss event generates a unique token ID per tranche, allowing differentiation between loss events across pools.
Recovery#
When the Pool Funds Manager recovers funds through enforcement actions:
- The Pool Funds Manager calls
LendingPoolManager.repayLoss()with any recovered amount - Affected LPs claim their proportional share via
LendingPoolManager.claimLoss()using their unrealized loss tokens - Recovered funds are distributed outside the pool balance — they do not change the LP's pool position
Example: A $20,000 loan defaults. After enforcement, $13,000 is recovered. The realized loss is $7,000. The $13,000 recovery is distributed pro-rata to unrealized loss token holders.
First Loss Capital#
First Loss Capital is non-interest-generating capital provided by the Pool Funds Manager as a risk buffer.
- Deposited via
LendingPoolManager.depositFirstLossCapital() - Absorbs losses before any tranche
- Can only be withdrawn after the pool is stopped and all tranche positions are fully repaid
- No minimum or maximum amount — the Pool Funds Manager determines the appropriate level
- Can be added to at any time during pool operation
Pool Stopping#
A lending pool is stopped when the Pool Manager calls LendingPoolManager.stopLendingPool(). Prerequisites:
- All owed funds must be repaid to the pool
When stopped:
- Interest rate is set to 0%
- No new draws are processed
- No new deposits are accepted
- LPs can submit withdrawal requests to retrieve their funds plus any accrued interest
- The pool cannot be restarted
Pool Conclusion#
When all outstanding USDC-IOUs are backed by USDC in the pool:
Total owed funds = USDC-IOUs - available USDC + owed fees
Once the Pool Funds Manager repays all owed amounts (including owed fees), the pool can be stopped and LPs can withdraw their full principal plus interest.