A framework for designing interest rate models

Building on the ideas in Stablecoins are the center of the universe, here are some thoughts on building a framework for designing our interest rate models.

First, lets consider the incentives of borrowers and suppliers, in a global market of competing lending protocols:

  • Borrower incentives are mainly determined by the interest rate model, as it defines the borrower APY as a function of utilization.

  • Supplier incentives are determined by the combination of the interest rate model and the reserve factor, but have a double sensitivity to utilization rate because (1) utilization determines the borrower interest rate on which the supplier rate depends, and (2) utilization directly scales the portion of total borrower interest paid to a given supplier.

To make the protocol attractive to stablecoin suppliers, who seek yield, it is crucial to incentivize a high utilization rate in stablecoin markets. With a high utilization rate, borrower interest is spread across fewer suppliers, squeezing the borrow and supply rates together, which is good for both. We should choose an interest rate model that drives stablecoin borrowing up to as high a utilization as possible, while still preserving a small buffer of liquidity for suppliers who want to withdraw. This is why Compound has chosen models that have low interest rates below the “ideal utilization” value of ~90% (to drive borrowing and utilization up), and rapidly increasing rates near full utilization (to drive both sides to add liquidity back into the system). The “kink” in these models is chosen to occur with a borrower rate that is judged to be competitive in the global market.

For volatile assets, supplied as collateral by borrowers of other assets, the suppliers care little about the supply rate. So we don’t need to drive utilization up. Therefore, the interest rate model can start at a higher level even at low utilization, comparable to what we think the smaller market of borrowers will tolerate. In this case, the “ideal utilization” is closer to 0%, as low utilization reduces the risk to suppliers of black swan protocol insolvency.

We’d like the protocol to gracefully adjust on its own to changes in the global market. That’s the motivation for creating an interest rate model rather than setting rates directly. We have many choices for inputs to the model, but choosing utilization rate is attractive because:

  • it is simple

  • it is a quantity that we have a definite opinion of its ideal value (e.g., ~90% for stablecoins)

  • it is a natural measure of the protocol’s competitive position as seen by borrowers

As governors of the protocol, we have two main numbers to choose:

  • For stablecoins, what should the borrower interest rate be near our ideal utilization rate?

  • For volatiles, what should the borrower interest rate be near zero utilization?

Today, a global market stablecoin borrower interest rate is in the 3-8% range. So today it makes sense to choose model parameters with a borrower interest rate in this range at the ideal utilization rate of ~90%. However, it’s possible that a few months from now the global market may look more like 10-15%. To adapt to such a market change, we can either rely on the shape of interest rate model or update the interest rate model parameters. Relying on the shape most of the time seems better, and this suggests a smoothly bending curve instead of a hard kink. A smooth curve would also let us use the same model parameters for all the stablecoins, allowing the protocol to naturally accommodate differences in global market borrowing rates for different stablecoins.

I suggest a stablecoin interest rate curve with an ideal utilization range of 85-95%, and across this range the borrower interest rate would vary from somewhat below today’s global market rates at 85% to somewhat above them at 95%. Then each stablecoin market would naturally adjust its utilization rate so that the borrower rate is close to the global market (otherwise there are yield arbitrage opportunities). Such a curve could stay in service as long as global borrower rates remain anywhere within the range we have chosen for the 85-95% window.


I agree with keeping the utilization rate close to the lower area of the range (maybe not too close to 0% to stay competitive, 20-30% seems healthy for most of the alts, except for non-liquid ones). However i think that not all stablecoins are equal in this and i would have 2 or even 3 buckets for them:

  • 85-95% as you put, but for USDC and TUSD,
  • somewhere around 80-85% for DAI, USDT, BUSD
  • 75-80% for sUSD

My motivation here, as you can tell, is less based on liquidity, but rather the safeness of the peg, as for stablecoins IMO an exogenous event seems to be much more of an issue at stress times, rather than the overall market liquidity. Maybe it’s just my layman’s interpretation, so in no way am i insisting on it.

Also, i agree that we need to have a rather flexible approach, so i suggest we create a risk-management team to asses the markets on an on-going basis (@pyggie, @Bluecrypt and @brisket so far seem to be the most active on that front out of @moderators but maybe other community members would be interested in doing it as well)

Finally, we need to focus on building the Liquidator Portal as originally proposed by @brisket if i’m not mistaken, as soon as the money market is back up and running. Welcome everyone to review the working doc for it here (along with other, minor UI/UX improvements), before we put the finalised proposals to Github: https://docs.google.com/document/u/1/d/1meS8adyZfLfhifn4kBwYm4hsiLWhyPChR2oyEGaHXPk/edit?usp=sharing

Utilization is a function of the borrow, and supply, there could 5 suppliers or 1000 suppliers, so high utilization doesn’t necessary mean fewer suppliers.
At higher utilization, the borrow rates are higher,and the distribution of this amount is higher to the suppliers.

The optimal utilisation rates used by Compound is not set fix to 90%, but it is a parameter of the interest model.
Aave did introduce the Optimal utilization factor as 90% initially biut has been using a parameter per market, just like Compound.

We do have an interest model, using a set of paremeters.
What do you refer to as ‘setting rates directly’

The interest rates at the optimal utilization rates:, and beyond:

You suggest a interest model, that curves, and ‘expontentially’ rises at the optimal utilization rather that 2 linear rates?

Bluecrypt - I agree with all you said. I didn’t explain myself well.

When I mean “setting rates directly”, I mean a governance process that monitors the global market and then makes changes to the interest rate model or its parameters that target a specific borrowing rate. Of course, this must always happen to some degree. I was suggesting that some models require less intervention than others, because they can naturally accommodate a wider range of market conditions.

In particular, I am not fond of models with hard kinks, as these express a definite opinion on the optimal borrowing rate. That opinion may become out of date quickly. I recommend a model that is smooth through the transition zone from the two extremes of “utilization is probably too low, we should encourage borrowing” and “utilization is probably too high, we should discourage borrowing and encourage supplying”.

A good model would have an acceptable utilization rate across the range of borrowing rates that we anticipate being probable over the near-to-mid term. An “acceptable utilization rate” is one where we feel that it is high enough to encourage suppliers to use the protocol for yield (>85% perhaps), but low enough that there is some liquidity for withdrawals (<95% perhaps). So at both extremes of the range of expected borrowing rates we should be happy with the corresponding utilization rate.

Part of my thinking is that borrowing rates are set by the global market of competing protocols and are an input to our system. We shouldn’t fight against the market forces setting borrowing rates. We should design our system to adapt to a prevailing borrowing rate in a way that maintains competitive values for dependent quantities such as the supply rate.

Thank you @pyggie for elaborating more on the idea.

From what I understand from above, is that you are in favour of a curve adjustable to market condition / utilization.

Instead of having utilization = x% means (linearly) y% borrow rate, you’d rather see it is adjust if market stays at utilization x% (and borrow rate y%) for a period of time/blocks (stagnation).
This adds another dimension to the formula = time.

In this case, the rate at x% utilization, should drop from y% to an interest rate z%, which is more appealing for extra borrows.

(same to happen on the other higher side of the utilization)

I think the whole interest model is something we have to calculate and determine the mathematic formula that takes care of different parameters, but at the same time, this should be something for mid term (3-6 months).

For the immediate start, I’d suggest we should start with just linear models with kinks, lower than our competitors.

I have all the interest rates for the stables here, so we can discuss what parameters we could apply right away.

Do you think we should consider introducing a risk assessment framework later or just copy whatever Comp/Aave have and be slightly more competitive here?

For alts, especially the ones not listed anywhere else, we could probably be just more conservative then, if looking at competitors becomes the general approach.

We could consider both, just go with a working model, i.e. linear, for now, with better factors, and work out a different framework at a later stage.

In essence, we could take the best of the rates available across the available protocols and do give better interest rates to borrow, like I suggested like -10% to 15% should be enough in my opinion.

I’m in support of your immediate solution :+1: Need to settle on it and implement quickly.

visual charts

I agree with the proposed near-term plan of piecewise-linear, with competitive settings slightly better than other protocols.

In my ideas above, I wasn’t necessarily proposing a time-varying curve. My main point is that an unchanging smooth curve can accommodate a wider range of market conditions than a kinked linear curve, so long as we are tolerant of some range in utilization rates around the ideal point. That means less need for intervention by governance (e.g., to move the kink point).

1 Like

Doing a 85% of the lowest across markets, this is a proposal.

The yellow line represents Compound with DAI, USD, USDT all same values/

As mentioned, earlier it looks like Compound is not using the time per block following the Ethereum block times, which is average 13.4 seconds, but instead has a hard value number of blocks per year = 2102400 or 15 seconds per block

I have added the same chart (pink one) with a 13.4 seconds per block.

This means:

  • base rate = 0 at 0% utilization
  • first slope or multiplier = 0,042 (instead of 0,05)
  • second slope (after 80% utilization) = 0,93 (instead of 1,09)

For information Aave starts at 1% borrow rate.

1 Like

@Bluecrypt why did you choose 85% of the lowest rate, rather than say 90% or 95% ? would it make the difference more clearly visible?

I’d rather we keep a bit of space to move lower in the future if needed (given that we’re also incentivising with PCT). So maybe start with a 95% or 90% of the slope.

Also, what about other tokens? isn’t it different for ETH, alt “blue chips” and the rest of them on these other platforms?

@Bluecrypt @pyggie BTW have you seen this: https://twitter.com/bneiluj/status/1321405064561524736?s=20

Something may blow up there quickly… :eyes:

Attached is the calculation of the stable coins, compared to Compound and Aave.
I suggest we group DAI/USDC/USDT and then SUSD/BUSD/TUSD in 2 separate interest models

I have added a 0,95 and 0,90 from Compound which is less than Aave.

For ETH, WBTC, YFI, LINK, SNX, MKR looks like Aave has better borrow rates, so I’ll work from there.

Please have a look and let’s discuss.

@Bluecrypt thank you!

i agree with the grouping you propose. Suggest we go with 0,9 off Compound rates. Looks good, IMO

@moderators thoughts?

I am up to speed now thanks to Bluecrypt, one thing to keep in mind is that we need one InterestRateModel contract for each group of tokens. Currently we have one contract which means all tokens have to use that same model. Deploying new contracts shouldn’t be difficult however, just an upfront cost. I’m happy to implement this when we agree on what we want done.

Given that the calculations across all smart contracts (bar the DAI one) use same functions, basically either baseRate+multiplierutilization, or baseRate+jumperutilization (after the kink or optimal utilization ratio), I’d say we could use one and same model and duplicate the smart contracts and assign accordingly, based on the set of parameters in attached sheet.

Please do have a look at it and review, to make sure all is correct.

1 Like

Some technical details, I will be making 3 changes to the new contracts I will deploy:
a) set blocksPerYear to 2337550 (13.5 second block time)
b) add updateBlocksPerYear function so we can change this whenever
c) make the contract Ownable so we can transfer ownership when needed (the old JumpRateModelV2 contract is not transferable, so it will always be owned by the 48h timelock)

You may take a 2336000 value being (60/13,5) x 60 x 24 x 365 as this is what I have worked from

I have updated the googlesheet

It has 2 worksheets:

  • Parameters per asset
  • borrowRates per asset, compared to Compound and Aave

Please review and make sure it all ties up nicely, and I have not made any mistake.

These will be the parameters that will be loaded, if agreed upon.

Updated with APY (yellow columns)

1 Like