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:

  1. erc20TransferFrom — the adapter takes your margin.
  2. morphoFlashLoan — Morpho lends the adapter the borrow amount for the length of the transaction. Inside it:
    1. 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;
    2. morphoSupplyCollateral posts every share bought as collateral in your name;
    3. morphoBorrow borrows 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).

ContractAddressWhat for
Morpho Blue0x9D53d5E3bd5E8d4Cbfa6DB1ca238AEA02E651010Holds collateral and loans; sets rates and limits
Bundler30x6478e9393d4C5bB4d53ee881d1DE78786A0344a6Runs every step in one transaction
GeneralAdapter10xc5E188541D107e8B79e43478bDE365F1406665D6Flash loans, collateral, borrow, repay — for the initiator only
Uniswap SwapRouter020xCaf681a66D020601342297493863E78C959E5cb2Buys and sells the stock
Uniswap QuoterV20x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7Prices each trade before you sign
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168The 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.