Pool Lifecycle

A Kasu lending pool end to end: creating it with tranche ratios and rates, assigning roles, configuring parameters, first loss capital, drawing and stopping.

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:

RolePurpose
Pool ManagerManages pool parameters
Pool Funds ManagerManages finances and losses
Pool Clearing ManagerExecutes 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:

FunctionPurpose
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

FunctionPurpose
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