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:
-
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.
-
Reduced margin upfront cost. Lowering
maxScaleRatefrom 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].owedPerDayat 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 — seeLoanClosingsRollover.rollover), the rate is recomputed viaILoanPool(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. -
liquidationIncentivePercentis 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
setDemandCurvecall 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;setDemandCurveis gated byonlyAdmin = 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.