Neither. It comes from the feed's update timing.
Chainlink writes a round only when price crosses a fixed barrier
(0.53% for LINK). So the gap between rounds is a passage time, and
Cho & Frees (1988) inverts it: sigma = dยทsqrt(year / mean gap). The
contract holds the last 290 gaps and inverts them inside the buy.
Sanity check where implied vol exists: BTC 34.7 vs Deribit 33.2,
ETH 46.8 vs 47.8.
One sigma per market. Strike and expiry go through Black-Scholes;
the surface is flat by design. A smile has to be fitted to quotes.
This is derived, so it runs on LINK, where there are none.
Deribit lists options on two crypto assets. BTC and ETH. That's the whole market.
Solana doesn't have one. Neither does LINK, AAVE, ARB, or the other hundred assets with a live Chainlink feed. Not for lack of demand. Quoting volatility is a job, and below the top two the job costs more than it pays.
Our contract doesn't need the job. It read those same feeds this morning: SOL 69.8%, LINK 66.4%, AAVE 77.5%. No quoter, no server, no market to ask.
Next: those go live.
Every lending protocol hardcodes volatility. Every perp hardcodes margin bands. Not because they want to, but because there is no volatility oracle to read.
Turns out you can get it from any Chainlink feed's update timestamps. We checked ours against Deribit: BTC 34.7% vs their 33.2%, ETH 46.8% vs 47.8%.
Should we publish this for every feed, free to read, on every chain?
Every option sold on this market pays SATURN holders 10% of the premium. In USDG, automatically, on every sale.
Not a fee switch someone flips later. Not a governance vote. It is a constant compiled into all 17 vaults, so there is no version of this where somebody turns it off.
The market prices itself. When it works, the token gets paid.
Deribit lists options on 2 crypto assets. Two.
Chainlink prices 104 on Base alone.
We priced all of them this morning. BTC came out at 34.7%, Deribit says 33.2%. ETH 46.8%, Deribit says 47.8%.
Nobody quoted anything. The contract counted how often each feed spoke.
Chainlink prices 104 crypto assets on Base. Two of them have an options market.
Our contract never looked at one. It counted how often each feed updates and got BTC within 1.5 points of Deribit, ETH within 1.0.
Then it priced the other 102.
same call, same day, four hours apart.
2,020,037 gas
186,180 gas
it was recomputing volatility from scratch on every single buy. fixed that.
https://t.co/FZrUzSGbyn
https://t.co/sR68EFfkxH
what's actually in this thing
solidity has no exp, no ln, no sqrt, no normal distribution. black-scholes needs all four. wrote them from scratch in fixed point.
the CDF is abramowitz-stegun 7.1.26. polynomial has to fold from a5 down. fold it the other direction and it compiles fine, looks fine, and you lose 3% of probability. found that one the hard way.
v1 shipped and one option purchase cost 2,020,037 gas. it walked 290 oracle rounds on every single buy to rebuild volatility from zero. worked perfectly. nobody's paying that to buy one option.
so we tore it out. every market holds a ring of its last 290 gaps and a running sum now. a buy only reads whatever rounds showed up since last time. same sigma, down to the wei.
186,180 gas. 10.8x.
settlement was the other one. if the contract just reads the feed whenever settle gets called, the losing side sits on an expired option and waits for the price to drift back to them. free extension of the bet. so the round gets named and checked instead.
the first version of this whole project was a liquidity vault. dashboards showed 30% apy. we counted the fees that actually landed in the position. negative 0.5%. killed it that week.
80 tests. fork suite runs against real spacex, real usdg, real chainlink round history.
https://t.co/mDvbZgEi2X
The chain never knew how much a stock moves. Price feeds give a number, not a rhythm. So every onchain options venue hires someone to say the volatility out loud: a server computes it, signs it, posts it. Decentralized options, centrally priced.
Then we noticed something about Chainlink feeds. They don't update on a clock. They update when the price has moved half a percent. Which means the clock IS the number. A stock that moves a lot makes the feed talk fast. Count the timestamps and you have volatility, without reading a single price.
We checked SpaceX. Its feed speaks every 38 minutes on average. That one number says 70% a year. The realized volatility from its actual prices over the same window: 69%.
Nobody told the contract SpaceX is volatile. It counted.
The math is from a 1988 Journal of Finance paper that has been waiting 38 years for an instrument shaped like this. The textbook method on the same data misses by 3.3x. Ours lands on all 18 feeds with one constant.
So the premium is computed inside the transaction that buys the option. 17 stocks, live on Robinhood Chain. Every number reproducible from a public RPC.
The oracle was publishing volatility the whole time. It published it as timing.
https://t.co/0j9SOrt2wQ
https://t.co/mq78pxMXpb
we made options that open on anything with a price feed. listed or not, the chain prices them itself. no quoter, no pricing server, no signed number. here's how that ended up being possible
originally the plan was just: real stock tokens are live on Robinhood Chain, let's build an options market on them. putting Black-Scholes onchain is the easy part. the problem is volatility. option pricing is basically a volatility game and the chain doesn't have that number. which is why every onchain options venue so far imports it, some server computes vol, signs it, posts it. decentralized options where the price is whatever one company's server says. really didn't want to build that.
then i was poking through chainlink feed update history and noticed something weird. it doesn't update on a schedule. some days a new round every few minutes, some days silence for half a day. turns out the feed only publishes when the price has moved about 0.5%. it reacts to movement, not to a clock.
and that's when it clicked. wait. if updates come faster when the price moves more, then the update spacing alone tells you how much the stock moves. without reading a single price. just counting timestamps.
looked it up and the statistics already existed, since 1988. passage-time estimation, Journal of Finance. so we didn't invent the math. chainlink has been running that 1988 experiment for months without knowing it, storing the results onchain. nobody was reading them.
so we tested it. pulled 5,300 rounds across 18 stock feeds and ran three estimators over the exact same data. the funny part: the textbook method is off by more than 2x on 17 of the 18 feeds. the timestamp-only method, divided by one constant (0.915), lands on all 18. spread across assets 3.8%.
the one that got me was SpaceX. its feed updates every 38 minutes on average. that number alone gives you 70% a year. realized vol from its actual prices over the same window: 69%. nobody told the contract SpaceX is a volatile company. it just counted timestamps and got it right.
so now the premium is computed inside the transaction that buys the option. no quoter, no pricing server. 17 real stocks live, SpaceX included. the requirement is not a listing or a market maker, it is a feed that updates on movement. anything with one can have an options market.
everything is written up in 10 pages, every number reproducible from public RPC. the failure modes and open questions are in there too.
https://t.co/mDvbZgEi2X