Docs

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:

  1. Approve Valorem to take the collateral (the stock for calls, USDG for puts), exactly the amount this write needs.
  2. Open the series — newOptionType — only if nobody has written it before.
  3. Write — write(optionId, n). Valorem takes the collateral and mints n option tokens plus one claim NFT to you. The claim is your receipt for the collateral.
  4. Let Seaport deliver sold options — setApprovalForAll(Seaport, true) on Valorem, once per wallet — only if you list.
  5. List — Seaport's validate with your order: n option tokens for n × premium USDG, 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 its OrderValidated event.

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):

StockA yearDaysFeed rounds
NVDA NVIDIA31.4%31387
SPCX SpaceX43.0%31859
USO United States Oil Fund44.4%31711
QQQ Invesco QQQ14.8%31116
GOOGL Alphabet23.3%31270
MU Micron Technology56.4%31993
CRCL Circle Internet Group94.0%312,009
MSFT Microsoft21.2%31241
AMZN Amazon25.3%31263
MSTR Strategy98.3%311,976
SPY SPDR S&P 500 ETF10.3%3154
GLD SPDR Gold Trust19.7%1136
AAPL Apple22.2%31223
META Meta Platforms47.7%31629
INTC Intel68.6%311,228
DELL Dell62.3%311,316
GME GameStop37.1%31585
AMD AMD54.6%31796
TSM TSMC26.2%31323
PLTR Palantir42.0%31669
SLV iShares Silver Trust44.0%31577
SNDK Sandisk77.0%311,635
ASML ASML Holding37.3%31527
USAR USA Rare Earth66.4%311,410
TSLA Tesla42.1%31570

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 master branch, 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

Valorem Options Clearinghouse0x9a7b40e5c1dB1Af822ef091c990b58b02C78C0C0
Multicall30xcA11bde05977b3631167028862bE2a173976CA11

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).

PropertyWhat it provesChecks
ids4 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 nothing97
writea 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 refused25
ask4 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 → filled19
bida bid for 2 filled by a writer: exactly 2× its price one way, 2 options the other, then read as filled13
exercisea 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 refused26
redeemwrite 3, 1 exercised: before expiry redeeming is refused; after it, exercising is refused and the writer gets exactly 2 tokens + one strike back17
statuscancelled, under-held, ended and counter-voided listings each read as what they are, with nothing left to take; a stranger's cancel is refused19
reader1 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 fillable18
feeswith the switch forced on at its real storage slot: collateral alone is refused, collateral + 15 bp is taken to the unit11
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 old33

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.