rSPY$574.12+0.00%·
rAAPL$231.44+0.00%·
rNVDA$138.07+0.00%·
rTSLA$402.60+0.00%·
USDC$1.0002+0.01%·
USDR$1.0007+0.02%·
rSPY$574.12+0.00%·
rAAPL$231.44+0.00%·
rNVDA$138.07+0.00%·
rTSLA$402.60+0.00%·
USDC$1.0002+0.01%·
USDR$1.0007+0.02%·
rSPY$574.12+0.00%·
rAAPL$231.44+0.00%·
rNVDA$138.07+0.00%·
rTSLA$402.60+0.00%·
USDC$1.0002+0.01%·
USDR$1.0007+0.02%·
Robinhood Chain · 10 markets · block 74,215,993

The risk engineis thewhole product.

Marginal lets you borrow stablecoins against tokenized US equities on Robinhood Chain. Every position's loan-to-value is a live function of realized volatility and the earnings calendar — not a governance parameter that gets revisited six weeks after it should have. The formula below is the same one RiskEngine.sol evaluates every block. Hover any term.

Supply
4.12M
Borrowed
0.87M
Bad debt
0.00
src/risk/RiskEngine.sol · getEffectiveRisk()↳ evaluated per solvency check
LTVeff=LTVbase×f(σ)×g(te)×h(TVL)

LTV_base — per-asset ceiling. 60% on rNVDA.

f(σ) — sensitivity 1.5×; floor at 0.55.

g(t) — ramps down 7d pre-earnings.

h(TVL) — concentration guard.

The three functions

Volatility. Earnings. Depth.

Every dollar of risk on Marginal is priced by three composable functions. None of them require a governance vote to reprice — the numbers change as the market changes.

i.f(σ)

Volatility adjustment

Realized 30-day vol is pushed to the oracle hourly. If vol exceeds baseline, LTV is haircut by k_vol × excess. Floors per-asset at minVolAdj.

σadj
clamp(1 − 1.5·max(0, σ−σ₀), 0.55, 1)
ii.g(t)

Earnings adjustment

LTV ramps down over the seven days before every scheduled print, holds a per-asset floor through the results window, then snaps back.

t_e
piecewise around t_earnings
iii.h(TVL)

Concentration guard

Prevents any single collateral position from consuming more of an asset's on-chain float than a governance-set cap. Below the cap, no adjustment.

TVL/cap
min(1, TVL / cap)
Live markets

What the engine sees, right now.

Read from AssetRegistry.listedAssets() and reprised through getEffectiveRisk(). No client-side estimation.

AssetLast24hRealized σDays → earnBase LTVEffective LTVLiq. threshold
r
rSPY
SPDR S&P 500
$574.12+0.31%15.0%22d80.0%
80.0%
85.0%
r
rAAPL
Apple
$231.44-0.42%28.0%41d70.0%
66.8%
− 3.1% vs base
73.4%
r
rNVDA
NVIDIA
$138.07-2.14%68.0%3d60.0%
31.4%
− 28.6% vs base
53.7%
r
rTSLA
Tesla
$402.60+1.87%72.0%12d55.0%
36.3%
− 18.7% vs base
55.6%
healthy earnings window LTV compressedrefresh: 12s
Position simulator

Try to break the borrower.

Pick a name, choose a size, move vol wherever you want, drag earnings toward today. The calculator runs the same math the smart contract runs — down to the bp — so what you see here is what the pool would enforce.

inputs · marginal.sh
rNVDA
↳ realized 30d σ45.0%
baseline: 45.0%
↳ days to next earningsT-30d
stdout · effective risk
> RiskEngine.getEffectiveRisk("rNVDA")
  ltv                  = 60.0%  (base 60.0%)
  liquidationThreshold = 68.0%  (base 68.0%)
  liquidationBonus     = 8.0%
  volAdjustment        = 100.0%
  earningsAdjustment   = 100.0%

> RiskEngine.getUserAccountData("0xa1…c3f")
  totalCollateralUsd   = $13,807
  availableBorrowsUsd  = $8,284
  liquidationBoundUsd  = $9,389
Effective LTV
60.0%
Liq. threshold
68.0%
Collateral
$13,807
Max borrow
$8,284
compression bar60.0% / 60.0%
The user path

Five steps. All on-chain.

Marginal doesn't hide anything behind an off-chain API. Every step below is a direct call to a public contract you can read on Blockscout.

  1. 01

    Connect

    Bring any injected wallet. The site auto-adds Robinhood Chain (chain 4663) and self-registers your address in KYCRegistry with one on-chain call — 24 gwei-cents, no email, no form.

  2. 02

    Supply

    Deposit tokenized equities (rSPY, rAAPL, rNVDA, rTSLA) as collateral. You get a rebasing aToken receipt one-for-one. Interest accrues per block via the reserve index.

  3. 03

    Borrow

    Draw USDC or USDR against your collateral. RiskEngine returns the current effective LTV — realized-vol adjusted, earnings-window aware — and the pool refuses anything that would push health factor below 1.0.

  4. 04

    Watch the health factor

    HF = collateral × liquidation-threshold / debt. Reprised every block from live oracle data. Ramp down 7 days before earnings, snap back the morning after — automatically.

  5. 05

    Repay & withdraw

    Repay any USDC amount to reduce debt. Withdraw collateral once HF has room. Liquidators get a dynamic bonus that scales with realized volatility.

Verifiable · on-chain

Everything the engine reads, everything it decides — on one address list.

Marginal is not a black box. The eight contracts below are the only components with authority to move funds or price risk. Verify a build, simulate any call, and read the exact source that runs against your collateral.

Pool
Main entry point · supply / borrow / repay / liquidate
0x7630d97702c187748e53d5e3ac6d3a67d95c53f2
RiskEngine
Dynamic LTV / LT / bonus per asset
0xc5730b97f7122a1e3280aa085d8aa991b94ca082
LiquidationEngine
Sizes and executes liquidation calls
0xc53aabb1cba26dd845eedf74c7898355aa353a7e
AssetRegistry
Baseline risk parameters per asset
0x89de9ea1149c74999706613f9a665d89622cd6f9
KYCRegistry
Compliance gate · users self-register once
0xbef59fb8cfe7c20cf6e7e5124491365f7081b65a
StockOracleAggregator
Price + realized-vol push feed
0xd6cb81586898b734410f0a56099b8f3b28b175aa
EarningsCalendar
Next earnings timestamp · 24h griefing delay
0xd6466d1cbe1e7aaf13b3a92bbc1b42dc175789b0
Faucet
Rate-limited mint · one drip per 24h per asset
0xfccabdc83ab305e0667f466ecfe27e6df3d72399