Skip to content

Utilization-Based Interest Rates

Borrow APR increases as pool utilization rises. As a pool becomes more utilized, borrowing becomes more expensive and supplying becomes more attractive. This encourages repayments and new supply, pushing utilization back toward a healthy band without manual intervention.

Borrow APR

Alula uses a kinked interest rate model with two kink points. Borrow APR is a piecewise-linear function of utilization.

Below the first kink

If U < U_k1:

BorrowAPR = BaseAPR + (U/U_k1) × (APR_k1 - BaseAPR)

Between the kinks

If U ∈ [U_k1, U_k2):

BorrowAPR = APR_k1 + [(U - U_k1)/(U_k2 - U_k1)] × (APR_k2 - APR_k1)

Above the second kink

If U ≥ U_k2:

BorrowAPR = APR_k2 + [(U - U_k2)/(1 - U_k2)] × (APR_max - APR_k2)

Per-second borrow rate

BorrowRate_per_second = BorrowAPR / SECONDS_IN_YEAR

Legend

  • U: utilization ratio, defined as total borrowed amount / total supplied liquidity
  • U_k1: utilization at the 1st kink point
  • U_k2: utilization at the 2nd kink point
  • BaseAPR: base APR that is always present
  • APR_k1: borrow APR at U_k1
  • APR_k2: borrow APR at U_k2
  • APR_max: maximum borrow APR at U = 1

Constraints

  • 0 < U_k1 <= U_k2 <= 1
  • BaseAPR ≤ APR_k1 ≤ APR_k2 ≤ APR_max

Reactive Interest Rate Modifier

In addition to the kinked interest rate model, each pool has a reactive interest rate modifier that creates a feedback loop to steer utilization toward a target level.

Configuration

Each pool's PoolConfig includes:

  • target_utilization_ratio_bps: the desired utilization ratio expressed in basis points
  • interest_rate_modifier: a multiplier applied to the base borrow APR
  • ir_reactivity_constant: a value in the range 0–100 that controls how aggressively the modifier reacts to deviations from the target utilization

Feedback Loop

The modifier adjusts dynamically based on the relationship between current utilization and the target:

  • When utilization exceeds the target, the modifier increases, making borrowing more expensive and incentivizing repayments.
  • When utilization is below the target, the modifier decreases, making borrowing cheaper and incentivizing new borrows.

The ir_reactivity_constant determines the speed and magnitude of these adjustments. A higher value produces faster, more aggressive corrections; a lower value produces smoother, more gradual changes.

Bounds

The modifier is bounded to prevent extreme outcomes:

  • Minimum: 0.1× (MIN_IR_MODIFIER = 1,000 bps)
  • Maximum: 10× (MAX_IR_MODIFIER = 100,000 bps)

Final Borrow APR

The final borrow APR applied to borrowers is:

FinalBorrowAPR = BaseBorrowAPR × interest_rate_modifier / 10000

where BaseBorrowAPR is the rate computed by the kinked interest rate model described above, and interest_rate_modifier is expressed in basis points (10,000 bps = 1×).