Skip to content

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. This feature is optional: setting ir_reactivity_constant to 0 disables the reactive modifier for that pool, leaving only the base kinked rate model in effect.

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×).