Losses & Recovery
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 activityNon-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 amountAffected LPs claim their proportional share via
LendingPoolManager.claimLoss()using their unrealized loss tokensRecovered 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.
Last updated