Links

Market Interest Model Configuration

Interest Rate Model Parameters for Launched Markets
The Silo protocol can manage interest rates differently for every token asset. In other words, the interest model is a a plugin that works on top of every market, enabling the protocol to use different configurations to control the utilization of assets in their respective markets.
A simple example of custom configurations can be exemplified in interest rates increasing faster for volatile assets than that of stable ones.

Reading the Interest Model Configuration for an Asset

Silos are deployed on the blockchain through on-chain votes. Take for example SIP-11. The vote proposes the deployment of CRV Silo with custom settings, including how the borrowing rate of CRV is managed (interest model configuration).
Let's take a look at CRV interest model configuration:
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "4439370878",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
There are three key levels of utilization for the interest rate model:
  • uopt (optimal utilization) = 50%;
  • ucrit (critical utilization) = 90%;
  • ulow (low utilization) = 30%.
To understand the coefficients ki, kcrit, klin, and klow, it is best to convert them to annual interest rate via multiplying by 365*24*3600 (number of seconds in a year). Dividing by 10^18 to account for 18 decimal places, we obtain the following values:
ki = 0.00000462964248;
kcrit = 10;
klow = 3.33333;
klin = 0.14
  • “ki”: If utilization is near the optimal value (i.e., between ulow and ucrit), the interest rate is proportional to the integral of the difference between the current utilization and uopt. Such integrator works all the time, growing or falling depending on whether utilization is above or below the optimal level (uopt). The integrator's rate of change is governed by the coefficient ki = 0.00000462964248 = 0.4/(24*3600). The meaning is: if utilization deviates by X percentage points from uopt, then the integrator term will change by 0.4*X percentage points per day (24*3600 seconds).
  • “kcrit”: If utilization is close to 100% (i.e. above ucrit), the APY is jacked up by the additional term which is proportional to the difference between the current utilization and ucrit. At the first moment of exceeding the critical level of utilization (ucrit), the proportionality factor equals kcrit. For CRV kcrit = 10, so if utilization is X percentage points over ucrit, then the nominal value of the proportional term is 10*X percentage points.
  • “klow”: If utilization is lower than ulow, another additional term appears in the model, which is used to reduce the APY sharply. This term is proportional to the difference between the current utilization and ulow. For CRV the proportionality factor is klow = 3.33333, which means: if utilization is X percentage points under ulow, then the proportional term equals -3.33333*X percentage points. For example, at 0% utilization, the proportional term equals –100 percentage points.
  • “klin”: Borrowing APY can never drop below the lower bound which is proportional to the current utilization. This bound is defined by the proportionality factor klin. In the case of CRV, klin = 0.14, meaning: if utilization is X%, then the lower bound on the borrowing APY is 0.14*X%.
  • “beta”: While kcrit determines the proportional term only at the first moment of exceeding ucrit, the complete formula for the proportionality factor is kcrit*(1+Tcrit). The "time multiplier" Tcrit adds 1 every hour that utilization spends above ucrit. This is seen from the value of beta which equals 1/3600 (3600 seconds make up one hour). So, the value of proportionality factor after 1 hour over the critical level becomes 60, after 2 hours it's 90, etc. As utilization leaves the critical zone, Tcrit starts dropping at the same rate governed by beta.
  • “ri” = 0: The integrator described earlier is initialized to zero.
  • “Tcrit” = 0: The initial value for Tcrit is zero.

Existing Interest Model Configurations

All parameters for the assets that are available in the protocol are compiled in the following table. For convenience, the table shows the values of parameters ci, ccrit, clow, clin, cbeta. Formulas relating these values with ki, kcrit, klow, klin, beta are presented below.
IRM Type
stableLowCap
80%
90%
50%
10%
75%
50%
4%
10%
stableHighCap
80%
90%
60%
10%
75%
50%
4%
10%
volatileOpt50Base1
50%
90%
30%
20%
100%
100%
1%
100%
volatileOpt50Base3
50%
90%
30%
20%
100%
100%
3%
100%
volatileOpt50Base7
50%
90%
30%
20%
100%
100%
7%
100%
volatileOpt50Base15
50%
90%
30%
20%
100%
100%
15%
100%
volatileOpt80Base1
80%
90%
50%
20%
100%
100%
1%
100%
volatileOpt80Base3
80%
90%
50%
20%
100%
100%
3%
100%
volatileOpt80Base7
80%
90%
50%
20%
100%
100%
7%
100%
volatileOpt80Base15
80%
90%
50%
20%
100%
100%
15%
100%
bridgeXAI
80%
90%
50%
10%
75%
50%
4%
10%
bridgeETH
70%
90%
50%
20%
100%
50%
5.75%
100%
defaultAsset
50%
90%
30%
20%
100%
100%
7%
100%

Assets by IRM Type

IRM Type
Assets
stableLowCap
XAI; GUSD; LUSD; MIM; SUSD; TUSD; USDD; USDP
stableHighCap
DAI; FRAX; BUSD; USDC; USDT
volatileOpt50Base1
BADGER; BNT; cbETH; FUN; GNO; IMX; JPEG; KP3R; NFTX; PERP; wNXM
volatileOpt50Base3
AAVE; APE; BIT; CRO; FTT; LDO; LQTY; OCEAN; OHMV2; PAXG; RPL; SPELL; UMA; WOO
volatileOpt50Base7
1INCH; ALCX; AURA; BAL; BAT; COMP; CRV; CVX; DYDX; ENJ; ENS; FARM; FXS; LINK; MANA; MATIC; MKR; QNT; SHIB; SUSHI; UNI; WBTC; wstETH; xSUSHI; YFI; ZRX
volatileOpt50Base15
LOOKs
volatileOpt80Base1
volatileOpt80Base3
RAI
volatileOpt80Base7
volatileOpt80Base15
SNX

List of Parameters

"IRMTypes": {
"defaultAsset": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "4439370878",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"stableLowCap": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "183506",
"kcrit": "237823439878",
"klow": "31709791984",
"klin": "1585489599",
"beta": "27777777777778",
"ri": "0",
"Tcrit": "0"
},
"stableHighCap": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "600000000000000000",
"ki": "183506",
"kcrit": "237823439878",
"klow": "26424826653",
"klin": "1585489599",
"beta": "27777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt50Base1": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "634195840",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt50Base3": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "1902587519",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt50Base7": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "4439370878",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt50Base15": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "146805",
"kcrit": "317097919838",
"klow": "105699306613",
"klin": "9512937595",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt80Base1": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "367011",
"kcrit": "317097919838",
"klow": "63419583968",
"klin": "396372400",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt80Base3": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "367011",
"kcrit": "317097919838",
"klow": "63419583968",
"klin": "1189117199",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt80Base7": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "367011",
"kcrit": "317097919838",
"klow": "63419583968",
"klin": "2774606799",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"volatileOpt80Base15": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "367011",
"kcrit": "317097919838",
"klow": "63419583968",
"klin": "5945585997",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"bridgeXAI": {
"uopt": "800000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "183506",
"kcrit": "237823439878",
"klow": "31709791984",
"klin": "1585489599",
"beta": "27777777777778",
"ri": "0",
"Tcrit": "0"
},
"bridgeETH": {
"uopt": "700000000000000000",
"ucrit": "900000000000000000",
"ulow": "500000000000000000",
"ki": "244674",
"kcrit": "317097919838",
"klow": "31709791984",
"klin": "2604732913",
"beta": "277777777777778",
"ri": "0",
"Tcrit": "0"
},
"fixedXAI2point0": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "0",
"kcrit": "0",
"klow": "0",
"klin": "0",
"beta": "0",
"ri": "634195840",
"Tcrit": "0"
}
"fixedXAI0point1": {
"uopt": "500000000000000000",
"ucrit": "900000000000000000",
"ulow": "300000000000000000",
"ki": "0",
"kcrit": "0",
"klow": "0",
"klin": "0",
"beta": "0",
"ri": "31709792",
"Tcrit": "0"
}
},