Every transaction, in plain words
Heron deploys no contract. It builds transactions for Valorem's options clearinghouse and Seaport 1.6, both already live on Robinhood Chain, and your wallet sends them.
What Heron is
An options market for Robinhood's tokenized stocks. A call is the right to buy one token of a stock at a fixed price (the strike) until a date (the expiry); a put is the right to sell one at the strike. Whoever writes an option locks what it could cost them — the stock for a call, the strike in dollars for a put — and is paid a premium by whoever buys it.
Three things on Robinhood Chain do all of the work, and none of them is Heron's:
- Valorem's options clearinghouse holds every writer's collateral, mints the options as ERC-1155 tokens, settles every exercise and pays writers back after expiry.
- Seaport 1.6 is the market: every listing and every bid is a Seaport order, and its events are the order book.
- Robinhood's price feeds give today's price and each stock's history, from which Heron shows a fair value. Nothing on chain reads them for Heron; they only inform what you see.
The series
Valorem lets anyone define an option type by six numbers, and the same six numbers always give the same token. Heron always uses the same shape, so that every writer of, say, the NVDA $250 call for 20 November writes the same token and every contract is interchangeable:
- Contract size: one whole token of the stock (1018 raw units). Robinhood's stock tokens carry a
uiMultiplier, so one token is currently 1.00–1.01 shares; the page shows both. - Strike: in USDG (six decimals) per token, on a grid of round numbers that widens with the price ($0.50 under $5 up to $100 over $2,500).
- Expiry: a Friday at 20:00 UTC — the next four, then the third Friday of each month, out to 100 days.
- Exercise: any moment before expiry. Valorem's exercise window opens 120 days before each expiry, which is before any series Heron offers can be created.
A call's Valorem type is (stock, 10^18, USDG, strike, expiry − 120 days, expiry); a put's is (USDG, strike, stock, 10^18, expiry − 120 days, expiry). The token id is the first 20 bytes of the keccak hash of those six fields, shifted left 96 bits — the page computes it, and Valorem's NewOptionType event confirms it.
Heron offers the 25 stocks that have a Robinhood price feed with at least ten trading days of history. A Treasury-bill fund (SGOV) is left out.
Writing
The write page sends at most five transactions, and only the ones your wallet still needs:
- Approve Valorem to take the collateral (the stock for calls, USDG for puts), exactly the amount this write needs.
- Open the series —
newOptionType— only if nobody has written it before. - Write —
write(optionId, n). Valorem takes the collateral and mintsnoption tokens plus one claim NFT to you. The claim is your receipt for the collateral. - Let Seaport deliver sold options —
setApprovalForAll(Seaport, true)on Valorem, once per wallet — only if you list. - List — Seaport's
validatewith your order:noption tokens forn × premiumUSDG, paid to you, partially fillable in whole contracts, ending at expiry. Seaport needs no signature when the offerer publishes their own order, and records the whole order in itsOrderValidatedevent.
Writing more of a series you already hold opens a new claim; each claim is settled on its own.
Buying and selling
Buy takes some or all of a listing with Seaport's fulfillAdvancedOrder: your USDG goes to the writer and the options come to you in the same transaction, or nothing moves. You approve Seaport for exactly what you pay (plus what your own open bids already need from the same approval).
Bid publishes the mirror order: n × price USDG for n options, delivered to you. Your dollars stay in your wallet until someone sells into it.
Sell fills a bid with options you hold, or lists them. Any listing can be cancelled from Positions with Seaport's cancel.
The chain reads every listing from Seaport's events since block 76,700,000, and shows only what can fill right now: it checks Seaport's own status for each order, that its maker's counter has not moved, and that the maker still holds (and has approved) what the order promises. A listing is shown only if it is exactly the shape above — one Heron series against USDG, paid to the maker, fixed price, no zone, no conduit.
Exercise and expiry
Exercise — exercise(optionId, n) — burns your options, takes the strike (call) or the stock (put) from you, and gives you the other side from the writers' collateral. It is open until the expiry second. Valorem assigns each exercise to writers by its own on-chain rule: buckets of writes, starting at a point fixed by the series, so any writer of a series can be assigned in part or in full.
After expiry, options cannot be exercised and simply stay in wallets, worthless. Each writer redeems their claim — redeem(claimId) — and receives, in one transfer each, the collateral nobody exercised and the payments of everyone who did.
Fair value
Beside every price Heron shows a fair value: Black–Scholes with no interest rate and no dividend, at the stock's own volatility. With no rate, exercising a call early is never worth more than holding it, so the American right adds nothing to a call's value; for a put it would add a little, which this leaves out.
Today's price is Robinhood's own feed for the stock (times its uiMultiplier, to price a token rather than a share), when the feed has printed in the last four days; otherwise the stock's deepest Uniswap pool, and the page says so.
Volatility is measured by tools/scan-vol.mjs: it walks each feed's rounds back 45 days, keeps the last print of each UTC day on which the feed printed at all (a shut market prints nothing, and counting a weekend as a day without a move would make every stock look calmer than it is), and annualises the standard deviation of the daily log returns over 252 trading days. A daily move of more than 50% is treated as a misprint. Last measured at block 76,744,802 (30 Sep 2026):
| Stock | A year | Days |
|---|---|---|
| NVDA | 31.4% | 31 |
| SPCX | 43.0% | 31 |
| USO | 44.4% | 31 |
| QQQ | 14.8% | 31 |
| GOOGL | 23.3% | 31 |
| MU | 56.4% | 31 |
| CRCL | 94.0% | 31 |
| MSFT | 21.2% | 31 |
| AMZN | 25.3% | 31 |
| MSTR | 98.3% | 31 |
| SPY | 10.3% | 31 |
| GLD | 19.7% | 11 |
| AAPL | 22.2% | 31 |
| META | 47.7% | 31 |
| INTC | 68.6% | 31 |
| DELL | 62.3% | 31 |
| GME | 37.1% | 31 |
| AMD | 54.6% | 31 |
| TSM | 26.2% | 31 |
| PLTR | 42.0% | 31 |
| SLV | 44.0% | 31 |
| SNDK | 77.0% | 31 |
| ASML | 37.3% | 31 |
| USAR | 66.4% | 31 |
| TSLA | 42.1% | 31 |
Fees
Heron charges nothing and has no contract that could. Seaport charges nothing. Valorem's clearinghouse has a fee switch that only its administrator can turn on; while it is on, it takes 0.15% of what goes in on each write (in the collateral) and each exercise (in what the holder pays), at least one unit. It is off on Robinhood Chain today. Heron reads the switch live before every write and exercise and approves exactly what the fee would need.
Gas on Robinhood Chain is paid in ETH; a write with its approvals and listing costs a few cents.
Risks
- Writers give up upside (calls) or buy on the way down (puts). That is the trade; the premium is the pay for it.
- Assignment can come at any moment before expiry, in part or in full.
- Bought options can expire worthless. The most a buyer can lose is the premium.
- The contracts. Seaport 1.6 is audited. Valorem's clearinghouse was audited at v1.0.0; the copy on Robinhood Chain is Valorem's
masterbranch, which differs from v1.0.0 in three constants — the fee rate (5 → 15 basis points, only while the switch is on) and two minimum windows (one day → one minute) — and in nothing else. Heron checked this by comparing the verified source with both. - The tokens. Robinhood can pause its stock tokens and block addresses. If it did so to Valorem's clearinghouse, locked stock could not move until it stopped.
- Thin markets. A series may have nobody on the other side. Fair value is a guide, not a promise that anyone will pay it.
Addresses
Each stock's token, price feed and deepest pool are in data/markets.json; each volatility in data/vol.json.
How it is tested
Every property runs the page's own js/heron.js — its series ids, its transactions, its listing reader — against live Robinhood Chain state through eth_simulateV1: the real Valorem, the real Seaport, the real stock tokens and USDG, with test wallets funded by state override. Nothing is broadcast. Expected amounts are computed in the test from raw balances and Valorem's own answers, never by asking the module under test.
The last run: 10/10 properties and 278 checks passed against live state at block 76,790,106 (30 Sep 2026).
| Property | What it proves | Checks |
|---|---|---|
| ids | 4 series opened on Valorem: each id equal to Valorem's own, each record read back as the same series; 3 foreign option types read back as nothing | 97 |
| write | a call locks one token per contract and a put the strike per contract, to the unit; options and one claim are minted; one unit short of approval is refused | 25 |
| ask | 4 contracts at $2.37: 3 bought for exactly 3× the price, then an over-sized take clamped to the 1 left; read as open 4 → open 1 → filled | 19 |
| bid | a bid for 2 filled by a writer: exactly 2× its price one way, 2 options the other, then read as filled | 13 |
| exercise | a call pays the strike for one token and a put delivers one token for the strike, each to the unit; exercising more than is held is refused | 26 |
| redeem | write 3, 1 exercised: before expiry redeeming is refused; after it, exercising is refused and the writer gets exactly 2 tokens + one strike back | 17 |
| status | cancelled, under-held, ended and counter-voided listings each read as what they are, with nothing left to take; a stranger's cancel is refused | 19 |
| reader | 1 of 9 hand-built orders is a listing; 8 near-misses (paid to someone else, a zone, the claim NFT offered, a price that does not divide, paid in a stock, a price that changes, not partially fillable, a conduit) are not; a foreign series is never fillable | 18 |
| fees | with the switch forced on at its real storage slot: collateral alone is refused, collateral + 15 bp is taken to the unit | 11 |
| fair | Φ to 2e-7, put–call parity, the textbook 7.97, intrinsic at expiry; today's price equals the feed × multiplier read here, or the pool once the feed is four days old | 33 |
Then a sabotage sweep (tools/sabotage.mjs) plants 27 bugs, one at a time, in a copy of js/heron.js and requires the property named for each one to fail. 27/27 were caught.
The browser run: 8/9 journeys (20 checks) clicked through the real pages in Chrome with test wallets against a private copy of the live chain (30 Sep 2026).
Credits
Photograph: Early morning fog at the Davis Bayou National Park by Fsendek1904, CC BY-SA 4.0, softened and cropped by Heron (the crops are under the same licence). Type: Instrument Serif, Figtree and DM Mono, from Google Fonts.
Valorem's clearinghouse is by Valorem Labs (BUSL 1.1); Seaport is by OpenSea. Heron is not affiliated with either, nor with Robinhood.