Interest Rate Model

Nomial provides configurable interest rate models out of the box, with the ability to add your own.

Configurable Rate Models

Nomial lets you define a rate model for each inventory pool. You can choose from existing model implemenations or make your own.

A Nomial pool defines it's interest rate model by referencing an instance of an inventory pool params contract (an interface defined in IInventoryPoolParams01.sol).

Nomial includes two implementations of interest rate models already. They are:

Borrow Rate vs Liquidity Provider Yield

A borrower must pay any accrued interest when paying back a pool.

A Liquidity Provider (LP) supplies assets to a pool and earns their share of the accrued interest. When a pool is not fully utilized, a borrower pays a higher interest rate than the yield rate earned by LP's.

For example, if an LP supplies 100 USDC but a borrower borrows 50 USDC at 10% , the LP earns 5% since only half of the supply is utilized.

The following sections provide more precise definitions of utilization, borrow rates, LP yield, and how they interact.

Utilization

Let:

  • B = total borrowed amount

  • L = total liquidity available (i.e. supplied – borrowed)

Then the pool’s utilization is:

U=BB+L,0U1U = \frac{B}{B + L}, \quad 0 \le U \le 1
  • If nobody’s borrowing, B=0 ⇒ U=0.

  • If the pool is “dry” (all funds borrowed), L=0 ⇒ U=1.

Borrow Rate

As an example, Nomial's UtilizationBasedRateParams01 contract defines a variable borrow rate that increases with utilization. Defined as rborrow(U), the formula is:

rborrow(U)=rbase+k×Ur_\mathrm{borrow}(U) = r_\mathrm{base} + k \times U
  • rbase = the "floor" rate (e.g., 2% APY). At U = 0, this is the borrow rate.

  • k = the variable rate which is multiplied by utilization (U) to get the additional rate on top of the base rate. For example, if rbase is 0.02, k = 0.18, and utilization is 1, then the borrow rate is 0.2 (i.e., 20%).

LP Yield Rate

The resulting yield for the LP is described by the following formula:

rsupply(U)=rborrow(U)×Ur_{\mathrm{supply}}(U) = r_{\mathrm{borrow}}(U) \times U

Why? Because borrowers pay rborrow on what they borrow, which may only be a portion of the pool.

Takeaways

  • If utilization is less than 100%, LP's earn less percent yield than borrowers pay in interest rate percent.

  • Use existing interest rate models or create your own by implementing the IInventoryPoolParams01 interface.

Last updated