Skip to content
Finance Lessons

DeFi Options & On-chain Volatility

On-chain Implied Vol & Oracles

Where the volatility number even comes from on-chain: AMM-parameterized vol surfaces and DVOL-style indices, the laggy sample-and-held oracle problem, and how a stale implied-vol read turns into an arbitrageur's free lunch.

16 min Updated Jun 16, 2026

You can derive every Greek, fit a flawless vol surface, and build a variance swap that would make a CBOE quant nod approvingly — but the moment you put that math on a blockchain, one quiet little input decides whether your contract is a fair market or a piñata: the volatility number it reads. Off-chain, implied vol is a living, breathing thing that updates with every tick. On-chain, it’s a number someone wrote down a few blocks ago and a smart contract is now treating as gospel. This lesson is about where that number comes from, why it’s always a little (or a lot) wrong, and who profits from the difference.

Before you read — take a guess

An on-chain options AMM needs an implied-volatility input to price its quotes. What is the most fundamental obstacle to feeding it a live, accurate vol number?

An option needs a volatility input — so where does on-chain vol come from?

Pricing any option requires an implied-volatility input — it’s the one Black–Scholes parameter you can’t observe directly, and it’s what the whole market argues about. So an on-chain options protocol has to get that number from somewhere. There are three sources, and they trade off freshness against trust:

SourceHow it worksFreshnessTrust assumption
(a) Governance/keeper-set AMM paramsThe protocol stores a vol surface; a DAO vote or a permissioned keeper bot updates itSlow (hours to days, or whenever the keeper fires)Trust the keeper/governance not to be lazy or evil
(b) Oracle feed of implied volAn off-chain index (e.g. a DVOL-style number) is pushed on-chain by an oracle networkMedium (every few blocks)Trust the oracle’s data + update cadence
(c) Derived from on-chain option pricesBack out IV from the protocol’s own traded option pricesAs fresh as trading is — but circular and thinTrust that on-chain liquidity is deep enough to be meaningful

Each has a failure mode. Governance-set params are stale by design — nobody re-votes the surface mid-crash. An oracle feed is fresher but only as fresh as its write schedule. And deriving IV from your own thin on-chain order flow is gloriously circular: you price options off prices that were themselves priced off your possibly-wrong vol. Most real protocols use a blend, leaning on (a) or (b) with guardrails.

Info:

The recurring theme

Off-chain, implied vol is a verb — it’s constantly being re-quoted. On-chain, it’s a noun — a stored value. Every problem in this lesson flows from that one grammatical demotion.

On-chain vol surfaces and the skew

A protocol that quotes many strikes and expiries can’t store a separate number for every one — gas makes that absurd. Instead it stores a parameterized surface: a compact formula like

IV(m,T)=baseIV(T)+skew(T)(1m)\text{IV}(m, T) = \text{baseIV}(T) + \text{skew}(T)\cdot(1 - m)

where m=K/Sm = K/S is moneyness, baseIV(T)\text{baseIV}(T) is the at-the-money vol for each expiry TT, and skew(T)\text{skew}(T) is a slope term. Sometimes a curvature term gets added for the wings. The whole surface might be just a handful of stored numbers per expiry — cheap to write, cheap to read.

One model, many volatilitiesImplied vol at this strike: 20.0%
0%10%20%30%40%50%0.700.851.001.151.30
Implied vol at this strike
20.0%
Flat Black–Scholes vol
20.0%

Black–Scholes assumes one volatility for every strike — the dashed flat line. Markets disagree: equity indices bid up downside-put vol into a left-leaning smirk (crash insurance), while FX bows both wings up into a symmetric smile. Each strike trades on its own implied vol.

The shape that matters most in crypto is the skew. Equity indices have a famous left-leaning smirk (everyone wants crash insurance on the S&P). Crypto typically shows a rich downside skew too — puts bid up because the asset can gap down violently — but in euphoric bull runs the skew can flip and calls get expensive (FOMO insurance to the upside). Either way, the on-chain surface has to capture this with very few parameters, because every parameter is a storage slot someone pays gas to update.

That coarseness is the catch. A real off-chain desk might fit dozens of strikes with a smooth SVI surface; an on-chain AMM might have one base vol and one skew slope per expiry. It’s a low-resolution photo of a high-resolution market — fine in calm weather, lossy in a storm.

Fill in the structural trade-off of an on-chain vol surface.

Pick the right option for each blank, then check.

An on-chain surface stores only a few parameters per expiry because every stored value costs to write. That makes the surface , so it approximates the true smile rather than fitting it exactly.

In a typical crypto vol surface, which statement about skew is most accurate?

DVOL and on-chain volatility indices

The crypto market wanted its own “VIX,” and Deribit obliged with DVOL — a 30-day forward-looking implied-volatility index for BTC and ETH. The construction is the same model-free, variance-swap-style recipe you learned for the VIX: take a strip of out-of-the-money options across strikes for the relevant expiries, integrate their prices to extract the market’s expected variance, then annualize and quote it as a single volatility number.

Quick numeric sanity check on the units: if a 30-day variance strip implies an annualized variance of σ2=0.64\sigma^2 = 0.64, then DVOL reads

σ=0.64=0.80=80%.\sigma = \sqrt{0.64} = 0.80 = 80\%.

That 80% is an annualized number — the 30-day expected move is roughly 80%×30/36523%80\% \times \sqrt{30/365} \approx 23\%. (Crypto vol numbers look terrifying next to the VIX’s usual teens-to-twenties precisely because the underlying is wilder.)

What’s DVOL for? Three things, and they escalate:

  1. A reference — a single quotable “BTC vol is at 55” you can put in a dashboard or a research note.
  2. A tradable — Deribit lists DVOL futures, so you can take a clean view on vol-of-vol without legging into a strip of options yourself.
  3. An oracle input — the live push to bring a DVOL-style index on-chain so protocols can read a credible market vol instead of a governance guess. This is the dream and the danger: a real, market-implied vol number is far better than a stale stored parameter — but only if the oracle delivering it is fresh. Which brings us to the whole problem.

Pick a term, then click its definition.

The oracle problem: latency, staleness, manipulation

Here’s the crux. A blockchain cannot stream a live vol number. It updates in discrete blocks, and external data only enters through an oracle write — a transaction that stamps a value into storage. Between writes, every contract reads that frozen value. So on-chain implied vol is, structurally, a sample-and-hold signal: it tracks reality at the moment of each write, then flatlines until the next one.

Play with the cadence below. The smooth blue line is the true, continuously-moving vol an off-chain desk sees; the stepped orange line is what the oracle has actually written on-chain; the shaded band is the staleness gap between them.

On-chain vol oracle: the price of a stale number
True implied vol (live, off-chain)On-chain oracle (sampled & held)Staleness gap
4070100130Time (blocks)Annualized implied vol
Worst staleness gap: 38%

A blockchain cannot stream a live volatility number — an oracle writes one only every few blocks, then on-chain contracts read that frozen value until the next update. In calm markets nobody notices. But when vol gaps higher in a crash, the oracle keeps serving yesterday’s low number, so an on-chain options AMM quotes vol far too cheap — and an arbitrageur buys those underpriced options against the lagging oracle. Slower updates widen the gap. On-chain implied vol is always a delayed, manipulable approximation of the real thing.

Notice where the gap is widest: not in the calm stretches, but right in the middle of the spike. When vol is crawling sideways in the low 50s, a value held for three or six blocks is basically correct — nobody gets hurt. But when vol gaps from 55 to 118 during a crash, the oracle is still serving the pre-crash low number for several blocks. The slower the update cadence (toggle to every 6 blocks), the wider and longer that gap. Staleness isn’t a constant tax; it’s a bill that comes due exactly when volatility is most valuable.

And “staleness” is the honest failure. The malicious cousin is manipulation: if the oracle derives vol from a thin on-chain source, an attacker can push that source around — a flash-loan-funded shove on a shallow pool, or stuffing one block with lopsided trades — so the contract reads a vol the attacker chose. Latency, staleness, and manipulation are three faces of the same flaw: the on-chain number is a delayed, gameable approximation of the real one.

Place each item in the right group.

  • Quiet weekend, no catalysts, 6-block update cadence
  • A surprise CPI print hits and the market gaps; oracle still shows the pre-print vol
  • Vol drifting slowly lower over the day with frequent oracle writes
  • Vol has been flat at 50 for an hour; oracle last wrote 4 blocks ago
  • A liquidation cascade just doubled realized vol in two blocks; oracle won't update for 5 more
  • Attacker flash-loans a shove on the thin pool the vol oracle samples
Warning:

Stale doesn't mean wrong-on-average — it means wrong-when-it-counts

An oracle that’s correct 95% of the time can still be ruinous, because the 5% when it’s stale is perfectly correlated with the moments — spikes, gaps, cascades — when being wrong is most expensive. Average error is the wrong metric; error during the spike is the one that empties the vault.

A stale vol read is a free lunch for an arbitrageur

Let’s put numbers on the damage. Suppose an on-chain AMM is selling a 7-day BTC at-the-money call, and its oracle vol is stuck at the pre-crash 55% while the true market vol has gapped to 110%.

A rough at-the-money option value scales nearly linearly with vol over short horizons: price0.4SσT\text{price} \approx 0.4 \cdot S \cdot \sigma \cdot \sqrt{T}. With a spot S=60,000S = 60{,}000 and T=7/3650.0192T = 7/365 \approx 0.0192 years, T0.1385\sqrt{T} \approx 0.1385:

QuoteVol usedCall value
AMM (stale oracle)55%0.4×60,000×0.55×0.13851,8280.4 \times 60{,}000 \times 0.55 \times 0.1385 \approx 1{,}828$1,828
Fair (true market)110%0.4×60,000×1.10×0.13853,6560.4 \times 60{,}000 \times 1.10 \times 0.1385 \approx 3{,}656$3,656

The AMM is selling for $1,828 an option that’s truly worth $3,656 — a $1,828 discount, about 50% off. That is not a typo, it’s an invitation. An arbitrageur buys the underpriced call from the AMM, and either sells the identical risk off-chain at the fair 110% vol or simply holds a position they paid half-price for. The arbitrageur pockets the spread; the LPs / vault on the other side sold cheap insurance into a hurricane and eat the loss.

This is textbook adverse selection — the dreaded toxic flow. The only counterparties who rush to trade against a stale quote are the ones who know it’s stale. The AMM doesn’t get a representative slice of the market; it gets specifically the trades where it’s on the losing side. Over time that’s a steady drip of value out of the pool, paid by whoever supplied it.

And who supplied it? Often a DOV (DeFi Options Vault) full of ordinary depositors who clicked “deposit and earn yield.” They never see the oracle; they just watch their vault underperform during exactly the volatile weeks when their short-vol strategy was supposed to earn the most premium. The staleness gap is a silent transfer from passive depositors to active arbitrageurs.

Info:

Foreshadowing — lesson 6

Stale-oracle arbitrage is the quoting-time leak. There’s a second, nastier leak at settlement time: when an option expires, which price gets used to settle it can be nudged by whoever controls block ordering. That’s MEV at settlement — the subject of lesson 6.

Stress-test your grip on stale-vol arbitrage

Question 1 of 30 correct

Vol spikes from 50% to 100% but the on-chain AMM still quotes options off a stale 50% oracle. What happens?

Check your answer to continue.

Select EVERY mitigation that genuinely reduces stale-vol arbitrage against an on-chain options protocol. (More than one is correct.)

Success:

Key takeaways

  • An on-chain option needs an IV input, and it can only come from three places: governance/keeper-set AMM params, an oracle vol feed, or vol derived from on-chain prices — each trading freshness against trust.
  • Protocols store a coarse parameterized surface (base IV + skew per expiry) because every parameter costs gas; crypto’s skew is usually rich on the downside but can flip to calls in a mania.
  • DVOL is the crypto VIX — a 30-day model-free implied-vol index from an OTM option strip — and the prize is bringing such an index on-chain as a tradable oracle reference.
  • The fatal flaw is sample-and-hold staleness: a chain can’t stream vol, so an oracle writes it every few blocks and contracts read the frozen value. The gap is harmless in calm markets and widest exactly during a spike.
  • A stale low vol makes the AMM sell options ~50% too cheap; arbitrageurs scoop the discount as toxic flow, and DOV depositors quietly eat the loss. (Next: MEV at settlement, lesson 6.)

Mark lesson as complete