SIP-00xx: iDOC Demand-Curve Adjustment


SIP: ‘0092’

Title: iDOC Demand-Curve Adjustment
Author: Edan Yago (@YagoBit)
Status: Draft
Track: Contract
Created: 2026-05-13

SIP-0092: iDOC Demand-Curve Adjustment

Summary

This SIP proposes a single-transaction reparameterisation of the iDOC lending pool’s interest-rate demand curve. The change lowers mid-range borrow APR to be competitive with comparable RSK lending markets (notably Tropykus’ cDOC pool), raises the utilisation kink from 75% to 90%, and lowers the asymptotic maximum APR from 150% to 30%. A side benefit, mechanical to the same parameter, is that upfront prepaid-interest reservation on 28-day margin positions falls from ~11.5% of principal to ~2.3%.

The change is reversible by a follow-up setDemandCurve call. It does not retroactively reprice any open loan: rates are locked at loan-open time and remain unchanged for the life of a position — until that position closes or is rolled over at end-of-term. On rollover (an end-of-term extension performed by a watcher), the new curve applies to the next term. Practically, the active borrower base migrates to the new curve over roughly one loan-term cycle (~28 days), without any retroactive repricing.

Background

The iDOC pool (0xd8D25f03EBbA94E15Df2eD4d6D38276B595593c1) accepts deposits of DOC (Money-on-Chain’s bitcoin-backed stablecoin) from suppliers and lends DOC to borrowers, both for spot fixed-term loans (Torque) and as funding for margin-trading positions on the Sovryn protocol. Its current borrow-rate curve (queried from RSK mainnet at the time of drafting) is:

Parameter Current value
baseRate 6e18 (6% APR)
rateMultiplier 15e18 (15% slope below kink)
lowUtilBaseRate 6e18 (mirror)
lowUtilRateMultiplier 15e18 (mirror)
targetLevel 0 (low-util branch disabled)
kinkLevel 75e18 (75% utilisation kink)
maxScaleRate 150e18 (150% APR asymptote)

At the typical operating utilisation of 60–70%, this produces borrow APRs around 15–17%, which is roughly 2× the equivalent rate on Tropykus’ cDOC pool (a Compound-v2-derived market lending the same DOC underlying on the same chain, with multiplierPerBlock ≈ 11% APR and kink at 95%). Above iDOC’s 75% kink, the curve rises sharply to a 150% asymptote — a strong deterrent designed to prevent the pool from parking at 100% utilisation, but a number that has never been touched in practice and that contributes to perception that iDOC is expensive.

The maxScaleRate value (150% APR) also has a second mechanical role beyond setting the curve’s asymptote: when a 28-day margin position is opened, the protocol prepays worst-case interest equal to maxScaleRate × 28 / 365 of the principal as a withholding amount, refunded to the borrower at close based on the actual realised rate. At 150% APR this means roughly 11.5% of every margin position’s principal is locked at open time as interest reservation — a meaningful collateral cost independent of the borrow rate itself.

Motivation

Two effects, both within a single setDemandCurve call:

  1. Mid-range competitiveness. Lower mid-range borrow APR to within ~1 percentage point of Tropykus across the entire 0–90% operating range, improving iDOC’s UX as a passive-lending product without abandoning the high-utilisation deterrent that protects supplier liquidity.

  2. Reduced margin upfront cost. Lowering maxScaleRate from 150% to 30% reduces upfront prepaid-interest withholding on 28-day margin positions from ~11.5% of principal to ~2.3%, a direct collateral-efficiency gain for every new leveraged trader, independent of the rate the position actually pays.

Proposed Changes

A single transaction from the iDOC contract admin (TimelockAdmin, controlled by GovernorAdmin):

LoanToken_iDOC.setDemandCurve(
    baseRate              = 2e18,    //  2 % APR floor
    rateMultiplier        = 10e18,   // 10 % slope below kink
    lowUtilBaseRate       = 2e18,    // mirror
    lowUtilRateMultiplier = 10e18,   // mirror
    targetLevel           = 0,       // unchanged (low-util branch disabled)
    kinkLevel             = 90e18,   // 90 % utilisation kink (was 75 %)
    maxScaleRate          = 30e18    // 30 % APR asymptote (was 150 %)
)

Resulting Borrow APR vs. utilisation

Utilisation Current iDOC Proposed iDOC Tropykus cDOC (reference)
50% 13.50% 7.00% 6.74%
65% 15.75% 8.50% 8.38%
75% 17.25% 9.50% 9.48%
80% 43.80% 10.00% 10.03%
90% 96.90% 11.00% 11.12%
95% 123.45% 20.50% 11.67%
100% 150.00% 30.00% ~15.17%

The proposed curve tracks Tropykus within ~1 percentage point across the entire 0–90% operating range. Above the new 90% kink it diverges sharply upward to retain a real deterrent against parking the pool at maximum utilisation — at 100% utilisation the proposed cap of 30% APR is still 2× Tropykus’ effective cap, which is enough to keep rate-sensitive margin borrowers willing to repay rather than pay the cap rate.

Effect on margin position upfront interest reservation

Quantity Current (maxScaleRate = 150%) Proposed (maxScaleRate = 30%)
Upfront interest withheld on a 28-day margin position 11.51% of principal 2.30% of principal
Refunded at close based on actual realised rate Yes Yes (same mechanism)

This is a mechanical change driven by the same maxScaleRate parameter that sets the curve’s asymptote.

Risks

Risks introduced

  • Reduced auto-recapitalisation in stress. Under the current curve, a 95% utilisation episode produces a supply APR around 90%+, which is what historically draws emergency supplier capital into a stressed pool. Under the proposed curve, supply APR at the same utilisation is ~15.5%. Suppliers must be motivated by something other than spiked yield (risk tolerance, dApp UI alerts, dedicated liquidity programmes).

  • Cheaper leverage during high utilisation. Because the iDOC pool funds both passive lending and margin positions, a flatter curve means leverage gets cheaper precisely when the pool is most strained.

  • Lower passive supplier yield in normal markets. Mid-range supply APR drops roughly 3 percentage points (~7.6% → ~4.1% at 65% utilisation). May discourage TVL growth from yield-sensitive suppliers.

Risk mitigants

  • Fixed 28-day term-loan structure. Sovryn’s iDOC issues fixed-term loans, not open-ended Compound-style borrows. Existing positions mature within at most four weeks, and any utilisation spike is naturally bounded in duration regardless of curve shape.

  • Existing loans keep their locked rate until close or rollover, whichever comes first. Interest rates are written to loanInterest[loanId].owedPerDay at loan-open time and are not retroactively repriced by a curve change. A borrower who repays before the 28-day term ends is entirely unaffected. When a fixed-term position reaches end-of-term and is rolled over (an end-of-term extension by a watcher in exchange for a small fee rebate — see LoanClosingsRollover.rollover), the rate is recomputed via ILoanPool(lender).borrowInterestRate() and overwrites the previously locked rate. Within ~28 days of execution the active borrower base will have fully migrated to the new curve via natural rollovers; nothing the SIP itself does touches an existing position.

  • liquidationIncentivePercent is unchanged at 5%. Sovryn’s protocol-wide liquidation incentive (5%) remains below Tropykus’ (6%), preserving Sovryn’s structural advantage on liquidation cost.

  • Cap retained, not removed. The proposed 30% maxScaleRate is roughly 2× Tropykus’ effective cap. It is a meaningful deterrent against parking the pool at 100% utilisation, just calibrated more tightly than the current 150%.

  • Fully reversible. A second setDemandCurve call by the same admin restores prior parameters. Existing positions opened under the new curve keep their locked rates; future positions revert to old rates.

Comparable historical events worth considering

During the March 2023 SVB-driven USDC depeg, Compound v2’s cUSDC pool — which uses a Compound-style jump-rate curve similar to Tropykus’ — saw utilisation pinned at ~100% for roughly 24 hours as suppliers fled and borrowers rushed in. Withdrawals were blocked during this window; the steep jump rate eventually attracted emergency supply that re-liquefied the pool. A softer cap (the Tropykus-style ~15% asymptote) would have extended that lockup window.

The proposed iDOC curve sits between Tropykus’ soft cap and Sovryn’s current steep cap. A Sovryn equivalent stress event — a sharp BTC drawdown that drives margin shorts against DOC — would, under the proposed curve, price new borrows at 28–30% APR at 99–100% utilisation. This is uncomfortable but not prohibitive for a short collecting a 20–30% directional move.

Implementation

A single transaction submitted via GovernorAdmin:

  • Target: iDOC address 0xd8D25f03EBbA94E15Df2eD4d6D38276B595593c1
  • Signature: setDemandCurve(uint256,uint256,uint256,uint256,uint256,uint256,uint256)
  • Values: (2e18, 10e18, 2e18, 10e18, 0, 90e18, 30e18)
  • Governor: GovernorAdmin (iDOC.admin() is TimelockAdmin, which is the timelock backing GovernorAdmin; setDemandCurve is gated by onlyAdmin = isOwner() || msg.sender == admin)

Reversibility

If post-deployment monitoring indicates the change is net negative — for example significant supplier outflow, extended high-utilisation episodes, or material complaints about withdrawal latency — a follow-up setDemandCurve call restores the previous parameters. Concretely, the revert call would be:

LoanToken_iDOC.setDemandCurve(6e18, 15e18, 6e18, 15e18, 0, 75e18, 150e18)

License

Copyright and related rights waived via CC0.

1 Like

On April 27, 2026, Tropykus Finance announced its closure.
Deposits and loans were suspended.

Be careful out there… listen to what @Brianna says.

1 Like