Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.

How positions are priced

Every quote is computed on chain from your four inputs and the protocol's own state. There is no market maker, no off-chain pricing server, and no discretion. The same inputs against the same state always produce the same quote, and anyone can make the same call and get the same answer.

The price it starts from

A quote starts from a signed oracle price, fetched by the app and verified inside the contract. The contract checks it against an independent Chainlink feed, against the Base sequencer uptime feed, and against the size of the latest move. If any check fails, the quote reports a safety failure and no position can open. The protocol never falls back to an older price to stay available.
The opening price is then nudged against you by a small spread, as on any venue.

Volatility comes from the market's own history

To know what your position is worth, the pool needs to know how much the market has been moving. It measures that from the market's own price history, sampled on chain, at more than one speed, so a market that has started moving today is not priced from a quiet week. Anyone can submit a sample and the keeper normally does. Without a recent enough sample the ticket reports Price safety check failed and nothing opens.
The measured figure is adjusted before it values your option:
  • the pool sells volatility at a margin above what it measures, which is where its edge comes from;
  • strikes further from today's price carry a skew, because the market reaching them is worth more than a small move scaled up;
  • the result is held inside a floor and a ceiling, so neither a dead market nor a panic produces a nonsense price.
Each of those is a fixed rule in the contract rather than a mark somebody sets.

Your target comes from a grid

Strikes come from a fixed grid, spaced evenly in percentage terms across the whole price range. Every strike the protocol can quote sits on that grid, which is why the target on your ticket is a round-looking number rather than an exact percentage from today's price.

Leverage is the outcome of a search

Your leverage tier is not a number the protocol stores. It is the target a search aims for.
The search looks for the strike closest to today's price at which the exposure your leverage implies still fits inside what you are paying. The open transaction re-verifies that choice against live state, so the app cannot hand the protocol a strike the protocol would not have picked itself.
Higher leverage means more exposure for the same money, so each unit of it has to cost less, so the strike moves further out. That is the whole reason leverage moves your target.

A busy pool prices more carefully

When much of a pool is already locked against open positions, the strike test is made harder, and your target lands a little further from today's price. It applies to which strike you get, not to what you pay for it: the premium is the fair value of the strike you end up with.

The premium

What you pay is the fair value of the option at your strike plus the protocol's fee, capped at the budget you entered. The pool's share is floored by the liability the position adds to its book, so an open can never leave depositors worse off. When the premium cannot cover that floor, the protocol tries a smaller position once and refuses the trade if it still cannot, with Exceeds current risk limits on the button.
The premium can come in below your budget, because strikes are discrete. The ticket's You pay / max loss is the premium you are charged. A premium that is a negligible share of the position is refused, so a position can never be almost free.

Quote validity

A quote is stamped with the oracle price's publication time and lasts a short window, up to 30 seconds and less when volatility is high. The app refreshes it before it lapses. When you confirm, the open transaction carries the strike you were quoted, a minimum size, a worst acceptable entry price, and a deadline. The protocol recomputes everything against live state and opens only if the result honours all four. If it cannot, the trade fails and you are charged nothing.

Position limits

Before opening, the protocol checks the position against the pool's limits. Each one is a share of the pool's value:
LimitWhat it bounds
UtilisationEverything locked against open positions after this one
One positionThis position's notional
One strikeAll notional at the same strike
One expiryAll notional settling at the same hour, per direction
Opened this hourAll notional opened in the current hour
A position over any limit is refused with the reason on the button. Together the limits keep a pool spread across prices and settlement times, so no single settlement can take too much of it. The values in force are public state on Base and the app reads them live. Protocol parameters explains which ones can change and how.