How Rill works
Rill lets you hold more of a tokenized stock than you paid for: your money plus a loan, all of it bought as stock and held as collateral for the loan. It does this with contracts that are already on Robinhood Chain — Morpho Blue for the loan, Morpho's Bundler3 and GeneralAdapter1 to do every step in one transaction, and Uniswap to trade.
Rill itself is a website. It has no contract, no key, no fee and no server that holds anything. Your position is an ordinary Morpho Blue position in your own wallet's name. If this site disappeared, you could still see and close it through Morpho or any block explorer.
Opening a position
You choose a stock, how much of your own USDG to put in (the margin) and a leverage between 1× and 2×. At leverage L Rill borrows margin × (L − 1). One Bundler3.multicall then does, in order:
erc20TransferFrom— the adapter takes your margin.morphoFlashLoan— Morpho lends the adapter the borrow amount for the length of the transaction. Inside it:- all the USDG goes to Uniswap's SwapRouter02, which buys the stock with its own balance and refuses less than 0.5% under the quote the page took moments before;
morphoSupplyCollateralposts every share bought as collateral in your name;morphoBorrowborrows the same amount against it, for you, paid to the adapter — which repays the flash loan as the call ends.
Before your wallet sees it, the page refuses a position if Uniswap would pay more than 1.5% below the market's own oracle price, if it would use more than 85% of Morpho's limit together with anything you already hold, or if the market hasn't enough free to lend. At 1× nothing is borrowed and there is no flash loan: it's a purchase posted as collateral.
Closing and trimming
Closing a fraction f (a quarter, a half, three quarters or all of it) is one transaction too: a flash loan the size of that part of the debt; morphoRepay of exactly f of your borrow shares (all of them to close); morphoWithdrawCollateral of f of your shares straight to Uniswap; a sale with a minimum; the flash loan repaid; and everything left sent to your wallet. Because the debt and the collateral fall by the same fraction, trimming leaves your leverage and your liquidation price where they were.
To close everything, the page flash-borrows 0.1% more than the debt it last read, so a few minutes of interest can't leave the repayment short; what isn't needed comes back to you in the same transaction.
Paying down
Put USDG against the loan without selling anything. The debt falls by exactly the amount; the shares stay put; the fall your position can survive grows. Paying all of it clears the loan by shares, so nothing is left owing, and any change comes straight back.
Permissions
Two, both asked for in the app only when needed:
- USDG approval for Morpho's GeneralAdapter1, for exactly the amount the transaction needs.
- Morpho authorisation for the same adapter (
setAuthorization), needed to borrow and to withdraw collateral for you. The adapter acts only for the wallet that started the transaction, so this lets your own transactions manage your position — nobody else's. The test suite checks that a stranger's transaction can't close, trim or drain a position, even after authorising the adapter for themselves.
The Positions page has a button to revoke both.
When a position can be liquidated
Morpho Blue lets anyone liquidate a position once debt > collateral × price × LLTV. Every market here has an LLTV of 62.5%. For a position opened at leverage L the loan is (L − 1) / L of its value, so the stock can fall by
1 − ((L − 1) / L) ÷ LLTV
before that happens: 60% at 1.25×, 46.7% at 1.5×, 31.4% at 1.75× and 20% at 2×. The page computes each position's liquidation price with Morpho's own integer rules, and a test holds it against Morpho itself: with the market's oracle set 0.1% above the page's price, Morpho refuses a liquidator; 0.1% below, it lets one through.
Interest slowly raises the debt, so the liquidation price creeps up over time — by about the borrow rate a year. A liquidator repays part of your loan and takes collateral worth that much plus Morpho's incentive; what remains stays yours.
Prices and weekends
Each market's oracle prices the stock in USDG from Robinhood's own feed for that stock (for example RHNVDA / USD) and the USDG/USD feed. Every price on this site is read from those oracles.
Robinhood's feeds publish while the stock market trades. Some while after the last print — between several hours and a day — these oracles refuse to answer. Morpho then can't check a loan's health, so it won't lend and won't release collateral while a loan is open: opening and trimming are paused, but closing a whole position still works, because it repays the loan before taking the collateral out. Nor can anyone liquidate while the price is paused. The app says when a market's price is paused.
What it costs
- Interest on the borrowed part, at the market's rate, which Morpho's adaptive rate model moves with how much of the market is lent out. The app shows each market's rate live; it can be a fraction of a percent when a market is mostly idle and several percent when it is nearly all lent out.
- Uniswap's pool fee on the buy and on the sale (0.05% in NVIDIA's, Apple's, Alphabet's and SpaceX's deepest pools), plus the price impact of your size.
- Gas on Robinhood Chain. Opening at 2× used about 410,000 gas in testing.
- Rill charges nothing, and has nowhere to put a fee.
Contracts
Rill deploys nothing. These are the contracts it builds transactions for, all already on Robinhood Chain (chain id 4663).
| Contract | Address | What for |
|---|---|---|
| Morpho Blue | 0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010 | Holds collateral and loans; sets rates and limits |
| Bundler3 | 0x6478e9393d4C5bB4d53ee881d1DE78786A0344a6 | Runs every step in one transaction |
| GeneralAdapter1 | 0xc5E188541D107e8B79e43478bDE365F1406665D6 | Flash loans, collateral, borrow, repay — for the initiator only |
| Uniswap SwapRouter02 | 0xCaf681a66D020601342297493863E78C959E5cb2 | Buys and sells the stock |
| Uniswap QuoterV2 | 0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7 | Prices each trade before you sign |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 | The dollars you put in and borrow |
GeneralAdapter1 reports this Morpho and this Bundler3 as its own (MORPHO(), BUNDLER3()); Rill's build checks that before it publishes. The markets, their oracles and their limits are in markets.json, found from Morpho's own CreateMarket events.
What Rill doesn't control
- Market moves. Leverage multiplies falls as well as rises, and a large enough fall ends in liquidation.
- Rates and liquidity. Morpho's rate rises when a market is heavily borrowed, and a market can run out of dollars to lend. Both are set by Morpho's markets and the people supplying them.
- Robinhood issues the stock tokens and runs the price feeds, and can pause or freeze its tokens.
- Rill's website is not audited. Morpho's and Uniswap's contracts are; Rill only builds calls to them, and every call is simulated from your address before you sign.
How it's tested
Property tests run the page's own transactions through the real Morpho, Bundler3, GeneralAdapter1 and Uniswap on live Robinhood Chain state, sending nothing. They check that the wallet pays exactly its margin and owes exactly what it borrowed, that no contract keeps a unit of anything, that half a close halves both sides, that a stranger can't touch a position, that the page's liquidation price is Morpho's, and that a stale price stops opening and trimming but not closing. Last run: 12/12 properties, 284 assertions, 2026-09-26.
The tests are graded too: a sweep plants deliberate bugs in a copy of the page's transaction code — a close that leaves collateral behind, a borrow for the wrong amount, a sale with no minimum — and each must be caught by the property named for it: 16/16 caught, 2026-09-26.
An end-to-end run drives this site in a real browser against a simulator on live chain state: it opens 2× NVIDIA and 1.5× Apple, lets a month pass, closes half of one, pays the other down, closes the rest and revokes the permissions, checking every outcome on the chain. Last run: 10/10 stages, 27 checks, 2026-09-26.