How Fell works
Fell lets you place limit orders for tokenized stocks on Robinhood Chain. It's a website, not a protocol. Every order is a plain order on Seaport 1.6, the settlement contract OpenSea built, which was already deployed on Robinhood Chain at its canonical address. Fell adds no contract, holds no keys and charges no fee. Your wallet signs every transaction, and you can check each one before you do.
What an order is
A Fell order is a Seaport order with exactly one thing offered and one thing asked for:
- A sell order offers some of a stock token and asks for USDG, paid to you.
- A buy order offers USDG and asks for some of a stock token, delivered to you.
It has no zone, no conduit and no fee recipient. Its type is PARTIAL_OPEN, so anyone may fill it, in part or in full. It has a start time, an end time, and a random salt that makes each order unique. The price is simply the USDG amount divided by the number of shares.
Seaport accepts a partial fill only when the fraction divides every amount in the order exactly. Two amounts a person picks almost never share a divisor, so an order built naïvely could only ever be filled whole. Fell rounds both amounts down to a multiple of 100 units, which is a hundredth of a cent of USDG and a negligible sliver of a share. Every whole percent of the order then divides exactly. The app shows the rounded amounts and the exact price they carry before you sign.
Robinhood stock tokens are "scaled" tokens: the raw units in your wallet never change, and a multiplier the issuer sets (currently between 1.000 and about 1.005) turns them into shares. Fell converts in both directions exactly as the token does, so "10 shares" means what your brokerage would call 10 shares.
Placing an order
- Approve Seaport to move what the order offers: the shares for a sell, the USDG for a buy. The approval covers this order plus every open order you already have offering the same token, because Seaport draws on it only when a fill happens. This step is skipped when the approval is already large enough.
- Publish: Fell calls Seaport's
validatefrom your wallet. Seaport skips the signature check when the caller is the order's own maker, marks the order valid, and writes the whole order into anOrderValidatedevent. Nothing leaves your wallet.
Fell also shows what Uniswap would pay or charge right now for about $500 of the stock. If Uniswap already beats your price, or someone on the book already does, the app says so and offers to trade immediately instead.
The book
No server keeps the order book. The app reads every OrderValidated event Seaport has emitted on Robinhood Chain since block 51,600,000 and keeps the ones shaped like a Fell order. Then, in one multicall, it asks Seaport and the tokens where each order stands:
getOrderStatus: cancelled, and how much has been filled;getCounterfor the maker, withgetOrderHashrecomputed under it. A maker who raises their counter voids every order they made before, and Fell shows those as cancelled;- the maker's balance of what they offered, and their approval to Seaport. An order Seaport would refuse to settle is left off the book, whoever published it.
When the scan ran, 81 Seaport orders had been published on the chain since that block, and 0 of them were Fell-shaped.
Filling an order
Choose an order on the book and how much of what's left you want. Fell sends fulfillAdvancedOrder with a fraction of k/100 of the original order. Seaport moves your side to the maker and the maker's side to you in the same transaction, or reverts and moves nothing. If someone else fills part first, Seaport caps your fill at what remains instead of failing. The app compares the order's price with Uniswap's before you sign.
Cancelling
"Cancel" calls Seaport's cancel with the order's parameters. Only the maker can cancel. A cancelled order can never be filled again, and whatever was already filled stays filled. You can also stop every order at once by revoking Seaport's approval in your wallet: nothing can be settled without it.
Trading right now
"Right now on Uniswap" swaps through Uniswap v3's SwapRouter02 in the pool with the best quote for your size, with a 0.5% slippage floor and a 20-minute deadline. It's there for when you'd rather not wait.
Contracts
Every address Fell talks to. None of them were deployed by Fell.
How it was tested
The suite (tools/test.mjs) runs the app's own transaction builder (js/fell.js) against the live Robinhood Chain with eth_simulateV1. That means the real Seaport, the real stock tokens and the real USDG, with funded test wallets and nothing ever broadcast. For several stocks it publishes sell and buy orders, fills them in parts and in full, and checks every amount that moved against its own arithmetic, done without the module under test. It also cancels orders, lets them expire, voids them with a counter bump and moves the maker's balance away. Every refusal has to be the specific error Seaport raises.
At block 71,626,500: 20/20 properties passing, 1161 individual checks. A browser run (tools/e2e.mjs) drives the real app in headless Chrome, with a wallet that signs into the same simulator: two wallets place, fill, partly fill and cancel orders by clicking the page. 7/7 steps passed, 32 checks.
Risks
- Your order fills when it suits someone else. A sell at $200 fills when $200 is a good price to pay. If the stock moves far past your price, your order still fills at your price until you cancel it.
- Nobody may fill it. Fell is new, and the book may be thin or empty. Unfilled orders simply expire.
- Orders are public. Price, size and your address are visible to everyone on the chain.
- Approvals. Seaport can move up to the amount you approved, and only to settle orders you published. Revoke the approval when you're done.
- Stock tokens are issued by Robinhood, which can pause them, block addresses, and change the share multiplier. A paused token can't settle.
- Smart contract risk. Seaport 1.6 is audited and widely used, but no contract is free of risk. Fell's own code only builds transactions, and your wallet shows each one.