Parameters
Every parameter and total the Math pages use, per market, as read on mainnet with the block each was read at, and the illustrative inputs of the worked examples.
Every live value the Math pages use, as read on mainnet, with the block it was read at. Further down are the illustrative inputs the worked examples share.
Mainnet
As read on mainnet 4663 on 12 October 2026 at block 86868761 (18:00:51 UTC), the day of the deployment (block 86793701). Parameters and totals are from the same block. These are settings, not constants: the protocol owner can change any of them without notice. Re-read the contracts before relying on a number.
Per market
| NVDA / USDG | SPY / USDG | WETH / USDG | |
|---|---|---|---|
LTV (router.ltv) | 60% | 70% | 75% |
| Liquidation threshold (IsHealthy) | 65% | 75% | 80% |
| Liquidation bonus | 8% | 6% | 5% |
liquidationProtocolShare | 0% | 0% | 0% |
| LT × (1 + bonus) — bad-debt line | 0.702 | 0.795 | 0.840 |
| Base / kink / max rate | 0.5% / 8% / 100% | same | same |
| Optimal / max utilisation | 80% / 90% | same | same |
Reserve factor, stored → reserveFactor(router) | 0 → 10% | 0 → 10% | 0 → 10% |
| Creator fee, stored → effective | 1 → off (1e-18) | 1 → off | 1 → off |
| Borrow cap | 0 (uncapped) | 0 | 0 |
windDown | false | false | false |
| Fresh required for borrow / liquidation | yes / yes | yes / yes | yes / yes |
Earn vault cap (markets(pool)) | unlimited (type(uint256).max) | unlimited | unlimited |
Oracle price (TokenDataStream, Fresh) | $226.43 | $781.39 | $2,513.51 |
The rate curve and max utilisation in this table are the launch values; each market has had its own curve, and a max utilisation of 100%, since the Safe's transaction nonce 4.
Market totals
| NVDA / USDG | SPY / USDG | WETH / USDG | |
|---|---|---|---|
totalSupplyAssets | 0.000001 | 0.000001 | 0.000001 |
totalBorrowAssets | 0 | 0 | 0 |
totalReserveAssets | 0 | 0 | 0 |
Borrow APR (calculateBorrowRate) | 0.5% (the base rate, at 0% utilisation) | same | same |
All amounts in USDG. Each market held 1 base unit, supplied by the Earn vault, and nobody had borrowed yet.
Protocol-wide
Protocol borrow fee, USDG (getProtocolFee, stored 0) | 0.1%, paid to the 2-of-4 Safe (factory.protocol()) |
minAmountSupplyLiquidity(USDG) | 0.000001 USDG (1 base unit) |
Adapter maxAgeInSession / maxAgeHard (all four) | 26 hours / 97 hours (93,600 s / 349,200 s) |
TokenDataStream defaultMaxPriceAge | 97 hours (349,200 s) |
| Calendar weekly window | Sat 01:00 → Mon 01:00 UTC (EST basis), autoDst on, 21 holiday closures |
| Admin roles | the protocol Safe (2-of-4) alone since 4 November 2026; a pauser key holds only PAUSER_ROLE on each lending pool (pause, never unpause) |
Close factor closeFactorMinBase() (18 Oct, block 91904058) | $10: a partial liquidation must leave at least $5 of debt and $5 of collateral (net of the protocol's share of the bonus); when reaching the target would leave less, the whole position may go. Target health factor 1.05, whole debt at 0.95 or below — see close factor |
Earn vault
totalAssets() | 0.000003 USDG — the three 1-base-unit market seeds |
totalSupply() | 0.000003 peUSDG (3e12 raw, 18 decimals) |
| Idle USDG | 0 |
| Supply queue | empty — pull allocation |
| Withdraw queue | NVDA → SPY → WETH |
performanceFee | 0 (recipient unset); MAX_PERFORMANCE_FEE 0.5e18 (50%) |
| Deposit cap | 0 (uncapped) |
Every percentage above is stored in WAD, = 100%: 60% is 600000000000000000.
Re-read on 19 October 2026
Re-read at block 92690105 (14:36:43 UTC): every rate, risk, fee, cap and freshness setting above was unchanged (the calendar and the admin roles were not re-read). Oracle prices had moved, as they do.
After the vault-wide utilisation upgrade, 20 October 2026
The upgrade executed from the protocol Safe at block 93416112. Read at block 93419456 (11:33:27 UTC): the rate curve, max utilisation and reserve factor were unchanged on all three markets (0.5% / 8% / 100%, kink 80%, max 90%, stored 0 → 10%). The vault and the markets:
totalAssets() | 2,211.321464 USDG |
| Idle USDG | 2,161.320702 |
totalSupply() | 2,211.320691380952698037 peUSDG |
liquidAssets() | 2,161.320704 USDG |
WETH/USDG totalBorrowAssets / totalSupplyAssets / totalReserveAssets | 50.000840 / 50.000757 / 0.000083 USDG |
| NVDA/USDG, SPY/USDG | the 1-base-unit seed each, no debt |
utilizationTotals() (, , pending interest included) | 50.000843 / 2,211.321464 USDG |
utilization() = utilizationOf(router), every market | 22611294143271555 (2.2611%) |
calculateBorrowRate(router), every market | 7119808825931708 (0.7120%) |
maxBorrowable(), every market | 1,940.188474 USDG |
feeHighWaterMark | 1000000050476191755697597 (1.00000005 USDG per peUSDG) |
SPCX/USDG and TSLA/USDG, 22 October 2026
Two markets listed on 22 October 2026. Read at block 94915008 (06:45:47 UTC), parameters and totals from the same block:
| SPCX / USDG | TSLA / USDG | |
|---|---|---|
LTV (router.ltv) | 45% | 45% |
| Liquidation threshold (IsHealthy) | 50% | 50% |
| Liquidation bonus | 10% | 10% |
liquidationProtocolShare | 0% | 0% |
| LT × (1 + bonus) — bad-debt line | 0.550 | 0.550 |
| Base / kink / max rate | 0.5% / 8% / 100% | same |
| Optimal / max utilisation | 80% / 90% | same |
Reserve factor, stored → reserveFactor(router) | 0 → 10% | 0 → 10% |
| Creator fee, stored → effective | 1 → off (1e-18) | 1 → off |
| Borrow cap | 150,000 USDG (150000000000) | 150,000 USDG |
windDown | false | false |
| Fresh required for borrow / liquidation | yes / yes | yes / yes |
Earn vault cap (markets(pool)) | unlimited (type(uint256).max) | unlimited |
Adapter maxAgeInSession / maxAgeHard | 26 hours / 97 hours, bound to the market calendar | same |
Oracle price (TokenDataStream, Fresh) | $156.15 | $367.68 |
totalSupplyAssets | 100 USDG, the vault's seed | 100 USDG |
totalBorrowAssets / totalReserveAssets | 0 / 0 | 0 / 0 |
The rate curve and max utilisation here are the launch values, since replaced by per-market curves.
At the same block the three launch markets' rate, risk, fee, cap and freshness settings were unchanged, and the vault read:
totalAssets() | 4,480.378347 USDG |
| Idle USDG | 4,230.375971 |
totalSupply() | 4,480.373269917025879913 peUSDG |
liquidAssets() | 4,430.375973 USDG |
| Supply queue | empty — pull allocation |
| Withdraw queue | NVDA → SPY → WETH → SPCX → TSLA |
utilizationTotals() (, , pending interest included) | 50.002633 / 4,480.378347 USDG |
utilization() = utilizationOf(router), every market | 11160356838222154 (1.1160%) |
calculateBorrowRate(router), every market | 6046283453583326 (0.6046%) |
maxBorrowable(), every market | 3,982.337879 USDG — the utilisation limit binds, below either borrow cap |
Per-market rate curves, Safe transaction nonce 4
The protocol Safe (transaction nonce 4) called setLendingPoolRateCurve(router, base, rateAtOptimal, optimalU, maxU, maxRate) on the interest rate model once per market. Read at block
96027397 (23 Oct 2026). The last two rows are read at block 97359729 (25 Oct 2026), after the
listing seeds went back to the vault (status), vault utilisation
10890794453828460 (1.0891%):
| Market | Router, the curve's key |
|---|---|
| SPY / USDG | 0x941509541a92273dF49C5a9c0893Ab76a5b8fFca |
| WETH / USDG | 0xeAbd4B57D75dcb74B98E9D86A3AC1D9257C3c02C |
| NVDA / USDG | 0x179e9C347e9e300886FD7F51A3AdadD20E8bAfb0 |
| TSLA / USDG | 0xf0c07E6E8Be33288Df6EdE741ad1361a90FF57Dd |
| SPCX / USDG | 0x87cAB21C1B9f81ABE05F79e19c56FA482A40EF5A |
| SPY / USDG | WETH / USDG | NVDA / USDG | TSLA / USDG | SPCX / USDG | |
|---|---|---|---|---|---|
| Base rate | 0.5% | 0.5% | 1% | 1% | 1.5% |
| Rate at the kink | 6% | 7% | 9% | 12% | 14% |
| Kink (optimal utilisation) | 80% | 80% | 80% | 80% | 80% |
| Max utilisation | 100% | 100% | 100% | 100% | 100% |
| Max rate | 100% | 100% | 100% | 100% | 100% |
Reserve factor, reserveFactor(router) | 10% | 10% | 10% | 10% | 10% |
| Borrow cap | 0 (uncapped) | 0 | 0 | 150,000 USDG | 150,000 USDG |
calculateBorrowRate(router) | 5748742118700706 (0.5749%) | 5884877049373562 (0.5885%) | 11089079445382846 (1.1089%) | 11497484237401413 (1.1497%) | 16701686633410696 (1.6702%) |
maxBorrowable() | 4,541.375475 USDG | 4,541.375475 USDG | 4,541.375475 USDG | 4,541.375475 USDG | 4,541.375475 USDG |
Before it, every market ran the launch curve: 0.5% / 8% / 100%, kink 80%, max utilisation 90%. The reserve factors and borrow caps did not change. Utilisation is still one vault-wide figure every market reads, so at the same utilisation each market now charges its own rate.
MSFT/USDG and AAPL/USDG, 27 October 2026
Two markets listed on 27 October 2026 (MSFT/USDG at block 99090794, AAPL/USDG at block 99091161), both with NVDA/USDG's settings. Read at block 99393260 (16:47:02 UTC):
| MSFT / USDG | AAPL / USDG | |
|---|---|---|
LTV (router.ltv) | 60% | 60% |
| Liquidation threshold (IsHealthy) | 65% | 65% |
| Liquidation bonus | 8% | 8% |
liquidationProtocolShare | 0% | 0% |
| LT × (1 + bonus) — bad-debt line | 0.702 | 0.702 |
| Base / kink rate / kink / max utilisation / max rate | 1% / 9% / 80% / 100% / 100% | same |
Reserve factor, stored → reserveFactor(router) | 0 → 10% | 0 → 10% |
| Creator fee, stored → effective | 1 → off (1e-18) | 1 → off |
| Borrow cap | 0 (uncapped) | 0 |
windDown | false | false |
| Fresh required for borrow / liquidation | yes / yes | yes / yes |
Earn vault cap (markets(pool)) | unlimited (type(uint256).max) | unlimited |
Adapter maxAgeInSession / maxAgeHard | 26 hours / 97 hours, bound to the market calendar | same |
Oracle price (TokenDataStream, Fresh) | $534.86 | $346.83 |
calculateBorrowRate(router) | 11089143389562440 (1.1089%), at vault utilisation 1.0891% | same |
QQQ/USDG, GOOGL/USDG and AMD/USDG, 13 November 2026
Three markets listed on 13 November 2026 by one protocol Safe transaction (Safe nonce 17, block 113188124). Read at block 113204091 (08:06:21 UTC):
| QQQ / USDG | GOOGL / USDG | AMD / USDG | |
|---|---|---|---|
LTV (router.ltv) | 65% | 60% | 45% |
| Liquidation threshold (IsHealthy) | 70% | 65% | 50% |
| Liquidation bonus | 7% | 8% | 10% |
liquidationProtocolShare | 0% | 0% | 0% |
| LT × (1 + bonus) — bad-debt line | 0.749 | 0.702 | 0.550 |
| Base / kink rate / kink | 0.5% / 7% / 80% | 1% / 9% / 80% | 1.5% / 14% / 80% |
| Max utilisation / max rate | 100% / 100% | same | same |
Reserve factor, stored → reserveFactor(router) | 0 → 10% | 0 → 10% | 0 → 10% |
| Creator fee, stored → effective | 1 → off (1e-18) | 1 → off | 1 → off |
| Borrow cap | 0 (uncapped) | 0 | 0 |
windDown | false | false | false |
| Fresh required for borrow / liquidation | yes / yes | yes / yes | yes / yes |
Earn vault cap (markets(pool)) | unlimited (type(uint256).max) | unlimited | unlimited |
Adapter maxAgeInSession / maxAgeHard | 26 hours / 97 hours, bound to the market calendar | same | same |
Oracle price (TokenDataStream, Fresh) | $686.49 | $299.99 | $578.41 |
totalSupplyAssets | 0.000001 USDG, the 1-base-unit seed | 0.000001 USDG | 0.000001 USDG |
totalBorrowAssets / totalReserveAssets | 0 / 0 | 0 / 0 | 0 / 0 |
calculateBorrowRate(router) | 5888520570730766 (0.5889%) | 11093563779360942 (1.1094%) | 16708693405251473 (1.6709%) |
At the same block the vault's utilisation was 10935637793609429 (1.0936%), from utilizationTotals()
of 53.031247 / 4,849.395359 USDG; its withdraw queue was NVDA → SPY → WETH → SPCX → TSLA → MSFT →
AAPL → NVDA LP → SPY LP → QQQ → GOOGL → AMD, its supply queue empty, and maxBorrowable() was
4,796.364111 USDG on all ten markets.
Constants
Fixed in the contracts' source rather than set:
MAX_BORROW_FEE | 10% |
| Year used by the rate model | 31,536,000 s |
MAX_RATE / MAX_RESERVE_FACTOR (rate-model setter bounds) | 1,000% / 50% |
Illustrative inputs
Mainnet's only debt, about 50 USDG on WETH/USDG since 19 October 2026 (read at block 93419456), is too small to show the rounding, so a worked example that needs debt does not use a live market. Those examples use the inputs below instead. The risk parameters and the price are mainnet's; the rate curve is the launch curve every market shared until the per-market curves; the amounts are made up, round, and not a reading of the chain.
| Value | Source | |
|---|---|---|
| Market | NVDA / USDG | |
| LTV / liquidation threshold / bonus | 60% / 65% / 8% | mainnet |
| Rate curve, max utilisation, reserve factor | 0.5% / 8% / 100%, kink 80%; 100%; 10% | launch curve; mainnet's max utilisation and reserve factor |
| NVDA price | $226.43088402 (22643088402) | mainnet, block 86868761 |
| Supply | 100,000 USDG — the vault's only market, no idle USDG, so the vault's | illustrative |
| Borrow assets | 20,010 USDG | illustrative |
| Borrow shares | 20000000000 | illustrative |
| Time since the last accrual | 7 days (604,800 s) | illustrative |
| A Position | 20 NVDA collateral, 2400000000 borrow shares | illustrative |
Addresses for every contract above are on contracts.