diff --git a/benchmarks/perp-open-interest.yml b/benchmarks/perp-open-interest.yml deleted file mode 100644 index aea92e87..00000000 --- a/benchmarks/perp-open-interest.yml +++ /dev/null @@ -1,259 +0,0 @@ -# OpenChainBench. Bench № 042 - -slug: perp-open-interest -number: "042" -title: Perp DEX open interest, live USD notional ranked -seo_title: "Perp DEX open interest 2026" -seo_description: "Live perpetual futures open interest in USD across 13 major perp DEX venues: Hyperliquid, Aster, Lighter, GRVT, Extended, Ostium, Pacifica, Vertex, dYdX, Aevo, Paradex, gains.trade, Polymarket. Refreshed every 5 minutes." -subtitle: Live aggregate open interest in USD across 13 major decentralized perpetual futures venues. Higher means more notional sits open. Read live from each venue's public API. -category: Trading -status: draft -metric: Open interest -unit: usd -higher_is_better: true - -seo_intro: | - This benchmark ranks the major onchain perp venues by aggregate open - interest, in USD. Open interest is the canonical depth-of-market - number for perpetual futures: it tells you how much notional sits - open right now, on every market, on a given venue. We poll each - venue's public API every 5 minutes, sum open interest across all - listed perps, and publish one gauge per venue. The cohort covers 13 - venues: Hyperliquid, Aster, Lighter, GRVT, Extended, Ostium, Pacifica, - Vertex, dYdX v4, Aevo, Paradex and gains.trade. Headline number is the 24h average - of the live OI gauge so a single noisy print does not move the - ranking. - -abstract: | - The bench polls 13 perp DEX venues every 5 minutes for live open - interest and exposes a USD-aggregated gauge per venue. Each venue's - public API is queried directly (Hyperliquid info metaAndAssetCtxs, - Aster fapi openInterest, Lighter orderBookDetails, GRVT public - markets, Extended API, Ostium subgraph, Pacifica onchain reads, - Vertex indexer, dYdX v4 indexer, Aevo public markets, Paradex - markets summary, gains.trade trading-variables per collateral across - Arbitrum/Base/Polygon/ApeChain) and the notional is summed in USD - across all listed perps. Each value carries a freshness timestamp and a health - gauge so a stale or errored venue does not poison the leaderboard. - Higher is better. - -methodology: - - "Convention: open interest counts each contract once (one side), the standard used by CME, Binance and Coinglass, and the only convention comparable across venues. Aggregators can differ: DefiLlama doubles Lighter and Ostium (long plus short), folds 1,682 options markets into Paradex, and adds HIP-3 sub-dex OI to Hyperliquid. Where our number is about half of theirs, that is the convention gap, not missing data; five venues where conventions align match DefiLlama within 2 percent." - - "Cadence: every 5 minutes per venue in parallel, 10 second timeout per request." - - "Hyperliquid: info metaAndAssetCtxs, openInterest summed across all assets and priced in USD using the venue's own mark price." - - "Aster: fapi openInterest endpoint per instrument, summed across all listed USDT perps." - - "Lighter: orderBookDetails per market, open interest summed across markets in USD." - - "GRVT: public markets endpoint, open interest per instrument summed in USD." - - "Extended: public markets API, open interest per instrument summed in USD." - - "Ostium: subgraph read for open interest across all listed pairs on Arbitrum." - - "Pacifica: onchain reads on the Solana program state for aggregate open interest." - - "Vertex: public indexer, open interest per product summed across all perps." - - "dYdX v4: indexer perpetualMarkets, openInterest per market summed in USD." - - "Aevo: public markets endpoint, open interest per instrument summed in USD." - - "Paradex: markets summary endpoint on Starknet L2, open interest summed across perps." - - "gains.trade: trading-variables endpoint per chain backend (Arbitrum, Base, Polygon, ApeChain), per-collateral pairOis summed then multiplied by collateralPriceUsd, summed across all chains." - - "Headline. avg_over_time of the live OI gauge over the last 24 hours, so a one-print spike does not move the ranking. The Series tab plots the raw gauge." - - "Failures. A venue that errors or times out keeps its last gauge value and its perp_venue_health gauge drops toward 0; the leaderboard tags it as stale." - -findings: - - "{{best_name}} currently leads the cohort at {{best_p50}} of open interest (24h average) across 13 measured perp DEX venues." - - "{{name:hyperliquid}} sits at {{p50:hyperliquid}} of open interest. HyperBFT orderbook is the deepest decentralized perp venue by a wide margin." - - "{{name:lighter}} clocks {{p50:lighter}} of open interest. Fully onchain orderbook on zkSync with zero taker fee." - - "{{name:aster}} sits at {{p50:aster}} of open interest. BNB Chain perps DEX with a Binance-compatible API surface." - - "{{name:grvt}} sits at {{p50:grvt}} of open interest. Hybrid CEX/DEX perps on ZK Stack." - - "{{name:extended}} sits at {{p50:extended}} of open interest. StarkEx-based perps venue." - - "{{name:pacifica}} sits at {{p50:pacifica}} of open interest. Solana-native onchain perps." - - "{{name:dydx}} sits at {{p50:dydx}} of open interest. Cosmos appchain orderbook, one of the oldest decentralized perp venues in the cohort." - - "{{name:ostium}} sits at {{p50:ostium}} of open interest. Synthetic perps on Arbitrum covering FX and commodities alongside crypto." - - "{{name:vertex}} sits at {{p50:vertex}} of open interest. Arbitrum orderbook plus AMM hybrid." - - "{{name:paradex}} sits at {{p50:paradex}} of open interest. Starknet L2 perps." - - "{{name:aevo}} sits at {{p50:aevo}} of open interest. Optimism L2 orderbook perps, options-focused history." - - "{{name:gains}} sits at {{p50:gains}} of open interest. Synthetic perps across Arbitrum, Base, Polygon and ApeChain." - -disclaimer: "gains.trade aggregates open interest across four chains (Arbitrum, Base, Polygon, ApeChain) into a single number, while most other venues operate on one chain. This inflates gains.trade's total relative to single-chain venues and makes a direct OI comparison unfair. The per-venue tags call this out; for a single-chain view of gains.trade, use the per-chain breakdown once available." - -source: https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/perp-cohort-stats - -prometheus: - window: 24h - expected_freshness_seconds: 1800 - -faq: - - q: "What does this benchmark measure?" - a: "The live aggregate open interest of 13 major perp DEX venues in USD. Headline is the 24h average of the live OI gauge so single prints do not skew the ranking." - - q: "How is open interest different from volume?" - a: "Volume counts every trade that crosses the book during a window. Open interest counts notional that currently sits open, regardless of when it was opened. A high-volume venue with high turnover can carry lower OI than a slower venue with sticky positions." - - q: "Which venues are in the cohort?" - a: "Hyperliquid, Aster, Lighter, GRVT, Extended, Ostium, Pacifica, Vertex, dYdX v4, Aevo, Paradex, gains.trade and Polymarket, the 13 decentralized perp venues whose public APIs expose open interest cleanly enough to compare without backfilling. Other venues join as their endpoints document the same series." - - q: "Is OI a good proxy for venue health?" - a: "It is one of the cleanest. A venue can spike volume with wash trading or incentive programs, but real OI is harder to fake because it ties up margin. Compared against perp-volume-share, persistent OI dominance signals real position-holding flow rather than turnover." - -providers: - - slug: hyperliquid - name: Hyperliquid - tag: HyperBFT L1 perp DEX - formula: "Open interest from Hyperliquid info metaAndAssetCtxs, summed across all assets and priced in USD using the venue's mark price; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="hyperliquid"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="hyperliquid"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="hyperliquid"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="hyperliquid"}[24h]) - success: avg_over_time(perp_venue_health{venue="hyperliquid"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="hyperliquid"}[24h]) - series: perp_venue_oi_usd{venue="hyperliquid"} - - - slug: polymarket - name: Polymarket - tag: Polygon perps by Polymarket, launched 2026-07, public info API - formula: "open_interest (base units) times mark_price from the Polymarket perps tickers endpoint, summed across all listed instruments in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="polymarket"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="polymarket"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="polymarket"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="polymarket"}[24h]) - success: avg_over_time(perp_venue_health{venue="polymarket"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="polymarket"}[24h]) - series: perp_venue_oi_usd{venue="polymarket"} - - - slug: aster - name: Aster - tag: BNB Chain perps DEX, Binance-compatible API - formula: "Open interest from Aster fapi openInterest per instrument, summed across all listed USDT perps; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="aster"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="aster"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="aster"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="aster"}[24h]) - success: avg_over_time(perp_venue_health{venue="aster"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="aster"}[24h]) - series: perp_venue_oi_usd{venue="aster"} - - - slug: lighter - name: Lighter - tag: zk-rollup, zero taker fee - formula: "Open interest from Lighter orderBookDetails per market, summed across markets in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="lighter"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="lighter"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="lighter"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="lighter"}[24h]) - success: avg_over_time(perp_venue_health{venue="lighter"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="lighter"}[24h]) - series: perp_venue_oi_usd{venue="lighter"} - - - slug: grvt - name: GRVT - tag: Hybrid CEX/DEX perps on ZK Stack - formula: "Open interest from GRVT public markets endpoint per instrument, summed in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="grvt"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="grvt"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="grvt"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="grvt"}[24h]) - success: avg_over_time(perp_venue_health{venue="grvt"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="grvt"}[24h]) - series: perp_venue_oi_usd{venue="grvt"} - - - slug: extended - name: Extended - tag: StarkEx-based perps venue - formula: "Open interest from Extended public markets API per instrument, summed in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="extended"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="extended"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="extended"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="extended"}[24h]) - success: avg_over_time(perp_venue_health{venue="extended"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="extended"}[24h]) - series: perp_venue_oi_usd{venue="extended"} - - - slug: ostium - name: Ostium - tag: Synthetic perps on Arbitrum, FX and commodities alongside crypto - formula: "Open interest from the Ostium subgraph across all listed pairs on Arbitrum, summed in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="ostium"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="ostium"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="ostium"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="ostium"}[24h]) - success: avg_over_time(perp_venue_health{venue="ostium"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="ostium"}[24h]) - series: perp_venue_oi_usd{venue="ostium"} - - - slug: pacifica - name: Pacifica - tag: Solana-native onchain perps - formula: "Open interest read onchain from the Pacifica Solana program state, summed across all listed perps; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="pacifica"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="pacifica"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="pacifica"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="pacifica"}[24h]) - success: avg_over_time(perp_venue_health{venue="pacifica"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="pacifica"}[24h]) - series: perp_venue_oi_usd{venue="pacifica"} - - - slug: vertex - name: Vertex - tag: Arbitrum orderbook plus AMM hybrid - formula: "Open interest from the Vertex public indexer per product, summed across all perps in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="vertex"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="vertex"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="vertex"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="vertex"}[24h]) - success: avg_over_time(perp_venue_health{venue="vertex"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="vertex"}[24h]) - series: perp_venue_oi_usd{venue="vertex"} - - - slug: dydx - name: dYdX v4 - tag: Cosmos appchain orderbook perps - formula: "Open interest from the dYdX v4 indexer perpetualMarkets endpoint, summed per market in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="dydx"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="dydx"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="dydx"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="dydx"}[24h]) - success: avg_over_time(perp_venue_health{venue="dydx"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="dydx"}[24h]) - series: perp_venue_oi_usd{venue="dydx"} - - - slug: aevo - name: Aevo - tag: Optimism L2 orderbook perps, options-focused history - formula: "Open interest from the Aevo public markets endpoint per instrument, summed in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="aevo"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="aevo"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="aevo"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="aevo"}[24h]) - success: avg_over_time(perp_venue_health{venue="aevo"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="aevo"}[24h]) - series: perp_venue_oi_usd{venue="aevo"} - - - slug: paradex - name: Paradex - tag: Starknet L2 perps - formula: "Open interest from the Paradex markets summary endpoint on Starknet L2, summed across perps in USD; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="paradex"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="paradex"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="paradex"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="paradex"}[24h]) - success: avg_over_time(perp_venue_health{venue="paradex"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="paradex"}[24h]) - series: perp_venue_oi_usd{venue="paradex"} - - - slug: gains - name: gains.trade - tag: Synthetic perps across Arbitrum + Base + Polygon + ApeChain (4-chain aggregate — not directly comparable to single-chain venues) - formula: "Open interest from the gains.trade trading-variables endpoint per chain backend: per-collateral pairOis long+short, normalized by precision x collateralPriceUsd, summed across 4 chains; headline is the 24h time average." - queries: - p50: avg_over_time(perp_venue_oi_usd{venue="gains"}[24h]) - p90: quantile_over_time(0.90, perp_venue_oi_usd{venue="gains"}[24h]) - p99: quantile_over_time(0.99, perp_venue_oi_usd{venue="gains"}[24h]) - mean: avg_over_time(perp_venue_oi_usd{venue="gains"}[24h]) - success: avg_over_time(perp_venue_health{venue="gains"}[24h]) - sample_size: count_over_time(perp_venue_oi_usd{venue="gains"}[24h]) - series: perp_venue_oi_usd{venue="gains"}