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.

In short: You want to change Sovryn’s iDOC lending settings so borrowing becomes much cheaper and margin traders need to lock up less upfront interest, while still discouraging the pool from being over-borrowed?

1 Like