Prices: I, M, E, L and X
In one paragraph: Trion shows several prices for the same market, and each one has exactly one job. The index (I) is the outside-world benchmark. The mark (M) is the price your margin and liquidation are judged against. E is the price you actually traded at, and L is the last confirmed trade anyone made. X is the one-off settlement price for an expiring option. Mixing them up is the most common way to misread the screen.
The five prices
| Letter | Plain name | Where it comes from | What it is used for |
|---|---|---|---|
| I | Index | Several independent external sources, combined by a 2-of-3 signer committee | Funding, price bands, option strike widths, input to M |
| M | Mark | I adjusted by at most ±0.5% toward the qualified order book, smoothed over 150 s | Your equity, margin requirements, liquidation, TP/SL triggers, option premiums |
| E | Execution / fill | The maker's limit price when your order matched | Your cash, fees and realized profit |
| L | Last | Most recent E confirmed on chain | Charts and the trade tape only; never a fallback for a missing I or M |
| X | Fixing | 24 h time-weighted average of the published index, sampled every five minutes, in the window ending at expiry | Option payout only |
You will also see B/A (best executable bid and ask to a configured depth). They are indicative. A displayed bid is not a guaranteed fill.
Why the mark is not the last trade
If liquidations used the last trade, one thin fill could liquidate everyone. So M starts from I and only moves toward the book when the book has real depth on both sides (walked to a configured notional D, inside ±3% of I), and even then by at most 0.5%. If the book is too thin, the market is in INDEX_ONLY mode and M = I.
Example (hypothetical): I = $2.60. Book mid over the last few minutes averages $2.65 (+1.9%). M is clamped to $2.613 (+0.5%). Your margin is judged at $2.613, not $2.65.
Freshness rules
Each market has its own source cadence and the oldest source may not be older than a limit:
| Market | Source cadence | Oldest source allowed |
|---|---|---|
| CMPT | 15 min | 30 min |
| DRAM, NAND | daily | 24 h |
| GRID | 5 min | 6 min |
| HASH | 10 min | 15 min |
| DPIN | 5 s | 2 min |
Republishing an old observation does not make it fresh: the original source time is what counts. A mark is valid for 15 seconds after sampling.
What happens when prices break
- A single-step index move above 3% halts the market. During HALTED, no fills, no liquidations, and no withdrawals for accounts holding positions. Deposits, order revocation and flat withdrawals stay open.
- Recovery needs two healthy observations at least 10 s apart, then a 30 s window with no execution.
- There is no "last known price" fallback for trading. A stale price is a stopped market, not a discounted one.
Trust caveat
Two of three committee signers must sign every I/M snapshot. That stops a single bad signer, not two colluding ones. Threshold signing proves agreement, not truth. The spec states this plainly and so should you when judging the system.
What the live desk shows
The rules above are the design and the verifier contract's checks. The desk and the public API show exactly the I and M that the TrionPriceVerifierV2 contract has accepted, nothing else: no book-derived adjustment is applied on the way out, and if the accepted snapshot is missing or expired the screen reports the current price and risk figures as Unavailable instead of showing an old number. While the CMPT perpetual is unlisted there is no qualified perp book, so the accepted snapshots carry the CMPT index as their mark (M = I); option premiums are quoted from that mark. The chart keeps drawing historical bars (confirmed prints and the daily index series, each with its provenance) even while the current price is unavailable, because history is still history. Do not read a chart that still has bars as a live quote; the current price is the ticker and account fields, and those say Unavailable.
X is not the spot index at expiry
An option does not settle on the index print at the moment of expiry. Trading closes 24 h before expiry, and that final 24 hours is the averaging window: X is the time-weighted average of the published CMPT index sampled every five minutes (288 samples, summed and divided by 288, rounding down). Every sample must satisfy the live-index provenance, freshness, spread and quorum checks; one missing sample makes the primary fixing unavailable, a single 48 h grace attempt requires all 576 samples, and if no eligible fixing is produced the 72 h sever backstop applies. The fixing is proposed on chain under bond and can be challenged for 24 hours before it becomes final. The full rule, the frozen-recipe binding and the contingency ladder are in the benchmark statement and the methodology factsheet.
flowchart LR
I[Published CMPT index] -->|sample every 5 min| S[288 samples over the final 24 h]
S -->|all eligible| X[X = sum / 288]
S -->|any sample missing| G[48 h grace: all 576 samples]
G -->|any missing| V[72 h sever backstop]
X --> P[Proposed under bond, 24 h challenge window]
P --> F[Final fixing settles the series]
Source trail: docs/spec/V2_ARCHITECTURE.md §2.1–§2.4; docs/spec/FIXING_ORACLE_V2.md §2.1; overdrive/perps/src/v2/TrionPriceVerifierV2.sol (DISCONTINUITY_BPS, MAX_MARK_BPS, RECOVERY_MIN_INTERVAL, RECOVERY_PERIOD, THRESHOLD); overdrive/exchange/oracle/src/fixing-service.ts (sampled TWAP, coverage); overdrive/exchange/matcher/src/mark-sampler.ts, canonical-prices.ts; overdrive/deployments/v2/reviewed/4663.cmpt-options-approval.md (markSource: "index" while perps are unlisted); overdrive/exchange/oracle/src/daily/csv.ts (per-bar provenance).
Repository-owned documentation · September 2026 · Educational material, not investment advice and not an audit.
Documentation
V2 · Live on Robinhood Chain