🎉 New Release: This is a beta release. This is on xrpl testnet for now. Learn More →

September 9, 2026Protocol Deep Dive

Two-Kinks Interest Rate Model: When RheoFi Uses It

RheoFi's whitepaper names a two-kinks interest rate model with two breakpoints and three slopes. The shape, the trade-offs, and when a market earns one.

RheoFi cover illustration for the two-kinks interest rate model guide, showing the RheoFi mascot holding a panel with rising and falling borrow rate percentages

What Is the Two-Kinks Interest Rate Model?

A two-kinks interest rate model prices borrowing across three linear segments split by two utilization breakpoints, KINK_1 and KINK_2. Most money markets instead run a two-slope curve with a single optimal-utilization point, set "typically around 90%" (arXiv curated-credit analysis, December 2025). RheoFi ships the variant as a per-market option.

The shape: three segments, two breakpoints

The curve is piecewise linear in utilization U. Below KINK_1, a gentle slope keeps borrowing cheap while the pool has liquidity to spare. An intermediate slope then takes over between KINK_1 and KINK_2, raising the cost of the marginal loan without triggering the full backstop. Past KINK_2 the steepest slope prices scarcity hard enough that borrowers close positions and suppliers arrive.

Every segment is a straight line, so the model stays cheap to evaluate on-chain. The extra breakpoint changes what the curve can express, not how expensive it is to read.

What RheoFi's whitepaper states about the variant

One sentence in whitepaper v1.0 is the whole published basis: RheoFi "also ships a two-kinks variant (TwoKinksInterestRateModel) with breakpoints KINK_1 < KINK_2, three slope multipliers, and two base rates, used on markets that benefit from a finer slope structure" (whitepaper v1.0, two-kinks disclosure). No breakpoint values, no slopes, no market assignment. Anything beyond the structure named in that sentence is engineering reasoning, not RheoFi disclosure, and this post keeps the two separate.

Why per-market isolation makes a second curve shape possible

Rate models attach to markets, not to the protocol. Because RheoFi runs per-market isolated pools with an independent Comptroller for each pool, one market can run a three-segment curve while its neighbours run the two-segment one. In a shared-liquidity design, a single rate curve serves every asset, so the choice would be protocol-wide. The interest rate model documentation describes the governance-adjustable parameters that make each market its own decision.


Two-Kinks vs Single-Kink: How Do the Curves Differ?

Both models read the same pool state and return a per-slot rate; they differ in the middle, where the two-kinks variant inserts an intermediate slope instead of stepping straight onto the jump slope. Lending protocols hold $50.4B across 639 tracked protocols (DeFiLlama, September 2026). RheoFi treats that second breakpoint as a per-market trade.

Where the two curves are identical

Each model computes utilization the same way, reads the same pool state, and returns a per-slot rate in 18-decimal fixed point. The supply rate then falls out of the borrow rate net of the reserve factor. Neither shape writes storage during a rate read. An integrator calling getBorrowRate(cash, borrows, reserves) cannot tell from the call signature which shape sits behind it.

Structural comparison

PropertySingle-kink jump rate modelTwo-kinks variant
Linear segments23
Breakpoints1 (kink)2 (KINK_1 < KINK_2)
Slope multipliers2 (slope, jump)3
Base rates12
Published RheoFi parametersRepresentative testnet configuration: base 0%, slope 10%/yr, jump 250%/yr, kink 80%, blocksPerYear 63,072,000none published
Behavior above the first breakpointSteps straight onto the jump slopeEnters an intermediate slope before the jump slope
Configuration surfaceSmaller, faster to reason aboutLarger, more tuning and more review
Suited toMarkets where one compromise point is adequateMarkets that benefit from a finer slope structure

The right-hand column carries structure, not values. RheoFi has published no numbers for it.

What the second breakpoint costs

Two extra parameters do not sound expensive until they reach a governance process, where each one needs a defensible starting value, a monitoring story, and a change procedure. The model contract is a separate deployment with its own address, its own review, and its own place in the market's upgrade path. A market that gains nothing from the middle segment pays those costs for a curve that behaves like the simpler one.


Why Do Multi-Breakpoint Rate Curves Matter in 2026?

Multi-breakpoint curves matter because one slope has to serve conditions it was never chosen for, and rate-curve design now governs concentrated capital: the ten largest lending protocols hold 88.5% of a $50.4B category (DeFiLlama, September 2026). RheoFi treats curve shape as a per-market risk parameter.

Static curves under demand that moves faster than governance

Research on adaptive rate setting finds that platforms "rely on static interest rate curves and collateral requirements that struggle to adapt to rapid market changes, leading to inefficiencies in utilization and increased risks of liquidations" (arXiv, October 2024). A later reinforcement-learning study opens from the same premise, that "rule-based interest-rate models struggle to adapt to dynamic market conditions" (arXiv, May 2025). Neither result argues for abandoning rule-based curves. Both point at the same weakness: one slope has to serve conditions it was not chosen for.

Overcollateralization and the cost of a rate that arrives late

Minimum collateralization rates "typically range between 120% and 150% on major lending platforms" (BIS Bulletin 57, June 2022). Buffers that wide exist because liquidation is the fallback when pricing fails to change behavior early enough. Rate curves are the first line of defense and liquidation is the second, so a curve that gives borrowers a warning band before the hard backstop reduces the load on the mechanism with the worst outcomes for users.

What agent-driven borrowing changes

Optimization work on lender wealth models the rate curve as a control problem, targeting "an optimal interest rate model that maximizes the expected lender wealth while incorporating penalties for liquidity risk and interest rate stabilization" (arXiv, February 2025). Automated borrowers react to rate changes in slots, not days. Concentration in curated credit shows the same pattern, with roughly $7.27B of curated TVL split across a handful of entities and the largest holding 27.6% (arXiv, December 2025). Where borrowers are programs, a curve with a graded middle segment produces graded responses instead of one cliff, which is the argument developed in programmable rate curves for agents.


How Does the Two-Kinks Curve Work On-Chain?

The rate function evaluates one branch per utilization band: a gentle slope below KINK_1, an intermediate slope between the breakpoints, and a steep slope above KINK_2. RheoFi's published canon puts its one breakpoint at 80% utilization with a 250%/yr jump multiplier (whitepaper v1.0 rate model section, 2025). Arithmetic below the first breakpoint is unchanged.

The single-kink baseline

Utilization comes from pool state, capped at 1e18:

U = (borrows + badDebt) / (cash + borrows + badDebt - reserves)   // cap 1e18

if U <= k:
    borrowRate = b + (U * m) / 1e18
else:
    normalRate = b + (k * m) / 1e18
    borrowRate = normalRate + ((U - k) * j) / 1e18

Here b is the base rate per slot, m the slope multiplier, j the jump multiplier, and k the kink. That is the exact formulation in whitepaper v1.0, and the protocol math guide walks the same derivation.

Extending to three segments

The block below is this post's reconstruction of how three segments compose. RheoFi has not published TwoKinksInterestRateModel source or getters, so treat it as a reading aid rather than a transcription. Each segment is anchored to where the previous one ended, so with both base rates at zero the curve is continuous across both breakpoints:

if U <= KINK_1:
    borrowRate = base1 + (U * slope1) / 1e18
else if U <= KINK_2:
    rateAtKink1 = base1 + (KINK_1 * slope1) / 1e18
    borrowRate  = rateAtKink1 + ((U - KINK_1) * slope2) / 1e18
else:
    rateAtKink1 = base1 + (KINK_1 * slope1) / 1e18
    rateAtKink2 = base2 + rateAtKink1 + ((KINK_2 - KINK_1) * slope2) / 1e18
    borrowRate  = rateAtKink2 + ((U - KINK_2) * slope3) / 1e18

In the reconstruction above, base2 acts as an offset on the upper region. The whitepaper states that two base rates exist and does not specify how the second one enters the arithmetic, so confirm the arrangement against the getters of whichever model a market deploys before relying on it. At base2 = 0 the three segments join continuously; a non-zero base2 introduces a step at KINK_2. Continuity is therefore a configuration property, not something the arithmetic guarantees on its own, which is why the invariant KINK_1 < KINK_2 matters and why segment-boundary values belong in the test suite.

A worked example

The following figures are an illustrative example chosen to show the arithmetic. They are not a deployed RheoFi configuration, and RheoFi has published no two-kinks parameter set.

Take KINK_1 at 45%, KINK_2 at 80%, slopes of 8%/yr, 20%/yr and 250%/yr, with both base rates at zero. Borrowing computes to 3.6% APY at 45% utilization, 10.6% at 80%, and 60.6% at full utilization. RheoFi's representative testnet configuration computes to 4.5% at 45% utilization, 8% at 80%, and 58% at 100%. Both sets are parameter-derived figures as of September 2026, not observed market rates. The two curves cross at 54% utilization: the three-segment shape is cheaper below that point, dearer from there up to KINK_2, and lands in a similar place at the top.

0% 45% util 80% util 100% 60% APY 0% KINK_1 KINK_2 Single kink (published canon) Two kinks (illustrative only)

Single-kink line uses RheoFi's published testnet calibration. Three-segment line uses illustrative parameters that RheoFi has not deployed.

Per-slot accrual and how the rate reaches suppliers

Rates are computed per slot and annualized with blocksPerYear, which the whitepaper publishes as 63,072,000. Treat that as the rate model's annualization constant rather than as a statement of the chain's block cadence, and confirm the deployed value before you rely on it. Interest accrues lazily inside accrueInterest() at the start of every state-changing call, so the borrow rate a two-kinks market quotes flows to lenders through rToken exchange-rate accrual rather than through balance rebasing. The JumpRateModelV2 reference documents the getter surface both shapes share.

IMPORTANT

While calibrating the single-kink curve on testnet: Jump Rate Model Testnet Parameter Calibration Context: RheoFi selected the opening interest rate parameters for its XRPL EVM testnet markets, the configuration every alternative curve shape is measured against. Finding: Base rate 0%, slope 10% per year below the kink, jump multiplier 250% per year above it, and the kink at 80% utilization, with blocksPerYear set to 63,072,000. Result: The whitepaper presents that four-parameter set as a representative testnet configuration; observed rate-response behavior under live load is still being collected (whitepaper v1.0 testnet parameters).


What Components Does a Two-Kinks Model Contract Need?

Components are the parameter set: two breakpoints, three slope multipliers, and two base rates, on top of the utilization inputs every rate model reads. RheoFi's published single-kink configuration, by contrast, carries one breakpoint at 80% utilization (RheoFi Whitepaper v1.0, 2025). The read interface is identical across both shapes.

Breakpoints, slopes, and the parameters a deployment needs

  1. KINK_1: the lower utilization breakpoint, in 1e18 notation, where the first slope ends.
  2. KINK_2: the upper breakpoint, where the steep segment begins. The invariant KINK_1 < KINK_2 holds by construction in the whitepaper's description.
  3. First slope multiplier: governs cost in the band where the pool has spare liquidity.
  4. Second slope multiplier: governs the intermediate band between the breakpoints.
  5. Third slope multiplier: the jump slope above KINK_2, the liquidity backstop.
  6. First base rate: the intercept applied from zero utilization.
  7. Second base rate: the whitepaper states that a second base rate exists without specifying how it enters the arithmetic.
  8. Utilization inputs: cash, borrows, badDebt and reserves, combined into U and capped at 1e18. The model getter takes the three-argument form; badDebt is folded in at the rToken level before the call.
  9. reserveFactor: the protocol share removed before the supply rate is derived.
  10. blocksPerYear: 63,072,000 on the sidechain, the constant that converts per-slot rates to annualized figures.
  11. Supply-rate derivation: supplyRate = U * borrowRate * (1e18 - reserveFactor), scaled down twice by 1e18.
  12. Deployment identity: RheoFi's naming scheme encodes parameters in the contract name, in the form JumpRateModelV2_base{X}bps_slope{Y}bps_jump{Z}bps_kink{K}bps_bpy{N}.

Unit conventions worth checking twice

Breakpoints and slopes arrive in different units depending on where you read them. The naming scheme uses basis points, the on-chain storage uses 1e18 fixed point, and human-facing documentation uses percentages. A slope of 10%/yr is 0.1e18 in storage and 1000bps in a contract name. Mixing the three is the most common source of a curve that looks correct in a spreadsheet and misprices on-chain.

How a deployed model is identified

Because the parameters live in the contract name, reading a market's rate model address and resolving its name tells you the shape and the configuration before you read a single storage slot. Should a two-kinks market be deployed, expect the identifier to carry both breakpoints. Treat the name as a label, then confirm against the getters, because names are set at deployment and getters are the state.

Rate curves are a per-market decision, not a protocol default

RheoFi runs isolated pools with an independent Comptroller and rate model per market, so curve shape is chosen market by market rather than imposed protocol-wide.

Open the testnet app to read live utilization and borrow rates on deployed markets before you model your own position.

The isolated-pool codebase RheoFi builds on carries 15 prior security engagements across six firms, with a RheoFi-specific mainnet audit planned.

Launch App → | Read the Docs →


How to Evaluate a Two-Kinks Market Before You Integrate

Evaluation starts by reading the deployed model off the market rather than assuming a shape from documentation, then plotting the curve across the full utilization domain. Integrators arrive on a sidechain linked to 6M+ wallet holders and over 25 validator companies (Ripple, June 2025). RheoFi publishes each market model address for that reason.

Reading the model off a market

No RheoFi market currently runs a published two-kinks configuration, so this procedure is written to apply to whichever shape the market you integrate against turns out to use. Contract addresses and the getter surface are published in the contracts overview. Resolve the rate model from the market, then query it. Nine steps cover an evaluation that ends in a testnet integration:

  1. Resolve the market's interest rate model address from the rToken contract.
  2. Read the model's parameters: breakpoints, slopes, and base rates.
  3. Confirm the breakpoint ordering invariant holds on whatever values the deployed model returns.
  4. Plot the curve across the full utilization domain, not only at current utilization.
  5. Evaluate the rate at each breakpoint and at one step either side, where rounding lives.
  6. Convert per-slot rates to annualized figures using blocksPerYear of 63,072,000.
  7. Model your own position at the utilization your borrowing would create, not at today's.
  8. Trace the supply-rate path through the reserve factor to confirm lender economics.
  9. Run the whole flow on testnet before mainnet, following the Solidity integration guide.

What to instrument once live

Track utilization against both breakpoints separately. A position that is comfortable at 60% utilization on a single-kink market may sit inside the intermediate band on a two-kinks market and accrue at a different rate for the same pool conditions. Poll intervals tuned for 12-second chains read stale state here, a point covered in XRPL EVM developer onboarding. Alert on breakpoint proximity rather than on rate thresholds, because the breakpoint is where the derivative changes.


What Are the Risks and Security Gaps in Two-Kink Models?

Misconfiguration and fixed-point rounding at segment boundaries are the real gaps, not reverts: a rate model fails by being wrong. Protocol logic exploits accounted for 89% of DeFi protocol losses in 2025, with median loss per incident falling to $1.5M from $6M in 2022 (Immunefi, April 2026). RheoFi adds a breakpoint only where market behavior justifies the review surface.

More parameters, more misconfiguration surface

A rate model rarely fails by reverting. It fails by being wrong: a breakpoint set where utilization never reaches it, a middle slope so gentle that the curve behaves like a single-kink model with extra gas, or a jump slope that starts too late to defend redeemability. None of those raise an alert. They show up as a pool that sits at high utilization while suppliers wait to redeem.

Fixed-point rounding at segment boundaries

Every segment transition multiplies a utilization delta by a slope and divides by 1e18. Two separate rounding questions arise. Branch selection is decided by the comparison against the breakpoint, so it is rounding inside the utilization computation that can move U across KINK_2 and change which segment applies. Rounding inside the rate arithmetic changes the amount, not the branch. Audited fixed-point libraries make the direction explicit rather than implicit, exposing Floor, Ceil, Trunc and Expand as a Rounding enum on their multiply-divide helpers (OpenZeppelin Contracts v5.4.0, Math.sol). Test at the breakpoints, one step below, and one step above.

What the audit lineage covers

RheoFi's codebase carries 15 prior security engagements across PeckShield, Hacken, Certik, Quantstamp, FairyProof, and Pessimistic, covering the isolated-pool core, comptroller, risk fund, shortfall auction, and interest accrual. Those engagements cover the inherited codebase rather than RheoFi's own build, and a RheoFi-specific mainnet audit is planned. RheoFi is pre-mainnet: every market referenced here is a testnet deployment, and parameters may change before mainnet. The 15-audit lineage and the risk management framework set out what that inheritance does and does not establish.

IMPORTANT

From the whitepaper's contract inventory disclosure: Whitepaper v1.0 Publication Context: RheoFi published whitepaper v1.0 documenting the money-market architecture for the sidechain, including the rate-model contracts available to each isolated market. Finding: The disclosure names the two-kinks variant alongside the single-kink model, and discloses an inherited audit lineage of 15 engagements across six named firms covering the isolated-pool core and interest accrual. Result: Both curve shapes sit inside the same inherited review surface, and no two-kinks parameter set has been published for any market (whitepaper v1.0 contract inventory).


How Does the Regulatory and Compliance Framework Apply?

Regulation reaches algorithmic rate setting through disclosure and governance duties rather than rate caps. Illicit addresses received at least $154 billion in crypto during 2025, a 162% rise, while the illicit share of attributed volume stayed below 1% (Chainalysis, January 2026). RheoFi treats curve transparency as an evidenced control.

Disclosure duties around algorithmically set borrowing costs

Regulation (EU) 2023/1114, the Markets in Crypto-Assets Regulation, entered into force on 29 June 2023 and has applied to crypto-asset service providers since 30 December 2024 (EUR-Lex, Regulation (EU) 2023/1114). Its disclosure obligations turn on whether a service is provided by an identifiable undertaking. Where a rate is set by an immutable on-chain function rather than a discretionary desk, the disclosure question becomes whether the parameters and the curve shape are published in a form a user can verify. Publishing the model contract address, its parameters, and the resulting curve is the practical answer.

International supervisory framing

The Financial Stability Board published its global regulatory framework for crypto-asset activities on 17 July 2023, structured as two sets of recommendations aimed at making crypto-asset activities "subject to consistent and comprehensive regulation, commensurate to the risks they pose" (FSB, July 2023). Rate-setting logic sits inside that perimeter as governance and risk management, which is where a documented per-market parameter process matters more than the curve shape itself.

Compliance Corner

Regulation (EU) 2023/1114 (MiCA), in force 29 June 2023, applicable to crypto-asset service providers from 30 December 2024. Relevance: disclosure and governance expectations for published borrowing terms.

FSB Global Regulatory Framework for Crypto-asset Activities, published 17 July 2023. Relevance: supervisory expectations on governance and risk management for crypto-asset activities, including parameter-change processes.

Neither instrument prescribes a rate-curve shape. Both bear on whether parameters, their changes, and their effects are documented and verifiable.


Conclusion: When RheoFi Would Ship a Second Kink

RheoFi would ship a second kink when a specific market shows sustained utilization in the middle band that one slope prices badly. The sidechain carries $0.03M in tracked TVL as of September 2026 (DeFiLlama XRPL EVM chain page, September 2026), early enough that market behavior is still being observed rather than fitted.

The three conditions that would justify it

A market earns a second breakpoint when observed utilization spends real time in a middle band that one slope prices badly, when borrower response to the current jump is either too slow or too abrupt, and when the parameters can be defended with data rather than intuition. Absent those, the extra tuning and review surface buys nothing. Read the interest rate model documentation for the parameters governance can adjust today, and model your own position against live testnet markets before mainnet.

References

  1. arXiv curated-credit analysis, December 2025 · arXiv curated-credit analysis
  2. whitepaper v1.0, two-kinks disclosure · whitepaper v1.0
  3. DeFiLlama, September 2026 · DeFiLlama
  4. arXiv, October 2024 · arXiv
  5. arXiv, May 2025 · arXiv
  6. BIS Bulletin 57, June 2022 · BIS Bulletin 57
  7. arXiv, February 2025 · arXiv
  8. Ripple, June 2025 · Ripple
  9. Immunefi, April 2026 · Immunefi
  10. OpenZeppelin Contracts v5.4.0, Math.sol · OpenZeppelin Contracts v5.4.0
  11. Chainalysis, January 2026 · Chainalysis
  12. EUR-Lex, Regulation (EU) 2023/1114 · EUR-Lex
  13. FSB, July 2023 · FSB
  14. DeFiLlama XRPL EVM chain page, September 2026 · DeFiLlama XRPL EVM chain page

FAQs

A two-kinks interest rate model prices borrowing along three linear segments separated by two utilization breakpoints, written KINK_1 and KINK_2. Below the first breakpoint borrowing stays cheap, between the two breakpoints the rate climbs on an intermediate slope, and above the second breakpoint a steep jump slope defends remaining liquidity. A single-kink model has one breakpoint and two segments.