CMPT methodology factsheet
In one paragraph. CMPT is the benchmark price of renting one H100 SXM GPU for one hour, in US dollars, measured from six named marketplaces and clouds. This one page states the unit, the venues and their weights, the smoothing and trimming rules, the publication cadence, the fixing window, where the evidence lives, and — honestly — what the number is not. The full governance treatment is in the benchmark statement.
What CMPT is
An H100 SXM on-demand rental rate for the US neocloud market. It is the price you would pay, today, to rent one H100 SXM GPU for one hour on demand. It is not a reserved or committed rate, not a hyperscaler list price, and not an executed-trade average.
Unit
USD per GPU-hour ($/H100-hr), displayed to four decimal places. One contract is one GPU-hour. On chain the price is an 18-decimal WAD USD-per-unit value.
Venues and weights
The launch recipe has exactly six venues. Weights are the same in the live index and in the fixing, expressed in parts-per-million:
| Venue | Series | Weight | ppm | Evidence |
|---|---|---|---|---|
| Vast.ai | H100 SXM on-demand (median of the 10 cheapest verified, rentable offers) | 30% | 300,000 | console.vast.ai/api/v0/bundles/ |
| RunPod | H100 SXM on-demand | 25% | 250,000 | api.runpod.io/graphql |
| SF Compute | H100 on-demand average; H100 spot average | 15% | 150,000 | sfcompute.com/ |
| Lium | H100 SXM on-demand | 10% | 100,000 | lium.io/pricing.json |
| DataCrunch | H100 SXM on-demand | 10% | 100,000 | api.datacrunch.io/v1/instance-types |
| Shadeform | H100 SXM on-demand | 10% | 100,000 | api.shadeform.ai/v1/instances/types |
Akash executed H100 leases are published as a reference only, at weight 0 — visible for comparison, never part of the index or the fixing.
Smoothing
Each venue does not contribute its raw latest scrape. It contributes the median of its positive prints over the trailing hour: with at least three prints in the window the median is used; with fewer, the latest print is used verbatim. A single listing spike or one bad scrape therefore cannot move a venue's contribution. A venue whose latest print is older than the staleness bound (one hour) is dropped from the blend entirely.
The on-chain publisher applies the same eligibility, staleness, spread, quorum and trimming rules to each venue's latest approved print; the one-hour median and the self-deviation screen shape the published index history and charts. The two agree while constituents print steady list prices, as every printing venue did on 2026-09-23 once Vast fell silent under its breadth floor; they can differ briefly when a marketplace book moves.
Vast's own constituent is itself a median of the 10 cheapest qualifying offers, not one offer: the collector filters to verified, rentable, on-demand (not spot/interruptible) H100 SXM offers, normalizes each dph_total per GPU, and takes the median of the cheapest ten. If fewer than ten offers qualify, or they come from fewer than five distinct hosts, the venue prints nothing: a thinner book is a handful of quotes, not a market, and one host listing or delisting moves its median (on 2026-09-23 a 7-offer, 4-host book moved between $2.27 and $5.54 within two hours). A silent venue is dropped after the one-hour staleness bound, as above — the same rule the on-chain publisher applies — and its weight is renormalized over the venues that print.
Vast's H100 on-demand constituent and its spot alias start suspended after each collector process restart. They resume only after the verified book has met the 10-offer, 5-host depth floor on every successfully parsed poll for six consecutive hours. A parsed book below the floor restarts this in-memory qualifying streak. A fetch or parse failure emits no rows and neither starts nor resets the streak; a successful qualifying poll is required to resume publication. During the qualifying period, the collector reports the elapsed time and emits no rows. This reinstatement rule changes neither the weights nor methodHash nor the registered source config.
Self-deviation screen
A venue whose trailing-1-hour median deviates more than 25% from its own trailing-24-hour median is carried at that 24-hour median for that bucket (flagged carried on the component), rather than repricing the index on a single venue's book going haywire. The screen touches only per-venue values — it changes neither weightsPpm nor methodHash and needs no governance update. On the 2026-09-18→22 tape it erased the 09-19 vast collapse (a 5.2% composite dip becomes 0.0%) while still reaching the 09-22 rally peak at the same time as the unscreened index.
Trimming
With at least five venues responding, the single highest and single lowest venues are dropped before combining, so one bad print on either side cannot move the index at all. The ranking uses each venue's own observed 1-hour median: a venue the self-deviation screen carried is trimmed where it actually printed, so the screen can never pull an extreme venue back into the core. The survivors are combined as a weighted geometric mean, with the nominal weights renormalized over the survivors.
Settlement rule
X is the 24 h time-weighted average of the published CMPT index, sampled every five minutes. Each of the 288 samples is derived exactly as the V2 publisher derives its index price, from approved observations with the same provenance, freshness, spread, contributing quorum and weight checks. Sum the WAD samples, divide by 288, and round down. Settlement uses no separate per-venue double median.
The series' frozen recipeHash binds the source IDs, weights and method hash; a series settles only on its own recipe. The historical on-chain CMPT_TWAP_1800S label is unchanged; the verifier enforces the 24 h window, not the interval suggested by that label.
Publication cadence
- Live index — venues are refreshed roughly every 30 seconds (SF Compute's endpoint updates on a slower ~300-second cycle), and the composite recomputes on each refresh.
- Fixing — computed no earlier than six hours after expiry (the default proposal delay, to let daily-cadence sources finish ingesting), then proposed on chain under bond.
Fixing window
The fixing observes the 24 hours ending at expiry, at five-minute boundaries strictly after the window start and including expiry. Every sample must satisfy the live-index quorum. If any sample is unavailable, one grace attempt widens the window to 48 hours and requires all 576 samples. A missing sample in the overlapping primary window still blocks the grace fixing unless the original eligible observations become available; stale or late-received observations are not invented coverage. If neither window qualifies, the 72 h sever backstop applies, subject to the pending-fixing protections in the benchmark statement. A proposal opens a separate 24-hour challenge window before the fixing can become final.
Trading closes 24 h before expiry, when averaging begins. Governance must disable the market at that cutoff; this is not an automatic contract timer. For the first CMPT expiry, 2026-10-30 08:00 UTC, the cutoff is 2026-10-29 08:00 UTC.
Where the evidence lives
| Evidence | Where |
|---|---|
| Raw observation blobs | overdrive/exchange/data/evidence/<SYMBOL>/<ts>.json, each with a keccak256 evidence hash. |
| Live quote + evidence | Oracle service, GET /v1/quote/:symbol and GET /v1/evidence/:hash (loopback port 8795). |
| Fixing manifest (hashed body) | Persisted per (marketId, expiry); served at GET /v2/fixing/:marketId/:expiry (oracle) and GET /v1/fixing/:symbol/:expiry (matcher proxy). |
| Archive captures | Wayback captures enqueued per observation; published as an unhashed sidecar keyed by evidence hash, with an honest archivedRatio. |
| On-chain state | TrionPriceVerifierV2 holds final fixings and their recipeHash; FixingCouncilV2 holds the case, seats and bonds. |
The on-chain evidenceRoot commits to the hashed manifest: chronological five-minute samples (timestamp, WAD index price, contributing source mask, quote evidence root), recipe, TWAP and source-time bounds. Archive references live only in the sidecar, so capture differences do not change the fixing root. The running estimate reports eligible/elapsed sample counts and is unavailable until at least one sample qualifies; partial coverage is not sufficient for a final fixing.
Known limitations
- Six venues. The index is as good as six sources; it is not the forty-plus-provider blend a larger index would use.
- List and marketplace prices, not transactions. CMPT is built from firm offers and asks published by the venues — not from executed trades. Offers are an adjunct to a market anchored in bona fide transactions elsewhere (Akash executed leases, SF Compute fills); they are not the same thing.
- No executed tape in the recipe. The only executed-trade source (Akash) is published at weight 0, outside the recipe, precisely because it is a different price class.
- Basis risk. CMPT is an offer-median benchmark; it can lag a fast repricing, and it is not your actual GPU bill. A hedge may not offset your real costs.
- Not independently audited. No third party has yet audited the methodology, the collectors or the signer services.
Source trail: overdrive/exchange/oracle/src/index/cmpt.ts (CMPT_VENUES, CMPT_REFERENCE_VENUES, computeTrimmedWeightedGeoMean, venueMedianValue, venueTrailingMedian, DEFAULT_VENUE_MEDIAN_WINDOW_MS, SCREEN_THRESHOLD, SCREEN_LOOKBACK_MS, staleness and degraded path); overdrive/exchange/oracle/src/collectors/vast.ts (VAST_CMPT_QUERY, parseVastOffers); docs/spec/FIXING_ORACLE_V2.md §2.1; overdrive/exchange/oracle/src/fixing-service.ts; docs/public/developers/data-methodology.md.
Repository-owned documentation · September 2026 · Educational material, not investment advice and not an audit.
Documentation
V2 · Live on Robinhood Chain