Nomial Docs
  • Concepts
    • What is Nomial
    • Why use Nomial
  • Protocol
    • Architecture Overview
  • Smart Contracts
  • Loan Process
  • Interest Rate Model
  • Solvers
    • Take out a loan
  • View loan status
  • Repay a loan
  • Security
    • Security Model Overview
  • Resources
    • Terminology
    • Connect with us
Powered by GitBook
On this page
  • Configurable Rate Models
  • Borrow Rate vs Liquidity Provider Yield
  • Utilization
  • Borrow Rate
  • LP Yield Rate
  • Takeaways

Interest Rate Model

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

PreviousLoan ProcessNextTake out a loan

Last updated 22 days ago

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

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

  • : allows an owner to set interest rates. For V1 deployments, the owner is , which requires an admin address with majority validator sign-off to update interest rate. This allows interest rate updates to happen off-chain using a model dictated by validators.

  • : This models Aave V3’s two-slope utilization based rate behavior. See an example of a two-slope interest rate on the .

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,0≤U≤1U = \frac{B}{B + L}, \quad 0 \le U \le 1U=B+LB​,0≤U≤1
  • If nobody’s borrowing, B=0 ⇒ U=0.

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

Borrow Rate

rborrow(U)=rbase+k×Ur_\mathrm{borrow}(U) = r_\mathrm{base} + k \times U rborrow​(U)=rbase​+k×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 Ursupply​(U)=rborrow​(U)×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.

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

IInventoryPoolParams01.sol
OwnableParams01.sol
InventoryPoolDefaultAccessManager01.sol
UtilizationBasedRateParams01.sol
Aave USDC pool page
UtilizationBasedRateParams01