Interest Rate Models
Every VToken stores its own interestRateModel() address. Markets on the same network or in the same pool can use different model families and parameters, so never select a model from the network name alone.
The v4.4.0 engine source contains three implementations:
| Model | Curve | Parameters mutable after deployment? |
|---|---|---|
JumpRateModelV2 | one kink | yes, through AccessControlManager |
TwoKinksInterestRateModel | two kinks, signed slopes | no; constructor immutables |
WhitePaperInterestRateModel | one linear slope | no; constructor immutables |
BaseJumpRateModelV2 is not a separate contract in the current source. The old page is retained only to route existing links to JumpRateModelV2.
Units and annualization
Section titled “Units and annualization”The shared interface returns a mantissa-scaled rate per slot. A slot is either a block or one second, according to the deployed model’s isTimeBased() value. Read blocksOrSecondsPerYear() from that same model before annualizing.
nominal annual rate = rate per slot × blocksOrSecondsPerYearDo not assume 2,628,000 blocks/year or 31,536,000 seconds/year globally. In particular, the live BNB Chain and opBNB VToken implementations use different block constants; the engine version map records their current values.
Selecting the model for a market
Section titled “Selecting the model for a market”- Start from the market’s VToken address in the deployed markets registry.
- Read
interestRateModel()from the VToken at the block used by your calculation. - Identify the model bytecode or verified source, then read its clock mode and parameters.
- Preserve the effective block when recording a mutable
JumpRateModelV2parameter set.
The formulas and current ABI below follow the isolated-pools v4.4.0 source.