Live on the testnet
Fourteen markets read straight from Robinhood Chain testnet. Every ticker publishes its borrow rate, a short interest signal tokenized stocks did not have.
Borrow ticket
NVDA
…
Live from Robinhood Chain testnet. Prices are the mainnet Chainlink prints, mirrored.
Markets live
…
Lent to the pools
…
at the current prints
Best supply APY right now
…
rates follow utilisation
| Ticker | Price | Session | Supply APY | Borrow APR | Available |
|---|---|---|---|---|---|
| Reading the chain… | |||||
How a market works
One pool per ticker, one USDG account per borrower. The pool is an ERC-4626 vault over raw token units; everything the protocol owes or is owed is counted in those units.
- The pool, where every market lives
- Lender side
- Borrower side
- USDG held by the Controller
- Dashed: returns and small flows
Read the mechanics
A lender deposits NVDA and receives lNVDA shares. The pool lends raw units to borrowers up to 90 percent utilisation and keeps the rest idle so lenders can always leave. The fee a borrower pays accrues in USDG against the borrower's collateral and is credited to the pool's shareholders as it accrues; a lender claims it whenever they like.
A borrower deposits USDG once and can borrow any listed ticker against it. The initial ratio is 1.5 times the debt value for the large names and 2 times for the thinner ones; liquidation starts at 1.25 and 1.5 times. One account can hold several shorts, and the health factor adds them up.
A short, step by step
- Controller, the only check that matters
- Dashed: returns
Read the mechanics
The ShortRouter is an operator the trader approves once. It borrows through a deferred-check call: the Controller hands the tokens over, lets the router sell them on Uniswap and deposit the USDG, and only then checks the ratio. The whole thing reverts if the ratio is missed, so nothing half-happens.
Corporate actions cost no code
| A 2-for-1 split | Before | After |
|---|---|---|
| Raw balance (what the ledger stores) | 10.000000 | 10.000000 |
| uiMultiplier | 1.000000 | 2.000000 |
| Effective shares (what the holder owns) | 10 | 20 |
| Borrower owes | 10 raw | 10 raw |
| Chainlink price per raw token | $480.00 | $240.00 |
| Debt value | $4,800 | $2,400 x 2 = $4,800 |
Read the mechanics
Robinhood Chain Stock Tokens follow ERC-8056: a split or a reinvested dividend never changes a raw balance, it changes a multiplier. Because Locate counts raw units and the Chainlink feed already prices one raw token, a 2-for-1 split moves nothing in the protocol.
Prices, around a 24/5 feed
The tokens trade every hour of the week on Uniswap. Chainlink's equity feeds on Robinhood Chain update only while the US session runs. The oracle router treats that gap as a state, not a surprise.
- Normal trading state
- States that block new borrows
- Dashed: recovery
Read the mechanics
Inside the session a fresh print is the price. Outside it, the router reads the pool's 30-minute TWAP, clamps it into a band around the last print, and values debt at the higher of the two. Sunday-night news that moves the pool therefore raises collateral requirements before Monday's first print.
The token's own flags matter too: a Stock Token sets oraclePaused() while a corporate action is processed and paused() if transfers halt. Either one, or a sequencer outage, pauses new borrows.
Liquidations that need no capital
Below health 1.00 an auction opens. The discount on the borrower's USDG grows with time, so the first liquidator to show up pays the fairest price and a slow weekend still clears.
Read the mechanics
The flash path lives in the Liquidator contract: it borrows the raw units from the pool's own ERC-3156 flash loan at 5 basis points, repays the unhealthy account, receives USDG at the discount, buys the units back on Uniswap, returns the loan and keeps the difference. The pool's lenders earn the flash fee. A keeper runs this every ten seconds on testnet; anyone can run one.
If an account runs out of USDG with debt left, anyone can absorb it: the insurance fund, fed by its 10 percent of every fee, compensates lenders in USDG, and only the remainder becomes a pro-rata haircut on that pool.
What runs on Stylus
Two contracts do the arithmetic the Controller depends on every time money moves: the risk engine and the oracle router. Both are Rust, compiled to WebAssembly and activated on Robinhood Chain.
- Rust on Stylus, the two contracts the Controller calls
- Rust on Stylus, read by the router
- Solidity
- External
- 14.1 KB
- risk engine, compressed
- 29.6 KB
- oracle router, two fragments
- 10.9 KB
- market calendar
- 100
- Foundry tests, requirements first
- 6
- invariants over 8,192 random calls each
- 17
- Rust unit tests
Read the mechanics
The risk engine evaluates every position of an account in one call over 512-bit intermediates, rounding debt up and health down. The oracle router ports Uniswap's tick math to read the pool TWAP, runs the band and regime rules, and reads the token flags with tolerant static calls. The market calendar knows the session, US daylight saving and the holiday list.
Each has a Solidity reference. scripts/diff-check.ts ran both on the live chain across 40 random health evaluations, nine rate points, six auction points and all 14 quotes, found them identical to the wei, and switched the Controller. The references stay deployed for anyone to repeat it.
Where it can go wrong, and what stops it
The threat model is written down with the controls that answer each risk and a self-audit checklist that has to be ticked before any mainnet deployment.
| Risk | Control |
|---|---|
| Thin weekend pool | Debt valued at the higher of print and banded TWAP; borrow caps tied to pool depth; pre-open guard |
| Stale or paused feed | Degraded or Paused regime: no new borrows, everything else open |
| Reentrancy and callbacks | Guards on every entry that can hurt an account; deposit and repay are the only calls allowed inside a callback |
| ERC-4626 inflation | Decimals offset of six, zero-share deposits revert, deployer seeds every pool |
| Rounding | Debt rounds up, health rounds down, flash fee rounds up |
| Bad debt | Insurance fund first, then a pro-rata haircut on that market's lenders, stated on the Markets page |
| Admin keys | Guardian can only pause borrows and listings; owner moves behind a multisig and timelock before mainnet |
Read the mechanics
Still open: weekend pricing on thin pools is contained, not removed; an outside review of the Stylus and liquidation code is the first milestone; and securities lending of tokenized stock may draw regulatory comment even for non-custodial software, which is why the app carries the issuer's regional notice.
Try it on the testnet
Sign in with an email or a wallet, take mock USDG from the faucet, lend a token or short one. Robinhood's own faucet hands out ETH and the real AMD, AMZN, NFLX, PLTR and TSLA tokens that Locate lists.