Cheapest perp DEX, live all-in cost from $1k to $1M on ETH, BTC and SOL
All-in cost in basis points to open a long, measured on ETH, BTC and SOL at three order sizes: $1k where fees decide, $100k where impact appears, $1M where book depth takes over. Taker fee plus half-spread plus impact, read live from public APIs across 11 venues including Lighter, Hyperliquid, Polymarket, Paradex, Extended, Aster and edgex.
TL;DR. As of , Lighter posts the lowest all-in cost at 0.0022% (24h avg) across 11 ranked venues. Source: OpenChainBench, https://openchainbench.com/benchmarks/perp-fees.
This benchmark answers the question every perp DEX comparison article refuses to answer with real numbers. what does it actually cost to open a $1000 ETH long 10x position right now, all-in, on each major decentralized venue. Published fee schedules quote taker rates from zero to single-digit basis points (the table carries each venue's), but the rack rate is half the story. The other half is the spread you cross at market and the price impact you eat at $1000 notional, both of which are missing from every comparison roundup currently ranking for "best perp DEX". We read taker fees from each venue's own API (no hardcoded schedules), walk the orderbook for $1000 of buy-side notional to compute spread plus impact where a book exists (GMX and Gains are oracle priced, so their spread terms come from protocol parameters), and sum the two into a single basis-point figure refreshed every five minutes. Hyperliquid vs Lighter vs Polymarket vs dYdX vs GMX vs Gains is then a one-number comparison, not a six-tab spreadsheet. Size changes the answer, so the board is complemented by two panels that rerun the exact same measurement at $100,000 and $1,000,000 of notional. Small orders reward the lowest fee schedule; a $1M market order rewards the deepest book, and the ranking visibly flips between the two.
Methodology
We measure the live all-in cost of opening a $1000 ETH long 10x perp position across major perpetual venues. Cost = taker fee + half-spread + price impact at notional, all in basis points. No transactions are sent, only freely-available public APIs are queried. Every value is read live, no hardcoded fee schedules. Taker fees come from each venue's own API (Hyperliquid `userFees`, dYdX Cosmos REST `/feetiers/perpetual_fee_params`, GMX Subsquid `positionFeeFactor`, Lighter `/orderBookDetails`, Gains v8 on-chain `fees()`). On the orderbook venues (Hyperliquid, dYdX, Lighter) the spread comes from walking the book for $1000 of buy-side notional. GMX v2 is oracle priced with no book, so its spread term is zero. Gains uses half of the on-chain `spreadP`. The bench refreshes every 5 minutes.
- Cadence: every 5 minutes, in parallel across all venues.
- Trade simulated: a long at 10x, measured independently on ETH, BTC and SOL (the chain tabs scope the board; the unfiltered view averages the three). Headline notional $1,000 with $10k, $100k and $1M tiers rewalked on the same book.
- 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) on the ETH/USD, BTC/USD and SOL/USD markets + gmxinfra REST for funding. Oracle priced, no orderbook: the spread term is zero.
- Lighter: `/orderBookDetails` (taker fee per market) + `/orderBookOrders` (orderbook walk).
- Gains (Gains v8 on Base): fees read directly on-chain. `eth_call pairs(N)` gives `spreadP` and `feeIndex`, then `eth_call fees(feeIndex)` gives the open fee (`totalPositionSizeFeeP`). The taker crosses one side of the book, so we charge half of `spreadP`. SOL has `spreadP` 0 on-chain (Gains prices that pair's spread dynamically), so its figure is the open fee alone. Values in 1e10 precision per Gains v8 convention. Fee tier cached 1h, pair config 6h.
- Paradex: `/markets` fee config for the interactive (Retail) taker rate, 0 bps as of 2026-09, + `/orderbook/{market}/interactive?depth=100` walk. Paradex runs two books: the interactive one includes RPI (Retail Price Improvement) maker liquidity and is what UI and interactive-token orders cross; the plain `/orderbook` is the API book, RPI excluded, crossed by Pro (plain API) orders at the 2 bps api-tier fee.
- Paradex, continued: the two books diverge on thin pairs (SOL on 2026-09-22: 0.03 % spread on the interactive book against 1.4 % on the API book), so the bench reads the interactive book as the cost of opening a position; an algorithmic taker should add 2 bps and expect the wider API book. The endpoint caps at 100 levels, so the $1M tier can be skipped when the visible book thins.
- Extended: full public book from `/info/markets/<m>/orderbook` + `/stats` funding (1h native). Its taker fee is not exposed by any public endpoint; the documented base rate of 2.5 bps is used and this is the one venue where the fee is not read live.
- All-in formula: `all_in_bps = taker_fee_bps + spread_bps`. Both components emitted as separate metrics for transparency.
- Notional tiers: the same measurement runs at $1,000, $10,000, $100,000 and $1,000,000 by rewalking the already fetched book, published to `perp_fees_all_in_bps_tier{venue, chain, notional}`. The headline `perp_fees_all_in_bps` stays defined at $1,000. A tier the book cannot fill is skipped and counted in `perp_fees_tier_skipped_total`, never extrapolated. Oracle priced venues (GMX v2, Gains) charge a flat percentage of size, so their figure repeats across tiers.
- Book depth for the $1M tier: Lighter is walked on its top 100 levels, dYdX on the full indexer book, Polymarket on up to 500 levels. Hyperliquid returns its 20 best raw levels; when those cannot absorb the tier the harness refetches with nSigFigs=5, the finest price aggregation the API offers, which extends coverage with negligible price rounding.
- 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.
Results: 11 venues ranked by All-in cost (24h avg)
| № | Venues | p50 | All-in at $100k | All-in at $1M | Success |
|---|---|---|---|---|---|
| 1 | Lighterzk-rollup, zero taker fee | 0.0022% | 0.0069% | 0.013% | 100.00% (n=2880) |
| 2 | ParadexStarknet appchain perps, Retail (interactive) book, 0 bps interactive taker tier | 0.0100% | 0.0074% | — | 100.00% (n=2880) |
| 3 | ExtendedStarknet perps, full public book, documented 2.5 bps taker | 0.027% | 0.027% | 0.054% | 100.00% (n=2880) |
| 4 | Ondo PerpsSGX off-chain matching, custody on Ethereum and Arbitrum, 2.5 bps taker (launch promotion) | 0.034% | 0.046% | 0.078% | 100.00% (n=2880) |
| 5 | GainsSynthetic perps on Base, fees read on-chain | 0.040% | 0.040% | 0.040% | 100.00% (n=2880) |
| 6 | PolymarketPolygon perps by Polymarket, 4 bps base taker tier | 0.042% | 0.058% | 0.079% | 100.00% (n=2880) |
| 7 | HyperliquidHyperBFT L1 perp DEX | 0.047% | 0.047% | 0.060% | 99.69% (n=2880) |
| 8 | edgeXOffchain CLOB perp DEX, 3.8 bps taker | 0.048% | 0.052% | 0.053% | 98.61% (n=2880) |
| 9 | AsterBSC perp DEX, 5 bps taker, Binance-style REST book | 0.051% | 0.050% | 0.054% | 100.00% (n=2880) |
| 10 | dYdX v4Cosmos-based decentralized perp | 0.057% | 0.12% | 0.21% | 100.00% (n=2880) |
| 11 | GMXSynthetics on Arbitrum, oracle-priced | 0.060% | 0.060% | 0.060% | 99.69% (n=2880) |
Frequently asked
Which perp DEX is cheapest for a $1M market order?
The venue with the deepest book, not the one with the lowest fee schedule. At $1,000,000 of notional the price impact from walking the book dwarfs the taker fee, so zero fee venues can lose to a 4 bps venue whose book absorbs the size better. The $1M panel on this page reruns the exact same measurement at that size, and the ranking regularly differs from the $1000 headline board. A venue that shows no data there means its visible book could not fill $1M at measurement time, which is a depth signal in itself.
Why does the ranking change with order size?
Two cost components move in opposite directions. The taker fee is a flat percentage, identical at any size. Price impact grows with size because a bigger order eats deeper into the book. Small orders are fee dominated, so zero fee venues win. Large orders are depth dominated, so the deepest book wins. The board at $1000 and the panels at $100k and $1M show all three regimes live.
What is the cheapest perpetual futures DEX right now?
Lighter currently leads the leaderboard at 0.0022% all-in (24 h average) for opening a $1000 ETH long 10x position. The leaderboard re-sorts every five minutes against fresh Prometheus samples, so the answer reflects the last 24 hours of live data from each venue's public API, not a frozen rack-rate table.
Is Lighter really zero fees on perpetual futures?
The taker fee on Lighter is 0 bps, confirmed live via `/orderBookDetails` rather than a marketing page. The all-in cost is not zero, however, because every market order still crosses the half-spread and eats price impact at notional. The Lighter line on this benchmark shows what that residual cost actually is at $1000, which is the right number to compare against a paid venue's all-in figure.
How do Hyperliquid fees compare to Lighter or dYdX in practice?
Hyperliquid quotes 4.5 bps taker but its HyperBFT orderbook is among the deepest of any decentralized venue, so the spread component stays compressed and the all-in figure usually clocks close to the rack rate. Lighter starts from 0 bps taker but pays for it in slightly wider spreads on smaller markets. dYdX v4 sits at 5 bps taker with a comparably tight book. The leaderboard above shows the resulting one-number comparison live.
What is the actual cost of trading on Hyperliquid for a $1000 position?
Hyperliquid is currently at 0.047% all-in (24 h average), which means a $1000 ETH 10x long costs that fraction of $1000 to open. Funding is charged separately and is not part of this benchmark; we publish the per-hour funding rate as a side metric (`perp_fees_funding_rate_per_hour_bps`) so traders sizing a multi-hour hold can layer it on top.
Why include spread and impact instead of just taker fee?
Rack-rate taker fee is what every comparison article quotes; it is also what every trader stops being able to read off a marketing page the second they place a market order. Spread plus impact at notional is the rest of the bill. On a tight book the gap is small, on a thin book it can dominate a 5 bps taker. Bundling both into one number is the only way to make a fair across-venue ranking that survives contact with a $1000 trade.
How does GMX v2 fee work and why does this benchmark show the higher number?
GMX v2 splits the position fee into a positive-impact branch (4 bps, when your trade reduces the venue's net open interest skew) and a negative-impact branch (6 bps, when it adds to the skew). Which branch fires depends on the current open interest at the moment of the trade and is not predictable from the user's side. We report the negative branch as the conservative upper bound; the positive branch is read by the harness as well and would lower the all-in number by 2 bps when it fires.
How do perp fees change with position size?
The taker fee does not change: every venue here charges a flat percentage of notional, so 4.5 bps on Hyperliquid costs 45 cents at $1,000 and $45 at $100,000, the same rate. What scales is the impact term: a bigger market order walks deeper into the book, so the effective price moves further from mid. On deep books like BTC on Hyperliquid the $100k figure sits within a fraction of a bp of the $1k figure; on thinner books like SOL the extra impact can exceed the entire taker fee. Oracle priced venues (GMX v2, Gains) quote the same bps at any size because there is no book to walk. The harness measures all three tiers every cycle and publishes them to `perp_fees_all_in_bps_tier` with a notional label of 1000, 10000 or 100000; the $10k and $100k panels on this page chart them live. When a book cannot fill a tier we skip the sample rather than extrapolate, so a missing tier is itself a depth signal.
Does this benchmark include funding rates or only the open cost?
Open cost only. Funding is paid every hour you hold, not at open, so bundling it into a one-number leaderboard would conflate two different fee mechanics. The harness still records funding rate per venue (`perp_fees_funding_rate_per_hour_bps`, signed) so a trader can read both numbers and compute their own time-adjusted cost for a longer hold.
Source code github.com/ChainBench/OpenChainBench/tree/main/harnesses/perp-fees