Parameters
The complete table of constants, by tier, each marked as fixed at construction, computed by formula, or opened by a dated tier.
Every number in Fyber is one of three things (Rule R-12.7.1, principle P7):
- Fixed — an
immutableorconstantset in the deployment transaction, validated by a constructor assertion, and never changed afterwards by anybody. - Formula — computed on-chain at every read from protocol state, time, or an external reference.
- Dated tier — a frozen table indexed by elapsed time, sometimes gated by an on-chain condition.
There is a fourth category that does not exist: a parameter somebody can set. forge inspect storage-layout is run at deployment to assert that no storage variable holds a risk constant (Rule R-16.5.1).
Values marked [F] were estimated rather than measured when the specification was frozen and are recalibrated before deployment from 28 days of feed logs and 30 days of depth measurements. After deployment there is no correction: freezing the specification is freezing the constants (Rule R-16.5.2).
Tier assignment: Tier 1 is SPY, QQQ, the third ETF and mega caps; Tier 2 is GLD and IWM. Tier 3 does not exist in version 1.
Values marked [P] are the founder working values of 7 September 2026 and are pending confirmation by specification v0.5. They are printed here so the site states one set of numbers, and they are the only figures on this page that a constructor assertion does not yet validate.
Headline values
| Tier 1 | Tier 2 | |
|---|---|---|
| Maximum loan-to-value [P] | 80% | 75% |
| Minimum ratio to borrow, at full confidence [P] | 125% | 133.33% |
| Liquidation threshold, at every hour [P] | 115% | 120% |
| Ceiling on the valuation haircut | 30% | 35% |
| Recognition band, constant | 4% | 6% |
Immunity ratio, MCR / (1 − band) | 119.8% | 127.7% |
| Liquidation bonus, live and open sale | 5% / 2% | 5% / 3% |
| Solvency cushion at the threshold | 6.09% | 10% |
| Interest rate floor | 1.5% | 3% |
| Debt ceiling multiple of measured depth | 4.0× | 2.5× |
Protocol-wide: minimum debt 100 fyUSD, mint fee 7 days of interest, PSM entry fee 0.05%, PSM exit fee 0.20%, PSM cap 30%, redemption fee floor 0.5%, Stability Pool share of interest 90% in regime 1, Closer expiry 365 days.
Per branch, by tier
| Constant | Unit | Tier 1 | Tier 2 | Nature | Formula or derivation |
|---|---|---|---|---|---|
CR_mint [P] | % | 125% | 133.33% | fixed | derived from the loan-to-value ceiling; assert > MCR / (1 − BAND_BASE) |
CR_mint_eff | % | up to 178.6% | up to 205.1% | formula | CR_mint / (1 − h); assert the ceiling ≤ 250 (tier 1), ≤ 310 (tier 2) |
MCR [P] | % | 115% | 120% | fixed | assert ≥ 110; the only threshold, no session variant |
CCR (mint freeze) [P] | % | 140% | 145% | fixed | tested on TCR(pRef) without the haircut (decision D80) |
SCR (shutdown) [P] | % | 105% | 110% | fixed | tested on TCR(pLiq) in LIVE |
H_MAX (valuation haircut ceiling) | % | 30 | 35 | fixed [F] | h = H_MAX × (1 − conf) |
U_MAX (uncertainty at zero confidence) | bps | 400 | 600 | fixed [F] | assert ≥ BAND_BASE |
σ_tier (annualised volatility) | % | 20 | 30 | fixed [F] | grows u with √(market time) |
BAND_BASE, constant | % | 4% | 6% | fixed [F] | no widening and no separate ceiling since v0.4 (decision D78) |
DROP_TRIGGER | bps | 200 | 200 | fixed [F] | half the base band; starts the persistence clock |
PERSIST_SINGLE | h | 3 | 3 | fixed [F] | one source alone must hold a fall this long |
COH_MAX (dispersion between pools) | bps | 300 | 300 | fixed [F] | above it, the outlying pool is excluded |
D_REF / D_MIN_POOL | USD | 3 M / 500 k | 2 M / 300 k | fixed [F] | full witness credit / minimum to be a price source |
CR_target after liquidation | % | 126.5% | 138% | formula | MCR × 1.10 (tier 1), × 1.15 (tier 2) |
B_BASE (bonus at full confidence) | % | 5% | 5% | fixed | assert ≤ 15 and < MCR − 100 pts |
B_MIN (open-sale discount, bonus floor) | % | 2% | 3% | fixed | b = B_MIN + (B_BASE − B_MIN) × conf in LIVE |
Bonus adjustment, seizure above 0.5 × / 1.0 × d2 | pt | +2 / +4 | +2 / +4 | fixed [F] | LIVE only |
| Bonus ceiling | % | 15 | 15 | fixed | clamp |
| Total liquidation below | % ICR | 105 | 105 | fixed | — |
keeperShare and its cap | % / USD | 0.5 / 200 | 0.5 / 200 | fixed | — |
κ | × d2_eff | 4.0 | 2.5 | fixed | — |
σ | % of market cap | 15 | 10 | fixed | MC = totalSupply × price |
C_abs(t) | USD | see tiers below | see tiers below | dated tier | locked by badDebtCumul and a TCR condition |
ρ | % of Σ C_abs | 40 [F] | 25 [F] | fixed + formula | max(ρ, 1/n_active) |
π (position maximum) | × d2_eff | 1.0 | 0.75 | fixed + formula | — |
| Per-address debt cap | USD | see tiers below | same | dated tier + formula | min(50 k, 10% D_max) then min(π d2_eff, 10% D_max) |
d2_eff | USD | — | — | formula | min(d2_now, P25 over 7 d), ratchet +20%/d after 24 h, decay 10%/d after 48 h |
Reference pools for LiquidityOracle | addresses | ≥ 2 | ≥ 2 | fixed | chosen seven days before deployment |
Hourly liquidation bucket, LIVE | × d2_eff | 1.0, or 1.5 in a regular session | same | fixed | refilled linearly over 60 min |
Hourly liquidation bucket, DRIFT | × d2_eff | 0.25 | same | fixed [F] | — |
| Open-sale ceiling per shut period | × d2_eff / % of debt | 1.0 / 15% | same | fixed [F] | min of the two, counted in debt burned |
Per-transaction cap, LIVE / DRIFT | × d2_eff of debt | 0.25× / 0.10× | same | fixed [F] | one unit for both buckets since v0.4 (decision D89) |
SESSION_EDGE_S | s | 600 seconds | same | fixed | the print applies in one step; only the pool waits |
Confirmation, LIVE / DRIFT | s | 90 / 1 800 | same | fixed [F] | flag to execution |
Flag validity, LIVE / DRIFT | s | 1 800 / 21 600 | same | fixed [F] | — |
τ_live: regular / extended / overnight | h | 4 / 6 / 8 | same | fixed [F] | past it, LIVE becomes DRIFT; nothing is blocked |
| Missed heartbeat / calendar shut too long | h | 26 / 120 | same | fixed [F] | the two ways into BLIND by age |
Session weights for marketTime | — | 1.0 / 0.5 / 0.25 / 0.15 | same | fixed [F] | regular / extended / overnight / shut |
c_sess: extended / overnight | — | 0.95 / 0.85 | same | fixed [F] | overnight has one price provider |
REDEEM_K | % | 2 | 2 | fixed [F] | fee = 0.5% + baseRate + REDEEM_K × (1 − conf) |
maxJumpPerMin / maxJumpAbs | %/min / % | 0.6 / 12 | 1.0 / 18 | fixed [F] | doubled within a session edge |
| Relative price window | × last accepted | — | — | formula | [/20, ×20] |
expectedPrice at construction | USD per token | price the day before | same | fixed | assert feed within [/2, ×2]; initialises the window |
minShare / maxShare | USD per underlying share | share₀ / 3 and × 3 [F] | same | fixed + formula | recalibrated by m_old / m_new |
| Silent multiplier change threshold | % | 1 | 1 | fixed [F] | — |
pools[] (price witness) | addresses | 1 to 6, with a native accumulator | same | fixed | v3 observe, v2 cumulative; v4 is never a price source |
basket[] (coherence only) | addresses | the other equity branches | empty for GLD | fixed | feeds dispersion alone; confirms nothing, widens nothing (D78, invariant I-18) |
| TWAP window / fallback | s | 3 600 / 1 800 | same | fixed | a pool whose window is unreadable is excluded for that poke |
ethUsdFeed window / ETHUSD_AVG_MAX_ROUNDS | s / count | 3 600 / 12 | same | fixed [F] | averaging window for the WETH conversion, and the age past which WETH pools go |
| Circuit exit: rounds / delay | count / min | 3 / 10 minutes, or 2 / 60 minutes | same | fixed | either path clears it (decision D92) |
Shutdown persistence below SCR | s | 3 600 [F] | 3 600 | fixed | — |
| Automatic shutdown after degraded state | days | 7 | 7 | fixed | on degradedSince |
| Interest clock stop after degraded state | h | 24 | 24 | fixed | — |
| Upgrade freeze: initial / extension / maximum | days | 7 / 7 / 28 | same | fixed | cleared by an automatic transferability self-test |
urgentFrom after a Closer shutdown | days | 7 | 7 | fixed | zero for the mechanical causes |
| Post-shutdown settlement | days | urgentFrom + 30 | same | fixed | settleAfterShutdown |
spSeed (floor under the pool cap) | USD | 500 k | 500 k | fixed | cap = max(spSeed, 1.0 × debt) |
| Pool cap per address | USD | 100 k until day 90 | same | dated tier | unlimited afterwards |
| NAV discount on collateral being sold | % | 5% | 5% | formula | equals B_BASE, applied to min(pRef, pLiq) (decision D82) |
CollateralSale: max discount / ramp / bucket | % / h / × d2 | 3 / 6 / 1.0, 0.25 per tx | same | fixed | stays at 3% after six hours |
| In-kind delivery threshold on the wrapper | % of NAV | 20 | 20 | fixed | — |
Global constants
| Constant | Unit | Value at deployment | Nature | Formula or derivation |
|---|---|---|---|---|
| Fixed rate floors, A / B | % | 1.5 / 3.0 | fixed | floor = max(fixed, k × rRef) |
k, A / B | × | 0.5 / 0.9 | fixed | assert k × rMax ≤ 10% |
rRef bounds / window / minimum samples | % / days / count | [2, 6] / 30 / 15 | fixed + formula | 30-day TWA of the reference borrow rate; zero if unavailable |
RateFloor reference market | address, id | chosen seven days before deployment | fixed | USDG loan token, largest borrowed assets |
| Reference unavailability | USD / days | supplied assets < 10 M, or last update > 30 d | fixed | gives rRef = 0 |
rateMax | % | 100 | fixed | — |
| Mint fee | days of interest | 7 | fixed | Δdebt × rate × 7/365 |
rateCooldown | days | 7 | fixed | — |
minDebt | fyUSD | 100 | fixed | — |
globalCeiling(t) | USD | 2 M from day 14, up to 10.5 M | formula | Σ_active C_abs_i(t) |
DEPLOY_TS | s | the deployment timestamp | fixed | reference for the global dated tiers |
| Liquidation flag: minimum delay / expiry | s | 90 / 1 800 | fixed [F] | — |
SESSION_EDGE_S | s | 600 | fixed | calendar boundary, print after a long silence, exit from BLIND |
preAction | s | 86 400 | fixed | — |
SEQ_GRACE | s | 1 800 | fixed [F] | with no uptime feed, SEQ_DOWN does not exist at all |
CIRCUIT exit: rounds / delay | count / s | 3 / 600, or 2 / 3 600 | fixed | either path, decision D92 |
| Global hourly liquidation bucket | × Σ d2_eff | 0.6 [F] | fixed | — |
| Redemption fee: floor / low-confidence premium | % / % | 0.5 / up to 2.0 | fixed + formula | 0.5% + baseRate + 2% × (1 − conf) |
baseRate half-life | s | 21 600 | fixed | — |
redemptionCooldown | s | 86 400 [F] | fixed | — |
| Urgent redemption: bonus / fee | % | 2 / 0 | fixed | — |
PSM feeIn / feeOut | % | 0.05 / 0.20 | fixed | zero in Sunset |
PSM capShare | % of supply | 30 | fixed | 100 in Sunset; never raised otherwise |
| PSM reserve target / minimum | % of supply | 10% / 5% | operational | the only weekend peg line once collateral has fallen (D88) |
| PSM reserve deployed | % | 0, for the whole life of version 1 | fixed | — |
| Interest shares: pool / backstop / treasury / incentives | % | 90 / (5 from pool) / 0 / 10, then 75 / (5 from treasury) / 15 / 10, then 100 / 0 / 0 / 0 | formula | regime by D_total and Sunset |
| Fee-switch threshold | USD of debt | 25 M | fixed | one-way permissionless latch |
| Backstop target | % of D_total | 2 | fixed | 5 points routed while below |
| Redistribution: delay / backstop threshold | h / USD | 72 / below minDebt | fixed | permissionless |
| Backstop collateral sale: discount / per-tx cap | % / × d2 | 3 / 0.25 | fixed | live session only |
| Pool-depth alert: low / recovery | % of supply | 30 / 40 | fixed | hysteresis |
PoolIncentive: pools / purge | count / days | 1, or 2 if the hook is ready / 180 | fixed | pro rata in-range liquidity × time |
| Closer: max freeze / max liquidation freeze / cumulative / freeze count | h / h / days / count | 72 / 24 / 30 per branch / 3 per branch | fixed | at least 7 days between two liquidation freezes, and pool deposits refused during one |
Closer.EXPIRES_AT | s | DEPLOY_TS + 365 days | fixed | renounce() brings it forward |
| Automatic Sunset: branches / aggregate TCR / persistence | count / % / s | 2 / 130 / 3 600 | fixed | permissionless |
| Sunset: rates to zero after | days | 90 | fixed | interest clock frozen |
| Calendar exceptions frozen through | date | 2036-12-31 | fixed | rules continue afterwards |
| Backstop initial endowment | USD | 100 k [F] | outside the protocol | through fund() |
| Initial fyUSD/USDG liquidity | USD | 250 k to 500 k | outside the protocol | founders |
| Pool bootstrap | USD | 500 k to 1 M through swapInToSP | outside the protocol | at most spSeed per branch before debt exists |
Dated tiers
| Tier | From | SPY, QQQ | Third ETF | GLD, IWM | Condition |
|---|---|---|---|---|---|
C_abs 1 | activation | 100 k USD | 100 k | 100 k | 14-day observation |
C_abs 2 | activation + 14 d | 1.0 M | 500 k | 500 k | — |
C_abs 3 | activation + 90 d | 2.0 M | 1.0 M | 1.0 M | badDebtCumul == 0 |
C_abs 4 | activation + 180 d | 3.0 M | 1.5 M | 1.5 M | badDebtCumul == 0 and TCR ≥ 200% at the mint |
| Per-address debt cap | day 0 to day 90 | min(50 k, 10% D_max) | same | same | — |
| Per-address debt cap | after day 90 | min(π × d2_eff, 10% D_max) | same | same | — |
| Pool cap per address | day 0 to day 90 | 100 k | same | same | — |
| Pool cap per address | after day 90 | none | same | same | — |
| Pool cap, global | always | max(500 k, 1.0 × branch debt) | same | same | — |
| Closer | day 0 to day 365 | armed | — | — | renounce() possible at any time |
| Closer | after day 365 | inoperative | — | — | — |
Activation criteria for the dormant branches
Date (day 90 for the third ETF and GLD, day 150 for IWM); d2P25 at least 1.0 M USD for Tier 1 and 500 k for Tier 2; depth buffer at least 84 of 168 slots; at least two reference pools at 250 k or more; on-chain market capitalisation at least 8 M (A) or 4 M (B); the adapter deployed at least 90 days with no degraded episode longer than 24 hours; regime LIVE with no pending corporate action; and, for Tier 2 only, the sum of active Stability Pools at least 40% of the fyUSD supply. Full detail: Branches and versions.
Constructor assertions
A configuration that violates any of these cannot be deployed, and a configuration that is wrong cannot be corrected (Rule R-12.7.1):
MCR ≥ 110%
CR_mint > MCR / (1 − BAND_BASE) // the band alone never liquidates a fresh position
CR_mint / (1 − H_MAX) ≤ 250% (tier 1), ≤ 310% (tier 2)
MCR × (1 − BAND_BASE) > 1 + B_BASE + 300 bps // a sale at the bottom of the band is still solvent
U_MAX ≥ BAND_BASE // "band full" and "confidence zero" coincide
B_MIN < B_BASE ≤ 15%
DROP_TRIGGER ≤ BAND_BASE / 2
PERSIST_SINGLE_H ≥ 2 h
CONFIRM_LIVE < SESSION_EDGE_S < FLAG_TTL_LIVE ≤ CONFIRM_DRIFT < FLAG_TTL_DRIFT
LIQ_TX_CAP_DRIFT ≤ LIQ_TX_CAP_LIVE ≤ BUCKET_DRIFT_HOURLY
ETHUSD_AVG_MAX_ROUNDS ≥ 2
CLOSER_LIQ_FREEZE_GAP ≥ 24 h
sequencerFeed == 0, or latestRoundData() is readable
floorFixed ≥ 0.5%
rateMax ≤ 100%
k × rMax ≤ 10%
treasury share ≤ 20% in every regime
capShare ≤ 50% outside Sunset
τ_live regular ≤ extended ≤ overnight < HEARTBEAT_MISS
CLOSED_MAX_H > 80 h
W_REGULAR ≥ W_EXTENDED ≥ W_OVERNIGHT ≥ W_CLOSED > 0
C_abs tiers increasing
at least one price pool per branch, each v2 or v3
EXPIRES_AT == DEPLOY_TS + 365 days
all cross-addresses non-zero and mutually consistent
no two branches share a token
fyUSD minters == exactly the five branches and the PSMTwo further assertions of specification v0.4, CR_mint ≥ MCR + 20 pts and SCR ∈ [100%, MCR − 20 pts], are omitted above because the ratios marked [P] do not satisfy them. They return once v0.5 settles the thresholds.
What is no longer here
MCR_closed, CR_withdraw_closed, HardFloor, the fixed out-of-session band, graceOpen, the Monday grace, the sweep bonus adjustment, the relief-valve parameters and the long out-of-session staleness thresholds went with the closed-market design. Nothing replaced them one for one: the single MCR, the haircut, the recognition band and the open sale together do the work all nine used to do.
Version 0.4 removed four more. BAND_RATE and BAND_MAX, because the band no longer widens. RETURN_RAMP, replaced by SESSION_EDGE_S, which stops the Stability Pool executing for ten minutes instead of interpolating a price nobody trades at. And the ETH/USD sequencer substitute, whose 7 200-second threshold would have blinded every branch at once on a quiet night. Confirmation of a fall by the basket of other equity branches went with them.
Last reviewed: 2026-09-07 · Spec v0.4
Branches and versions
Ten registry slots, five branches deployed at genesis, three dormant ones that activate on measured criteria, and how a version 2 replaces a version 1 without trapping anybody.
Immutability and the Closer
Why nothing can be changed after deployment, what the single human key can and cannot do, and the date on which it stops existing.