Olea, precisely
Olea is a web page that writes, lists, buys, exercises and redeems fully collateralised options on the tokenized stocks of Robinhood Chain. It holds nothing and deploys nothing. Every transaction it builds is a call from your own wallet to one of three kinds of contract that were already there: a token (a stock, or the dollar USDG), the Valorem Options Clearinghouse, or Seaport 1.6.
A covered call is a promise to sell shares you hold at your strike, before your date, if the buyer wants them. A cash-secured put is a promise to buy shares with dollars you hold, at your strike, before your date, if the buyer wants to sell. In both cases the buyer pays you now for the promise, and what you promise is locked in Valorem until the promise ends.
The option, exactly
Valorem stores a series as six numbers: what is locked and how much per option, what exercising costs and how much per option, when exercising may start and when the option expires. Olea fixes all of them the same way for every series it writes, so that options on the same stock, strike and Friday are interchangeable between writers:
- One unit is one hundredth of a share. A call locks 1016 of an 18-decimal stock per unit. A $360.00 strike costs $3.60 per unit to exercise, exactly 3,600,000 in USDG's own units. Strikes are whole cents, and no floating-point number ever reaches an amount.
- A put is the mirror. It locks strike ÷ 100 USDG per unit, and exercising it delivers 1016 of the stock per unit.
- Expiry is a Friday at 20:00 UTC. That is 4pm in New York while daylight saving lasts, when the underlying market closes, and an hour after the close in winter. The app offers the next eight Fridays, none closer than a day.
- Exercisable at once and until expiry ("American"): the start time is zero.
- Assignment. When several people write the same series, Valorem spreads each exercise over their claims by its own seeded rule, not first-come. Between them the claims always hand back exactly what was locked, which a property checks (T5 below).
The id of a series is the first 20 bytes of keccak256(abi.encode(the six numbers)), shifted left 96 bits. The page computes it before anything exists, and property 1 asks Valorem's own newOptionType for the same series and compares. A claim id is the option id plus a claim number in the low 96 bits. A claim is your receipt, and the page never lists one for sale.
Every transaction
| You | Calls | Approves |
|---|---|---|
| Write | the stock or USDG → approve(Valorem); Valorem → newOptionType (only the first writer of a series); Valorem → write(optionId, units) | exactly what this write locks, plus Valorem's fee if it is switched on. Never unlimited. |
| List | Valorem → setApprovalForAll(Seaport, true) (once per wallet); Seaport → validate([order]) | Seaport may move your Valorem tokens, but only as an order of yours says. The order offers exactly the option units you listed, for USDG paid to you. You are the order's author and its sender, so no signature is needed and the whole order lands in Seaport's public log. |
| Buy | USDG → approve(Seaport); Seaport → fulfillAdvancedOrder with numerator = units bought and denominator = units listed | exactly the price of what you buy |
| Exercise | USDG or the stock → approve(Valorem); Valorem → exercise(optionId, units) | exactly the strike (or the shares, for a put), plus the fee if on |
| Redeem | Valorem → redeem(claimId), after expiry | nothing |
| Take down | Seaport → cancel([order]) | nothing. Your options stay in your wallet. |
A wallet that can send several calls as one atomic batch (EIP-5792) gets them in one request, and any other wallet gets them one at a time. Before any wallet is asked, the page reads every call it built back through its own inspector (assertWrite, assertList, assertBuy, assertExercise in js/order.js). The inspector refuses an approval for more than the action needs, a purchase sent anywhere but Seaport, options sent to anyone but you, a listing that pays anyone but its writer, and a write that registers a different series from the one on screen.
The board
There is no Olea server. The list of options for sale is Seaport's own OrderValidated log, read straight from Robinhood's node. The page scans from the block Valorem was deployed (59,378,584, Sep 10) a million blocks at a time, halving any range the node calls too heavy. It keeps only orders that offer exactly one Valorem option and ask exactly one USDG payment to their writer, and it reads each of them back at one block.
A listing shows as buyable only if Seaport has it, it is not cancelled or sold out, the writer's counter has not moved, the listing and the option are both still open, the writer still holds the options, and Seaport may deliver them. Otherwise it shows the first reason it cannot be bought. Only Robinhood's own node is asked for history: another public node answers old log queries with an empty list, which would read as "nobody has listed anything".
Valorem, read back
The clearinghouse at 0x9a7b40e5c1dB1Af822ef091c990b58b02C78C0C0 was deployed on Sep 10 by an address that is not ours. tools/verify-source.mjs fetches its verified source and Valorem's repository (valorem-labs-inc/clear) and compares them line by line. A control with one changed character must be caught. The source on this chain matches the repository's master. Against the tagged release v1.0.0, it differs in 3 lines:
| Line | v1.0.0 | On this chain |
|---|---|---|
| 104 | uint8 public constant feeBps = 5; | uint8 public constant feeBps = 15; |
| 363 | if (expiryTimestamp < (block.timestamp + 1 days)) { | if (expiryTimestamp < (block.timestamp + 1 minutes)) { |
| 368 | if (expiryTimestamp < (exerciseTimestamp + 1 days)) { | if (expiryTimestamp < (exerciseTimestamp + 1 minutes)) { |
Zellic audited Valorem's code in December 2022 and April 2023, and the reports are in that repository. We do not know which of the two versions the April report covers. We say so, and do not call this copy audited. The practical difference is two numbers: the fee, if ever switched on, would be 0.15% rather than 0.05%, and a series may expire one minute after it is written rather than one day. The page never writes a series closer than a day.
The fee switch belongs to 0xdAe7e82A2E7D566C67E87C164B05a1C560190782. It can turn a 0.15% fee on writing and exercising on or off, sweep what it has collected, and nothing else. It cannot touch collateral. It is off at block 67,330,607, and the app reads it again before every transaction and adds it to what you approve if it is ever on. The clearinghouse has 65 series registered and 3 writes so far, none of them by this site.
Which stocks
A stock is listed only if Robinhood publishes a price feed for it on this chain, because that price is what the strike ladder, "how far from today's price" and the fair-price estimate are measured against. Feeds are not enumerable, so tools/scan-market.mjs finds them through Morpho Blue's markets, whose oracles name them. It found 35 stocks with a genuine Robinhood feed at block 67,374,434. It set aside 15, 15 of them because their "feed" was a Uniswap pool's price read back, which is not Robinhood's. 2,719 misprinted rounds were dropped, every one of them from Jun 22–Jun 23, the feeds' first days, when answers were written at 18 decimals instead of 8.
| Stock | Robinhood's price | Measured swings | Rounds read | Feed |
|---|---|---|---|---|
| AAPL Apple | $335.38 | 21.3% | 628 | Robinhood AAPL / USD |
| AMD AMD | $559.42 | 47.9% | 2,766 | RHAMD / USD |
| AMZN Amazon | $253.86 | 24.9% | 766 | Robinhood AMZN / USD |
| ASML ASML Holding NV | $1,676.63 | 38.8% | 1,761 | Robinhood ASML / USD |
| BABA Alibaba | $113.77 | 37.7% | 1,625 | Robinhood BABA / USD |
| CLSK CleanSpark | $14.37 | 81.9% | 4,731 | Robinhood CLSK / USD |
| COIN Coinbase | $193.91 | 88.2% | 2,811 | Robinhood COIN / USD |
| CRCL Circle Internet Group | $91.76 | 96.0% | 4,136 | Robinhood CRCL / USD |
| CRWV CoreWeave | $81.33 | 86.7% | 4,044 | Robinhood CRWV / USD |
| DELL Dell | $570.72 | 80.7% | 2,315 | Robinhood DELL-USD |
| EWY iShares MSCI South Korea fund | $180.93 | 47.2% | 3,140 | Robinhood EWY / USD |
| GME GameStop | $22.55 | 29.4% | 825 | Robinhood GME / USD |
| GOOGL Alphabet Class A | $350.47 | 22.8% | 766 | Robinhood GOOGL / USD |
| INTC Intel | $109.05 | 58.4% | 3,817 | RHINTC / USD |
| IONQ IonQ | $39.09 | 68.2% | 3,814 | Robinhood IONQ / USD |
| META Meta Platforms | $666.76 | 35.2% | 1,203 | Robinhood META / USD |
| MSFT Microsoft | $495.82 | 23.4% | 737 | RHMSFT / USD |
| MSTR Strategy Inc. | $152.64 | 98.1% | 3,903 | Robinhood MSTR / USD |
| MU Micron Technology | $1,014.43 | 53.0% | 4,697 | RHMU / USD |
| NBIS Nebius Group | $222.71 | 110.8% | 6,418 | Robinhood NBIS / USD |
| NVDA NVIDIA | $222.45 | 40.3% | 1,037 | RHNVDA / USD |
| ORCL Oracle | $147.96 | 51.0% | 2,024 | Robinhood ORCL / USD |
| PLTR Palantir Technologies | $177.60 | 46.8% | 1,914 | Robinhood PLTR / USD |
| QQQ Invesco QQQ | $720.37 | 13.4% | 346 | Robinhood QQQ / USD |
| RGTI Rigetti Computing | $15.74 | 66.2% | 3,611 | Robinhood RGTI / USD |
| RKLB Rocket Lab Corporation | $64.61 | 43.3% | 4,122 | Robinhood RKLB / USD |
| SGOV iShares 0-3 Month Treasury Bond | $101.11 | 0.7% | 62 | Robinhood SGOV-USD |
| SLV iShares Silver Trust | $59.85 | 37.3% | 1,375 | Robinhood SLV / USD |
| SNDK Sandisk Corporation | $1,792.32 | 82.2% | 6,935 | RHSNDK / USD |
| SPCX Space Exploration Technologies Corp. Class A Common Stock | $152.82 | 52.4% | 3,091 | Robinhood SPCX / USD |
| SPY SPDR S&P 500 ETF Trust | $761.55 | 10.0% | 131 | RHSPY / USD |
| TSLA Tesla | $363.80 | 44.7% | 1,242 | RHTSLA / USD |
| TSM Taiwan Semiconductor Manufacturing | $434.26 | 27.6% | 1,347 | Robinhood TSM / USD |
| USAR USA Rare Earth | $15.61 | 64.1% | 3,000 | Robinhood USAR-USD |
| USO United States Oil Fund | $154.54 | 41.4% | 1,466 | RHUSO / USD |
Set aside
| Stock | Why |
|---|---|
| GLD | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| RDDT | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| COST | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| DJT | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| NFLX | reads a Uniswap pool ("Uniswap V3 Pool Price in USD"); "ETH / USD" does not name NFLX in USD |
| RBLX | reads a Uniswap pool ("Uniswap V3 Pool Price in USD"); "ETH / USD" does not name RBLX in USD |
| MRNA | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| RIVN | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| HIMS | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| TTWO | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| AMC | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| LLY | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| LULU | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| IBM | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
| F | reads a Uniswap pool ("Uniswap V3 Pool Price in USD") |
The fair price
Beside every price, the page shows what the option would be worth under Black–Scholes with a zero interest rate (USDG pays nothing here). It uses the stock's current Robinhood price and its measured volatility: the annualised standard deviation of its last 30 daily log returns, with each day's close taken as the feed's price at 20:00 UTC. Measured swings run from SGOV 0.7% to NBIS 111% a year.
It is an estimate, and the page calls it one. Past swings are not future swings, real options markets price in things this model does not, and on a new market with few buyers the price is whatever a buyer will actually pay, which may be much less. The same function also gives the model's chance that an option ends in the money, which is the number a writer most needs: how likely am I to part with the shares?
The backtest
tools/backtest.mjs writes a one-week covered call 5% above the price, every Friday, on every listed stock, over the weeks Robinhood's feeds cover with 30 days of history before them. Each call is priced fairly from that stock's trailing measured volatility, which is generous to the writer because it assumes a buyer paid that. At the next Friday's close, if the stock is above the strike, the shares are called away at the strike.
- 204 stock-weeks, 35 stocks, Fridays Aug 7 to Sep 11.
- Called away in 23% of weeks. The model expected 24%.
- Median payment 1.43% of the price a week. It is pulled up by the most volatile stocks, and far lower on steady ones.
- Summed across every stock-week: 382 pts collected, 274 pts given up above strikes.
- The covered call did better than just holding in 84% of weeks. Mean weekly return was 1.79% written against 1.26% held.
- The worst single week: NBIS, the week of Aug 7, when 42% of the price went above the strike to the buyer.
6 Fridays is a short window, and in it these stocks rose 1.26% a week on average, which is when a covered call gives most away. Treat this as evidence of how the trade-off behaves, not as a forecast. Every week is in data/backtest.json.
What it costs to use
Olea charges nothing. You pay the chain's gas, measured by tools/probe-gas.mjs on a fork at 0.0685 gwei with ETH at $2,637.20 (Robinhood's own ETH/USD feed):
- Write and list a new series, first time from this wallet: $0.104
- Write and list, series already registered, Seaport already allowed: $0.053
- Buy: $0.032 · Exercise: $0.036 · Redeem: $0.020 · Take down: $0.007
Risks
- A covered call caps your gains. Above the strike, the rest of the rise goes to the buyer. See the backtest.
- A put can make you buy a falling stock at more than it is worth.
- Nobody may buy. This is a new market. Your collateral stays locked until Friday either way, unless you exercise your own unsold options, which costs you the strike until Friday.
- Locked means locked. Once sold, the shares or dollars stay in Valorem until the buyer exercises or Friday passes.
- The stock token can be paused. Robinhood's stock tokens have a pause switch and an administrator. A paused stock cannot be written, exercised or redeemed until it is unpaused.
- Contract risk. Valorem and Seaport are other people's code. Valorem's copy here differs from its audited release in three named lines. Olea is not audited.
- The fair price is a model. It can be wrong in either direction.
- Not advice, and not everywhere. Tokenized stocks on Robinhood Chain are not available in every country. Nothing here is an offer by us.
How it is checked
Every figure on these pages comes from a file in data/ written by a tool, and the build refuses to publish a page with a figure missing. The checks, and their latest results:
| Check | Result | What it proves |
|---|---|---|
| P1 | holds | the option id this page computes is the id Valorem assigns |
| P2 | holds | writing a call locks exactly the shares and mints exactly the options and one claim |
| P3 | holds | writing a put locks exactly the strike in dollars |
| P4 | holds | a purchase moves exactly the price one way and the options the other, and nothing else |
| P5 | holds | partial purchases add up, and more than remains is refused |
| P6 | holds | exercising a call pays the strike and delivers the shares (control: a stranger with no options is refused) |
| P7 | holds | exercising a put delivers the shares and pays the strike |
| P8 | holds | a taken-down listing is refused, and its twin still sells |
| P9 | holds | a listing whose writer no longer holds the options is refused, and a held one sells |
| P10 | holds | a listing Seaport may not deliver is refused, and sells once it may |
| P11 | holds | a purchase with one unit too little approved is refused, and the exact one is enough |
| P12 | holds | a stranger cannot redeem the writer's claim (control: the writer is refused only for being early) |
| P13 | holds | a series that would expire within the minute cannot be written (control: the Friday series can) |
| P14 | holds | a claim — the writer's receipt for the collateral — is never listed: the builder and the reader both refuse one |
| P15 | holds | CONTROL: a balance written to the wrong storage slot funds nothing |
| P16 | holds | the page's strike, unit and Friday are the chain's: one share of a $K call costs exactly $K to exercise (reference computed without js/terms.js) |
| P17 | holds | with Valorem's fee switched on, the page approves exactly the fee on top (control: the same write without it is refused) |
| S1 | holds | ABI surface: every call built reads back as exactly what was intended |
| S2 | holds | ABI surface CONTROL: an approval for more than the purchase pays is refused |
| S3 | holds | ABI surface CONTROL: a purchase sent anywhere but Seaport is refused |
| S4 | holds | ABI surface CONTROL: a purchase that sends the options elsewhere is refused |
| S5 | holds | ABI surface CONTROL: a listing that pays a third party is refused |
| S6 | holds | ABI surface CONTROL: a write that registers a different series is refused |
| S7 | holds | ABI surface: every selector Olea sends exists in the contract it is sent to |
| T1 | holds | after expiry a call writer's claim pays back exactly the unexercised shares plus the strike for the rest |
| T2 | holds | a put writer's claim pays back exactly the unexercised dollars plus the shares delivered |
| T3 | holds | an exercise after expiry is refused (control: the same exercise before expiry went through) |
| T4 | holds | a redemption before expiry is refused, and the same redemption after it pays |
| T5 | holds | two writers of one series share an exercise, and between them get back exactly everything |
| T6 | holds | a listing that has closed is refused (control: the same listing sold before it closed) |
| Sabotage | 25/25 | deliberate breaks in the page's own builder, each caught by the check named for it after a clean control |
| Fuzz | 8/8 | 2 seeds × 36 random steps, 11 invariants after each; planted breaks caught by the invariant named for each |
| Browser, fork | 26/26 | the real page in Chrome under the deployed security policy, outcomes read from the chain |
| Browser, live chain | 10/10 | the deployed page against the real node |
| Addresses | 75/75 | every address in the config asked to prove what it is, with a control |
| Valorem source | matches | the verified source on chain against the repository, with a one-character control |
| Palette | 76/76 | every colour pair, with a control pair that must fail |
Not built
- No matching and no market maker. Writers list, buyers buy. There are no bids, no quotes from anyone else and no automatic pricing beyond the estimate.
- No early close for a sold option. You cannot buy back an option someone else holds unless they list it.
- No other expiries or styles. Fridays only, American only, one hundredth of a share per unit.
- No native ETH, no spreads, no margin. Every option is backed in full by what it promises.
- No alerts. Nothing will tell you your option is in the money, or that your claim can be redeemed. Look at "Yours".