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:

  1. First Loss Capital — provided by the Pool Funds Manager

  2. Junior Tranche — highest risk, first LP losses

  3. Mezzanine Tranche — absorbs losses after Junior is depleted

  4. Senior Tranche — lowest risk, last to absorb losses

Loss Token Issuance

When a loss is declared:

  1. The Pool Manager calls LendingPoolManager.stopLendingPool() to halt pool activity

  2. Non-transferable ERC-1155 unrealized loss tokens are minted to affected LPs proportional to their tranche shares

  3. A corresponding amount of USDC-IOUs are burned from the tranche to reflect the lost capital

  4. 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:

  1. The Pool Funds Manager calls LendingPoolManager.repayLoss() with any recovered amount

  2. Affected LPs claim their proportional share via LendingPoolManager.claimLoss() using their unrealized loss tokens

  3. 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.

Last updated