Pool Lifecycle

Creating a Pool

Role Required: ROLE_LENDING_POOL_CREATOR Function: LendingPoolManager.createPool()

The Pool Creator specifies:

  • Number of tranches (1-3)

  • Tranche ratios (must sum to 100%)

  • Interest rate per tranche

  • Desired draw amount

  • Minimum excess funds percentage

  • Pool Admin address

The Pool Creator acts as Pool Admin at creation time and can designate another address.

Setting Up Roles

Role Required: ROLE_POOL_ADMIN Function: KasuController.grantLendingPoolRole()

The Pool Admin must assign the following roles for the new pool:

Role
Purpose

Pool Manager

Manages pool parameters

Pool Funds Manager

Manages finances and losses

Pool Clearing Manager

Executes clearing each epoch

Parameters: lendingPoolAddress, roleHash, accountAddress

Configuring Pool Parameters

Role Required: ROLE_POOL_MANAGER

After roles are assigned, the Pool Manager sets pool parameters:

Function
Purpose

updateMinimumDepositAmount()

Minimum deposit per tranche

updateMaximumDepositAmount()

Maximum deposit per tranche

updateTrancheInterestRate()

Interest rate per tranche per epoch

updateTrancheDesiredRatios()

Ratio between tranches (sum to 100%)

updateDesiredDrawAmount()

Total capital to deploy into loans

updateMinimumExcessLiquidityPercentage()

Minimum excess funds to maintain

updateTargetExcessLiquidityPercentage()

Target excess funds percentage

Role Required: ROLE_POOL_ADMIN

Function
Purpose

updateDrawRecipient()

Set the address that receives drawn funds

Depositing First Loss Capital

Role Required: ROLE_POOL_FUNDS_MANAGER Function: LendingPoolManager.depositFirstLossCapital()

Before calling this function, the Pool Funds Manager must approve the USDC amount to be spent by the LendingPoolManager contract.

Once First Loss Capital is deposited, the pool is ready to accept LP deposits.

Pool Operation

During normal operation:

  1. LPs deposit via requestDeposit() or requestDepositWithKYC()

  2. Clearing executes each epoch (see Clearing Operations)

  3. Funds are drawn to the Draw Recipient after clearing

  4. Pool Funds Manager repays via repayOwedFunds() (USDC approval required first; owed fees are deducted first)

  5. LPs withdraw via requestWithdrawal(), processed during the next clearing

Deposits and withdrawals submitted during the clearing period are accepted but queued for the next epoch. Cancellations of pending requests are not allowed during the clearing period.

Drawing Capital

The Pool Manager sets the desired draw amount via updateDesiredDrawAmount(). This amount reflects the total owed amount, including any previously drawn capital and accrued interest.

Funds are drawn to the configured Draw Recipient during clearing Step 5. If insufficient deposits exist to meet the desired draw, the Pool Clearing Manager must override the draw amount during clearing configuration.

Stopping a Pool

Role Required: ROLE_POOL_MANAGER Function: LendingPoolManager.stopLendingPool()

Prerequisites: All owed funds must be repaid to the pool.

When stopped:

  • Interest rate set to 0%

  • No new draws or deposits accepted

  • LPs can still submit withdrawal requests

  • First Loss Capital can be withdrawn after all tranches are repaid

  • The pool cannot be restarted

Last updated