Skip to content

Prices and lots ​

Runner lists tokens whose prices run from dollars to a millionth of a cent. Each market picks the unit it trades in, so every price on it is a readable whole number.

Lots ​

Quantity is counted in lots. A lot is 10^lot_exponent of the token's smallest units (lot_atoms), chosen by whoever creates the market and fixed for the market's life. Sizes, fills and positions are whole lots, and decay shrinks them in lots.

The lot is the market's, not the token's. Two markets on the same token may trade different lots.

Price units ​

Every price on a market, both the premium and the strike, is quoted in quote-token atoms (USDC atoms) per lot of that market. The desk shows every price per whole token; the conversion uses the market's lot.

text
per-token price = price × 10^base_decimals / (lot_atoms × 10^quote_decimals)

A market is created with the smallest lot worth at least a tenth of a cent (a thousandth of a quote token) at the token's price, unless its creator picks another, so one lot is worth between $0.001 and $0.01:

Token trades atLotA strike at spot is written
$0.0000125100 tokens1,250
$0.0041 token4,000
$1.200.001 token1,200

So a premium of 800 on the first row costs $0.0008 for the right on one lot of 100 tokens. A small lot is what lets a position decay smoothly: decay retires whole lots, so the finer the lot, the less a holder loses to rounding.

The API answers the lot and strike grid a new market of a pair gets at today's price (GET /pairs/{base_mint}/{quote_mint}/terms), and a market created without naming them gets those.

Trade cost ​

For a quantity q in lots at a price p:

text
base leg  = q × lot_atoms        token atoms, exact
quote leg = q × p                USDC atoms, exact

Neither leg divides, so neither rounds. Do the multiplication in 128 bits; a product that does not fit a u64 is refused.

Worked example: a 9-decimal token at $0.45, on a market whose lot is one whole token (lot_exponent = 9). One lot at p = 450,000 costs 450,000 USDC atoms ($0.45) and delivers 10^9 atoms, one whole token.

Comparing markets ​

A price integer means nothing outside its market. To compare two markets on the same token, convert both prices per whole token first: the same premium per token is a different integer on markets with different lots.

When the price moves ​

A market's lot never changes. If the token's price moves so far that the lot no longer fits — one lot worth a fortune after a pump, or a premium under one USDC atom a lot after a collapse — the answer is a new market on the same token with a lot that fits. Anyone can create one, and the old market keeps trading as it is. GET /markets marks each market's lot_fits against today's price and names one canonical market per token, quote and product: the oldest whose lot fits. New positions open there; positions on any other market still close and exercise where they are.

Minimum sizes ​

Each market fixes one floor in USDC atoms, and two in lots.

  • Minimum fill (min_fill_quote). No order or painted region may be worth less at its price.
  • Minimum exercise: one lot. An exercise names whole lots, at least one. There is no minimum value, so a call far in the money exercises whatever its strike.
  • Dust: zero lots. A position, or a reduce-only order, that decay has rounded down to zero whole lots is dust, and any touch of the series clears it. Nothing that still holds a lot is dust, however little it is worth.

There is no quote-valued dust line and no notional exercise floor: the fill floor, min_fill_quote, is a market's one threshold.