{"slug":"perp-fees","title":"Cheapest perp DEX, live all-in fee on a $1000 ETH 10x long","subtitle":"All-in cost in basis points to open a $1000 ETH long 10x position. Taker fee plus half-spread plus impact, measured live from public APIs across Lighter, Hyperliquid, dYdX, GMX and gains.trade.","category":"Trading","metric":"All-in cost","unit":"bps","status":"live","higherIsBetter":false,"value":0.276766,"leader":{"name":"Lighter","slug":"lighter","value":0.276766},"rankings":[{"name":"Lighter","slug":"lighter","ms":{"p50":0.276766,"p90":0.443852,"p99":0.642454,"mean":0.276766},"successRate":100,"sampleSize":5760},{"name":"gains.trade","slug":"gains","ms":{"p50":4,"p90":4,"p99":4,"mean":4},"successRate":100,"sampleSize":5760},{"name":"Hyperliquid","slug":"hyperliquid","ms":{"p50":4.62042,"p90":4.57837,"p99":5.56944,"mean":4.62042},"successRate":100,"sampleSize":5760},{"name":"GMX v2","slug":"gmx","ms":{"p50":6,"p90":6,"p99":6,"mean":6},"successRate":100,"sampleSize":5760},{"name":"dYdX v4","slug":"dydx","ms":{"p50":6.23768,"p90":6.55703,"p99":6.8628,"mean":6.23768},"successRate":100,"sampleSize":5760}],"sparkline":[0.506768,0.351964,0.359908,0.379839,0.263024,0.527228,0.444166,0.29558,0.428499,0.421457,0.304126,0.516333,0.367223,0.31912,0.234456,0.218414,0.454461,0.42565,0.402184,0.250489,0.152002,0.403006,0.372896,0.483975,0.518201,0.403482,0.349908,0.239607,0.508467,0.378164,0.235191,0.535848,0.289996,0.270928,0.435439,0.223255,0.313938,0.210046,0.528059,0.410299,0.234826,0.220586,0.393577,0.313017,0.278399,0.533259,0.463533,0.338569,0.63244,0.526494,0.279906,0.366319,0.318332,0.304246,0.260896,0.285734,0.487938,0.392498,0.395631,0.364382,0.467871,0.36427,0.305982,0.659961,0.0945627,0.305572,0.111158,0.345926,0.178173,0.242578,0.665729,0.347748,0.625126],"sampleSize":28800,"asOf":"2026-06-21T17:40:39.887Z","headline":"Lighter leads all-in cost at 0.0028% (24h avg) on Cheapest perp DEX, live all-in fee on a $1000 ETH 10x long.","quote":"Lighter leads all-in cost at 0.0028% (24h avg) on Cheapest perp DEX, live all-in fee on a $1000 ETH 10x long. Source: OpenChainBench (https://openchainbench.com/benchmarks/perp-fees).","pageUrl":"https://openchainbench.com/benchmarks/perp-fees","ogImage":"https://openchainbench.com/api/og/perp-fees","source":"https://github.com/ChainBench/OpenChainBench/tree/main/harnesses/perp-fees","methodology":["Cadence: every 5 minutes, in parallel across all venues.","Trade simulated: ETH long 10x, $1000 notional ($100 collateral).","Hyperliquid: `POST /info {type: l2Book}` for asks + `{type: userFees, user: 0x000...000}` for taker fee + `{type: metaAndAssetCtxs}` for funding.","dYdX v4: indexer `/orderbooks/perpetualMarket/ETH-USD` + `/perpetualMarkets` (funding) + Cosmos REST `/dydxprotocol/v4/feetiers/perpetual_fee_params` for tier-0 default fee.","GMX v2 (Arbitrum): Subsquid GraphQL on the synthetics-arbitrum subgraph for `positionFeeFactorForNegativeImpact` (worst-case open) + gmxinfra REST for funding.","Lighter: `/orderBookDetails` (taker fee per market) + `/orderBookOrders` (orderbook walk).","gains.trade (Gains v8 on Base): we read the fee directly on-chain. `eth_call pairs(N)` to find the pair index for the asset and its `feeIndex`, then `eth_call fees(feeIndex).openFeeP` for the actual taker fee. Spread comes from `pairs(N).spreadP`. Both values in 1e10 precision per Gains v8 convention. Cached 1h to keep Base RPC quota low.","All-in formula: `all_in_bps = taker_fee_bps + spread_bps`. Both components emitted as separate metrics for transparency.","Failures (5xx, timeouts, rate limits) leave the previous gauge in place and increment a per-venue `fetch_errors_total` counter. The page falls back to the last successful sample."],"license":"CC-BY-4.0"}