Market forces x Interest Rate Models

Borrow Demand -> Utilization -> Borrow rate -> Supply rate

Interest rates in TradFi (traditional finance) are largely set by the central bank, and influenced by factors such as inflation, monetary supply and exchange rates. In contrast, DeFi interest rates are algorithmically determined by the demand for loans and the supply of lenders. This article describes that algorithm. Parts of this article will reference Aave, a leading lending protocol in the EVM space.

In a nutshell, the market demand for loans (borrow demand) determines the level of utilization (U) of the asset, which in turn determines the borrow interest rate. By discounting this borrow rate, we obtain the supply interest rate.

BorrowDemand=>Utilization=>InterestRateborrow=>InterestRatesupplyBorrow Demand => Utilization => InterestRate_{borrow} => InterestRate_{supply}

The relationship between utilization and borrow rates is defined by the lending protocol via their interest rate model. The model dictates how the borrow interest rate would increase with utilization levels, for a specific asset. An example can be seen below, where the higher the utilization (x-axis), the higher the interest rate of the loans. The gap between the light purple and dark purple line is the spread factor.

Typically, the interest rate model is kinked, comprising of two different gradients; one for lower levels of utilization and another for higher levels of utilization. What this means is that for each unit increase in utilization, the corresponding increase in borrow rates is different, depending on where we are on the curve.

This allows the cost of borrowing to be more accurately valued against fluctuating market demand for loans; as opposed to simply charting a constant gradient linear relationship between demand and rates.

Borrowers and Suppliers

The crux of relationship between lenders and borrowers is this:

BorrowInterest=SupplyInterest+Premium Borrow Interest = Supply Interest + Premium

The interest accrued by borrowers is the interest accrued by suppliers, with a premium on the top. The premium essentially is the cost of using the service. This margin could go to the protocol as revenue, accumulated in the treasury or a number of other things, depending on the protocol.

In the case of Aave, the premium goes to the Aave Ecosystem Reserve.

Determining interest rates

Aave's interest rates are determined algorithmically to strike a balance between utilization and protocol solvency. This approach allows the protocol to dynamically adjust interest rates based on supply and demand dynamics, ensuring efficient allocation of liquidity and maintaining the financial stability of the protocol.

This brings us to the concept of Utilization.

Utilization

Utilization (U) is the percentage of a specific asset that is lent out with respect to its total supply.

U=BorrowedTotal Deposits=BorrowedBorrowed+Free DepositsU = \frac{Borrowed }{Total \, Deposits} = \frac{Borrowed}{Borrowed + Free\, Deposits } \\

The level of utilization is a reflection of market demand for borrowing. Utilization in turn determines interest rates.

When the utilization rate is high: (indicative of high demand for borrowing)

  • Borrow and supply interest rates rises

  • Incentivize lenders to supply more assets, disincentivize wanton borrowing

  • Consequently, increasing the available liquidity within the protocol and tempers borrowing demand, leading to an equilibrium point.

On the other hand, if the utilization rate is low: (indicating excess idle liquidity)

  • Borrow and supply rates fall

  • Incentivizes borrowing and disincentivizes lending

  • Consequently, reducing idle liquidity and maximizing the utilization of assets within the protocol.

This dynamic adjustment mechanism ensures that interest rates are reflective of the real-time supply and demand conditions, fostering efficient capital allocation.

Protocol solvency is another critical consideration in determining interest rates algorithmically. (In)solvency would be the ability for a lending protocol to meet its on-going withdrawal demands, given how much of deposits was loaned off. Essentially, we want to avoid a ‘bank run’ - if all the money is loaned out, none of the suppliers can withdraw.

If interest rates were solely determined by market forces without considering the solvency aspect, there could be a risk of instability or insolvency of the protocol. Therefore, the interest rate mechanism aims to maintain a delicate balance between competitiveness in the market and the financial health of the protocol.

Aave v3 complements the interest rate mechanism with borrow caps to manage insolvency risk. These are global limits on the absolute amount an asset can be borrowed.

Borrow Interest Rates

  • Borrow interest rates are a function of Utilization

  • The relationship could be linear or a piecewise function (kinked)

  • Parameters in the function can be set by protocol governance

Aave: Dai Interest rate model

The interest rate function for DAI is a piecewise function with an optimal utilization rate. Beyond this optimal point, the interest rate increases at a faster rate.

Piecewise function

The piecewise function is defined as such:

Rborrow={Rintercept +UUoptimalRslope1,if U≤UoptimalRintercept +Rslope1+U−Uoptimal1−UoptimalRslope2,if U>UoptimalR_{borrow} = \begin{cases} R_{intercept} \,+ \frac{U}{U_{optimal}}R_{slope1}, & \text{if } U \leq U_{optimal} \\ R_{intercept} \,+ R_{slope1} + \frac{U - U_{optimal}}{1-U_{optimal}}R_{slope2}, & \text{if } U > U_{optimal} \end{cases}

The total borrow rate is composed of the rate at zero utilization ( RinterceptR_{intercept}) plus the one or both utilization slopes. If you think about it, the piecewise function is basically two lines following: y=mx+cy = mx + c.

For U≤Uoptimal U \leq U_{optimal}

For U>Uoptimal U > U_{optimal}

Why piecewise, instead of a single linear function?

When utilization exceeds optimal levels, concerns of insolvency become more significant. Hence, the variable borrow interest rate increases at a much higher rate - represented by the steeper gradient.

This would serve to more heavily incentivize suppliers to lend, thereby increasing liquidity, while simultaneously tempering borrowing to restore healthy idle liquidity levels and avoid insolvency.

Combined

Here is the combined graph for the piecewise function, using DAI as an example.

The parameters are as follows:

R_intercept = 0
R_slope1 = 0.04
R_slope2 = 0.75
U_optimal = 0.80

These parameters were obtained from DAI's DefaultReserveInterestRateStrategy contract, and are accurate at time of writing.

Parameters

Each asset has its interest rate parameters stored on-chain via a DefaultReserveInterestRateStrategy contract.

on-chain parameters

From time to time, parameters are modified to better suit market conditions. Proposals to update these parameters are submitted and passed via Aave's governance.

See Gauntlet's proposals on Aave: example

Supply Interest Rate

  • Supply interest rates are dependent on borrow rates.

  • The interest rate provided to depositors is determined by multiplying the borrow rate by the utilization rate.

  • This ensures that the interest earned from borrowers matches the interest paid to depositors, maintaining a balance in the amounts exchanged between the two parties.

Supply interest rate is also referred to as the liquidity rate.

This ensures that the interest earned from borrowers matches the interest paid to depositors, maintaining a balance in the amounts exchanged between the two parties.

Example: assume a lending protocol where the borrow rate is 10% and the utilization rate is 50%. In this case, the interest rate offered to depositors would be:

  • Interest Rate = Borrow Rate * Utilization Rate

  • Interest Rate = 10% * 50%

  • Interest Rate = 5%

Depositors would earn an interest rate of 5% on their deposits. The total interest payment received by depositors would be equivalent to the total interest paid out by borrowers.

While this simple example is useful for our understanding, it ignores the margin we mentioned at the start; the cut that goes to the protocol, which could reflect fees, treasury contribution, etc.

In Aave, supply interest rate is calculated as such:

liquidityRate = overallBorrowRate * supplyUsageRatio * (1 - reserveFactor)

In the later stages, we will get a higher resolution understanding of what overallBorrowRate and the other terms mean, but for now we can understand this as follows:

liquidityRate = borrowRate * UtilizationRate  * (1 - reserveFactor)

Notice the introduction of the reserve factor - it determines the split between what the depositors enjoy versus what flows into Aave's treasury.

The reserve factor is a percentage of protocol interest which goes to the Aave Ecosystem Reserve.

Last updated