Trading terminal fill quality 2026: what a swap costs on Axiom, GMGN, FOMO, Photon, Trojan, measured on-chain
Value lost per swap on each trading terminal, wallet app or Telegram bot (Solana and six EVM chains), from real user transactions read on-chain and valued at the pool's own state before the trade. Split into what the terminal takes, what the network takes, what pump.fun and the pool take, plus the share of swap attempts that fail. Rolling 24 hours, refreshed every few minutes.
TL;DR. As of , Phantom posts the lowest cost per swap at 259 bps (p50, 24h) across 2 ranked providers. Source: OpenChainBench, https://openchainbench.com/benchmarks/terminal-fill-quality. Every swap behind these medians is listed below, one row per transaction with its explorer link.
Read this carefully
Random sample (1,000 a day per Solana row, 6,000 per EVM row) of the swaps each terminal routed, every attempt counted for the fail rate. Reference = the pool's state before the swap (its reserves, or the previous trade within 60 s); swaps without one keep their split, no loss figure. Published from 50 priced swaps pooled over the product's chains at 25 or more (a single-chain product from 25), ranked from 100; the median's 95 % interval is in the JSON. Compare medians, not single swaps.
Every trading terminal advertises a fee. What a swap actually costs is the fee plus the priority fee and the inclusion tip the app attaches, plus what pump.fun or the pool keep on the way, plus the price impact of the swap itself against the pool's state just before it landed, plus the swaps that fail and still burn the priority fee. None of that is in the fee schedule, all of it is in the transaction. This benchmark reads real user swaps on Solana and on the EVM chains they trade on for Axiom, GMGN, FOMO, Phantom, Photon, Trojan, Bloom, Maestro, Pepeboost, BONKbot, Banana Gun, Binance Wallet, Terminal, BasedBot and pump.fun's own app, values the tokens received at the pool's state before the swap (its reserves, or the previous trade on it seconds earlier) and publishes the median shortfall in basis points with its split: terminal, network, pool, other. A terminal fee of 1 % is 100 bps; the median swap on most terminals loses three to five times that.
Methodology
Each terminal takes its fee through known wallets. A live WebSocket feed of every transaction mentioning those wallets, with its program logs, says which ones attempted a swap and whether they failed; the harness counts them all (fail rate) and reads 1,000 successful ones per Solana row per day and 6,000 per EVM row, drawn at random. From the pre/post balances of every account in the transaction it derives, in quote units (SOL or a $1 stable), what left the user, what the pool received, what reached the terminal's fee wallets (on the EVM rows: the router's residual after the pool and the gas), the tx fee and the inclusion tips, and the rest (pump.fun protocol and creator fees, referral payouts). The pool is the vault pair of the swap instruction, by pubkey, so a hop through another pool of the same program is never mistaken for pool impact. The token leg is valued at the pool's mid before the swap: exactly from the pool's pre-trade balances in the transaction on PumpSwap (with the virtual quote reserve its migrated pools store) and Raydium, else at the effective price of the previous trade on the same pool, at most 60 seconds earlier. Loss = 1 − value received / value given, in basis points of the trade; terminal, network and other are exact and independent of the reference, pool is the remainder. Rolling 24 hour window, medians with a bootstrap interval, p90, trade size and venue mix per terminal; published from 50 priced swaps, ranked from 100.
- Effective sample: a pooled row is judged on Kish's (sum w)^2 / sum w^2 over its priced swaps' chain weights, not on the raw count. It needs 25 effective swaps to publish and 100 to be ranked, so a product whose flow concentrates on one chain reads provisional however many swaps it holds: Binance Wallet carries 227 priced for 62 effective. The count shown in the table is the raw one.
- Trade-size views: the same window split at $25 and $250 of trade value. Each bucket's figures are plain medians over its own swaps, where the All-sizes row weights each chain's median by its flow; inside one size bucket of one product there is no chain mix to correct for. Failed swaps and failure overhead stay blank under a size filter: a failed attempt never reached a pool and has no trade size. A bucket needs 20 priced swaps to publish and 40 to be ranked, so thin buckets read as provisional.
- Sampling: a WebSocket feed of every transaction mentioning each terminal's fee wallets (DeFiLlama adapters, Dune's spellbook: Axiom 22, GMGN 9, Trojan 6, Terminal 2, the others 1; pump.fun's app and Banana Gun also by program). The logs say whether a swap program was invoked: only those count as attempts, all of them for the fail rate; 1,000 successful ones per Solana row per day are read and 6,000 per EVM row, drawn at random, weighted by the tick's activity (clamped). Rolling 24 h.
- The user is the signer whose token balance moved; when nobody signed for the user (limit, DCA and auto-sell orders executed by the terminal's keeper), the wallet whose token account moved against its SOL / stable balance, never a program-derived pool address. Quote assets: SOL, USDC, USDT, USD1, USDS, PYUSD; token-to-token swaps are not measured.
- Quote side, exact from balance deltas: user_q = what left or reached the user's SOL / WSOL / stable balance, the tx fee and the deposit of new token accounts (~0.002 SOL each, network cost; a refund on close is not credited) included; pool_q = the pool's quote movement, in the user's quote unit; terminal_q = lamports, WSOL or stables landing in the fee wallets (FOMO: plus its user-signed USDC legs).
- network_q = tx fee if the user paid it + inclusion tips: Jito, 0slot, bloXroute, Astralane, Nozomi and each terminal's own relay accounts (Axiom, Trojan, Maestro, Photon, Pepeboost, pump.fun app). other_q = user_q minus pool_q, terminal_q and network_q on single-pool routes without hops (pump.fun protocol and creator fees, referral payouts); on routed swaps it stays inside pool.
- Pool identity: the token vault that moved against the user and the quote vault of the same swap instruction, both by pubkey. Two pools behind one shared authority (Raydium, Launchpad, Meteora DAMM v2) never merge, so a hop through a sibling pool is never read as pool impact and the previous-trade lookup only sees that pool.
- Reference price, in order, routed swaps included: the pool's exact pre-trade mid from its balances in the transaction (PumpSwap, Raydium); the venue's swap event when it carries the pre-trade state (Launchpad, DLMM) and reconciles with the vault deltas; else the previous trade on the pool, at most 60 s old (pump.fun curve, CLMM), up to 2 h on BasedBot's EVM launchpad curves. No off-chain token price; gas coins at Coinbase spot on Relay rows, at the route's hop mid on native EVM rows.
- Loss (headline): buy = 1 − tokens × ref / user_q; sell = 1 − user_q / (tokens × ref). Basis points of the trade (buy: quote spent; sell: tokens × ref; either plus the gas when the user paid it outside the quote asset). Pool = loss minus terminal, network and other: the components (relay on Relay rows) sum to the loss per swap; the split columns are medians (flow-weighted on All chains) and do not sum to the median loss. Losses outside −10 % to +50 % stay out. Median with its 95 % interval, p90.
- A product is published from 50 priced swaps in the window (a chain row, or a single-chain product, from 25) and marked as ranked from 100, a row with one side only and no fee on it waits, and a product waits while its main chain fills. The previous-trade reference carries the previous trader's direction, so terminals priced mostly that way read some tens of bps worse in buy waves than on the exact mid.
- Settlement time: the destination block's timestamp minus the origin block's, one definition on every route and both directions. Bridged trades and wallet-funding transfers are separate columns, never pooled: the figure is a per-route mean, so a route carrying only transfers would otherwise read faster for that alone. Ten settlements minimum per column, stalls over 60 s excluded; the count is published below that floor, so a route barely seen is not read as unmeasured.
- Fail rate: failed over every swap attempt the feed saw on the terminal's wallets in the window, exhaustive; wallet funding, fee sweeps and marker transfers invoke no swap program and are not attempts. Error classes are in the JSON. On the EVM rows the fail rate comes from a sample of blocks read in full (every transaction sent to the routers, reverted or not).
- Cost of failures: 40 failed attempts per terminal per day are read for the fee they paid (a failed transaction executes nothing but pays base + priority fee; zero when the terminal sponsors gas). Failure overhead = fail rate / (1 − fail rate) × median failed fee, in bps of the median trade: what a successful swap carries on average in wasted attempts. Published apart from the cost per swap, not added to it.
- PumpSwap's vault ratio alone is not the mid: pools migrated from pump.fun add a virtual quote reserve (about 17.6 SOL) that the pool account stores; with it x·y = k matches executed trades exactly. pump.fun's 2026 bonding curve fills 20 to 60 % above its stored virtual_sol / virtual_token, so the curve gets the previous-trade reference instead.
- Sandwiches: each sampled swap's neighbours on its pool are screened (another signer trading our direction in our slot just before, and back just after, closing a comparable position with a take). Kept per swap in the JSON with the attacker and both signatures, not published as a column: how many swaps can be screened depends on pool activity, so terminals are not comparable on it.
- Trade-size buckets (under $25, $25 to $250, over $250): median loss per bucket in the public JSON and on each product page, so terminals with different typical trade sizes are compared at equal size.
- One row per product; the chain selector shows the product on one chain (Solana and six EVM chains), All chains pools its swaps across chains (bridge funding legs stay out). Each chain is sampled at a fixed daily rate, so All chains weighs a chain's sampled swaps by its swap attempts per sample: the pooled figure follows the users, not the sampler. Published from 50 priced swaps pooled over the chains at 25 or more; it waits while the chain carrying most of the flow fills.
- Cross-chain (FOMO): the user pays on BNB, Robinhood Chain, Base, Ethereum or Arc and Relay delivers on Solana. Relay's public requests feed identifies the app's requests (fee address or referrer) with what the user sent in USD, the fees, both hashes and the status. Value received = what the settlement delivered on Solana: USDC / SOL exactly (FOMO funds the wallet this way; the token buy that follows is a native swap in the FOMO row) or a token at the pool's state before the swap.
- Cross-chain split: terminal = the app fee the user paid; network = origin gas plus the destination gas Relay charged (its fee breakdown); relay = Relay's fixed and price fees plus the solver's spread (deposit minus received minus app fee minus that gas); pool only when a token was delivered. A token sold on the origin chain is priced at that chain's pool state in its per-chain row. Refunds and failures count in the fail rate. Perps are not measured; swaps under $2 are dropped.
- Trading on another chain (FOMO on Robinhood Chain, BNB, Base, Ethereum, Arc): the user pays in USDC or SOL from the FOMO wallet, a Relay solver buys the token there. Value given = what was sent (tx fee inside); value received = the tokens delivered at the pool's state before the settlement swap: v2 forks from the Sync reserves minus the swap, v3 forks and Uniswap v4 from the price left by the previous swap on the pool, all from the pool's own logs on public RPCs.
- Which side of an EVM pool is the token is settled by matching the swap event's amounts with the receipt's transfers, not the pool's token order. Split: terminal = the app fee; relay = what Relay kept (fees, spread, gas); pool = the settlement swap's impact and LP fee; network = the Solana tx fee (0 when the app's sponsor signs). Sales the other way (a token sold on that chain, USDC or SOL delivered on Solana) sit in the same per-chain row, priced at the origin pool's state before the sale.
- FOMO sponsors gas: its own signer pays the tx fee out of the fee the user paid, so it reads as network cost and comes off the terminal fee; its fee is a router commission plus user-signed USDC legs, all counted as terminal fee. pump.fun's app forwards a fixed 0.001 SOL on some swaps, counted as network.
- Native EVM (GMGN and Axiom on BNB and Robinhood Chain, Banana Gun): their router contracts emit an event on every swap; eth_getLogs on those routers lists every successful swap they routed; the fail rate comes from a sample of blocks read in full (every tx sent to the routers, reverted or not). Value given = what the user sent plus gas; received = the tokens at the pool's state before the swap; the fee is paid inside the router as a native transfer: the residual after pool and gas.
- Unpriced draws: on the EVM rows a share of the drawn swaps (about a sixth on BNB; on Robinhood Chain 2 of 35 fills on 2026-09-21 once the launchpad curves and ETH-quoted v4 pools were decoded) cannot be valued at the pool's state and stays out of the figure; a token launch's first curve buy is its own reject (launch_first_trade), not a fill; each entry's unpriced_share and its rejects in the JSON say how much and why.
- Cohort discovery: the fee wallets and routers are learned from the chain, the lists being the seed. On a platform's transactions (Mobula's attribution as the sample, every 6 h), a recipient taking a fixed share of the trade across many payers is its fee wallet, adopted from 30 swaps of 20 payers with a stable 20 to 300 bps share; on EVM the transactions' destination is its router. The window's swaps also give the fee-like recipients no terminal lists yet (JSON, 'discovery').
- Phantom (Solana): its in-wallet swap pays 0.85 % to its fee wallet in SOL or WSOL, sampled like the other Solana terminals. Binance Wallet (BSC, Ethereum, Base): one router on the three chains, no event of its own, so its swaps are the transactions sent to it in blocks read in full; valued like the other native EVM rows. Terminal's EVM fee wallets get under $10 a day: not measured. Banana Gun on Ethereum: buys only, no fee, its users sell on Uniswap directly; held out (one side).
- four.meme's bonding curve on BNB is priced exactly: the curve is a constant product on virtual reserves (checked on consecutive trades to 1e-12), its constants come from the TokenManager's token info, so the mid before the trade is known; the launchpad's 1 % fee is 'other', like pump.fun's on Solana.
- Kept out of that residual: a fee the pool's own hook keeps (v4 launchpad pools on Robinhood Chain 1 %, BNB 3.8 %, paid whatever the router) is a pool cost; a native leg (BNB sent, ETH received) is valued at the mid of the route's own stable-to-gas-coin hop before that hop, so the hop's LP fee and impact stay a pool cost; Axiom's inclusion tip (0.0025 BNB fixed; on Robinhood Chain the user's setting, from the call trace) is network cost, like the Solana tip relays.
- BasedBot takes its 1 % fee inside the swap, through Jupiter: read on 2026-10-24, 30 of 30 transactions crediting its wallet invoke a swap program in the same transaction and none is a standalone transfer. It was read the other way until then, pairing each fee to the swap before it, which left the Solana row parsed but unpriced. Its fee is now the credit inside the swap, and its failed swaps are visible like any other app's.
- One row per route, not per app: pump.fun's cross-chain trades are published twice over, as Pump Bridge (its own routers, read on chain) and as the pump.fun app (what Relay still carries). Folding them together averaged two routes into a number describing neither, and the two differ in fee, settlement time and error rate. Relay draws the same split in its own published comparison.
- Pump Bridge's rows are grossed up: its router is paid out of pump's own liquidity, already net of the 0.05 plus 40 to 45 bps it keeps, so the spend is raised back to what the user committed before the loss is taken. Both parameters come from that chain's own spends: the fixed part from pairs at different trade sizes, which solve it assuming no value, and the rate from exact read-backs. A chain with too few falls back. Residual about 2.5 bps, against 45 to 545 bps of ignoring the deduction.
- Pump Bridge's sales are priced from the delivery, not a schedule: both legs of an order carry the same sixteen-byte id, in the router event's topic1 and in the Solana payout, so what the user received is read. A sale whose id is absent or whose delivery is not held stays unpriced. The join rate is published rather than stated here, because it measures a race: a sale is usually read before its delivery exists. While the priced and drawn side mixes differ by over 20 points the row is not ranked.
- pump.fun's app charges about 45 bps to KfHbT5Jr…, counted as terminal fee. That account was filed as a Pump Bridge sell-side route until 2026-10-24, when 25 transactions crediting it were read: 23 invoke a pump swap venue and none the bridge, so it is an app fee and the row no longer reads 0. Pump Bridge differs: its deduction is grossed onto the spend and lands in Terminal as a residual. A second flagged account is pump's gas sponsor, which PAYS on every swap, so read that 0 as unmeasured.
- Pump Bridge publishes no fail rate. Failures on this route do not show up as EVM reverts (0 in about 1,050 relayer transactions read on Robinhood Chain on 2026-10-22), and most of its swaps are sent to the user's own proxy rather than to the router, so a block sample of router transactions sees about 3 % of them (tfq_router_direct_total). Its error rate is not measurable from the chain here.
- MegaETH and X Layer are read but not shown: Pump Bridge's router is deployed on both and no bridge aggregator covers either, so this is the only measurement of them, but MegaETH has never executed a trade (relayer nonce 0) and X Layer had one priced swap on 2026-10-22. They get a chain tab when they carry enough trades to publish one; until then a tab would answer nothing.
- Not in the table: BullX (suspended June 2026), Nova (no live fee wallet), Bloom on Base and Ethereum (a swap an hour), Photon on EVM. BasedBot's Relay requests are its in-app bridge between the user's Solana and EVM wallets, both ways, no app fee (a bridge leg, not a trade); its EVM rows are those wallets' swaps on its router.
Results: 17 providers measured, 2 ranked by Cost per swap (p50, 24h)
| № | Providers | Value lost | Settlement time | Transfer time | Terminal fee | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Phantom | 259 bps | 3.33 s | 5.87 s | 84.6 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2 | Photon | 350 bps | — | — | 98.4 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Measured, not ranked: sample below the ranking floor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Pump Bridge | 236 bps | 3.14 s | — | 75.5 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | FOMO · Mobula | 260 bps | 2.26 s | — | — | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | pump.fun app | 272 bps | 709 ms | 1.76 s | 43.9 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Binance Wallet | 298 bps | — | — | 41.1 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | FOMO | 337 bps | 5.84 s | — | 179 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | BasedBot | 339 bps | — | 1.47 s | 55.3 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | BONKbot | 366 bps | — | — | 99.0 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | GMGN | 368 bps | — | — | 98.8 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Axiom | 392 bps | — | — | 87.7 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Trojan | 420 bps | — | — | 97.5 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Terminal | 429 bps | — | — | 98.5 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Banana Gun | 429 bps | — | — | 98.4 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Maestro | 468 bps | — | — | 97.8 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Pepeboost | 472 bps | — | — | 97.6 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| not ranked | Bloom | 495 bps | — | — | 97.7 bps | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Every transaction behind these numbers
The most recent transactions of each row (3000 in all, 2709 priced), so every published figure has its own evidence here. These are a sample, not the statistic: the medians above are computed over the full rolling window, which is far more swaps than a row shows here, so a row's handful of transactions will not reproduce its median. Click a hash to open it on Solscan and check every figure against the transaction's balances: Loss = 1 − value received / value given; Fee + Net + Protocol + Pool (+ Relay on the cross-chain rows) = Loss. Ref says what the tokens were valued at (reserves: the pool's exact mid before the swap, from its balances; event: the venue's own swap event; pool: the previous trade on the same pool, age in seconds). A ! marks a row outside the plausible bounds, kept out of the statistics.
method v6 · as of Mon, 02 Nov 2026 19:26:41 UTC
| When | Terminal | Transaction | Side · route | Trade | In $ | Out $ | Loss | Where it goes | App fee | Net | Protocol | Pool | Rent | Reference | Sandwich |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 11-02 19:25:59 | do3v4g…DK5u | buypump-curve4via X | $12 | $12 | $7.40 | 3567 | 44 | 0 | — | 3523 | — | previous trade27s | clean | ||
| 11-02 19:25:16 | 2Xc9P2…x9UG | buypumpswap3 | $9.95 | $9.95 | $9.45 | 505 | 24 | 0 | 311 | 170 | — | exact mid | — | ||
| 11-02 19:24:32 | 4Sdn5P…E2ui | sellpump-curve2 | $3.66 | $3.66 | $3.51 | 393 | 267 | 7 | 116 | 4 | — | venue event | clean | ||
| 11-02 19:24:16 | PhGpco…NgWf | buypump-curve | $9.49 | $9.49 | $8.95 | 566 | 88 | 340 | 53 | 85 | $0.14 | venue event | clean | ||
| 11-02 19:23:38 | 3jKB1W…eg8T | sellpump-curve3 | $9.99 | $9.99 | $9.65 | 339 | 44 | 1 | 185 | 109 | — | venue event | clean | ||
| 11-02 19:22:39 | DXNKJ9…Nm3Y | sellpump-curve | $53 | $53 | $51 | 345 | 98 | 1 | 47 | 199 | — | venue event | clean | ||
| 11-02 19:22:01 | 4ixQsd…fbd5 | buypump-curve | $26 | $26 | $25 | 281 | 0 | 103 | 122 | 55 | $0.26 | venue event | clean | ||
| 11-02 19:21:36 | L4crrZ…VGct | buypump-curve | $46 | $46 | $44 | 417 | 74 | 90 | 71 | 182 | $0.14 | venue event | clean | ||
| 11-02 19:21:06 | 5wDCQB…kbLA | buyraydium-cpmm1via X | $28 | $28 | $27 | 263 | 99 | 3 | 33 | 129 | — | venue event | clean | ||
| 11-02 19:20:45 | 3EX5eD…a2nU | sellpumpswap | $11 | $11 | $9.63 | 1151 | 40 | 1 | 73 | 1038 | — | exact mid | — | ||
| 11-02 19:20:37 | 2Qomi5…HCfD | buypumpswap | $10 | $10 | $9.64 | 488 | 84 | 144 | 46 | 214 | $0.14 | exact mid | clean | ||
| 11-02 19:19:39 | 2DHqnu…Sy3z | sellpump-curve | $98 | $98 | $94 | 419 | 97 | 0 | 49 | 273 | — | venue event | clean | ||
| 11-02 19:19:31 | 0xb0ee…3b94 | buyuniswap-v4from Ethereum | $116 | $116 | $108 | 688 | 96 | 290 | 0 | 302 | — | exact mid | — | ||
| 11-02 19:18:57 | 2YwQDw…RXfL | sellpump-curve | $3.70 | $3.70 | $3.63 | 187 | 25 | 9 | 140 | 13 | — | venue event | clean | ||
| 11-02 19:18:24 | 2BiLcu…U49a | sellpumpswap2 | $12 | $12 | $12 | 109 | 210 | 2 | 45 | -148 | — | exact mid | clean | ||
| 11-02 19:17:40 | 2NGiBX…Mrtu | buyorca1 | $28 | $28 | $27 | 306 | 99 | 111 | 67 | 29 | $0.28 | venue event | clean | ||
| 11-02 19:17:34 | 5fGhUC…EUeW | sellpump-curve | $23 | $23 | $23 | 205 | 45 | 1 | 125 | 34 | — | venue event | clean | ||
| 11-02 19:16:27 | 0x4a77…b70a | selluniswap-v21from BNB | $17 | $17 | $16 | 471 | 97 | 12 | 0 | 362 | — | exact mid | — | ||
| 11-02 19:16:27 | 0x4de3…8dbb | buyuniswap-v2from BNB | $31 | $31 | $30 | 403 | 52 | 11 | 0 | 339 | — | exact mid | — | ||
| 11-02 19:15:00 | 4q4ZGW…v57P | sellpump-curve | $2.66 | $2.66 | $2.50 | 610 | 99 | 36 | 392 | 83 | — | venue event | — | ||
| 11-02 19:14:24 | 48TrCp…SPrB | buypump-curve | $9.96 | $9.96 | $9.77 | 185 | 25 | 4 | 138 | 18 | — | venue event | — | ||
| 11-02 19:14:07 | 3J2ndV…RsYD | sellpumpswap | $15 | $15 | $14 | 691 | 95 | 4 | 121 | 471 | — | exact mid | — | ||
| 11-02 19:13:20 | 2eteD5…2ZTu | sellraydium-clmm | $3.68 | $3.68 | — | — | 266 | 6 | 0 | — | — | unpriced | clean | ||
| 11-02 19:12:26 | 31zE94…xcAZ | buypump-curve2via X | $19 | $19 | $18 | 406 | 74 | 156 | 135 | 41 | $0.28 | previous trade0s | — | ||
| 11-02 19:11:46 | 27YDbP…HNqc | buypumpswap | $57 | $57 | $56 | 170 | 0 | 0 | 99 | 71 | — | exact mid | clean | ||
| 11-02 19:11:31 | 3BmcZN…YP7m | buypump-curve2 | $58 | $58 | $56 | 322 | 45 | 0 | 108 | 169 | — | venue event | clean | ||
| 11-02 19:11:10 | t98e9E…aY4q | buypumpswap | $5.15 | $5.15 | $4.78 | 718 | 24 | 284 | 132 | 277 | $0.14 | exact mid | clean | ||
| 11-02 19:10:31 | 2MQRnd…dnsZ | sellpump-curve | $858 | $858 | $685 | 2018 | 75 | 43 | 45 | 1855 | — | venue event | clean | ||
| 11-02 19:10:14 | 2sP974…b7rA | buymeteora-dlmm | $4.54 | $4.54 | $4.39 | 340 | 137 | 83 | 0 | 119 | — | venue event | clean | ||
| 11-02 19:09:01 | 3UVozn…XoA7 | sellpumpswap | $2.71 | $2.71 | $2.69 | 67 | 25 | 12 | 111 | -82 | — | exact mid | — | ||
| 11-02 19:08:51 | 64rFf4…SxNu | sellpump-curve | $78 | $78 | $75 | 425 | 97 | 2 | 48 | 279 | — | venue event | — | ||
| 11-02 19:07:22 | gijADr…3eYc | buypumpswap | $10 | $10 | $8.98 | 1308 | 65 | 141 | 1036 | 66 | $0.14 | exact mid | — | ||
| 11-02 19:06:22 | 5TySqP…tQ73 | buypump-curve | $3.91 | $3.91 | $3.59 | 828 | 94 | 614 | 44 | 76 | $0.14 | venue event | — | ||
| 11-02 19:06:04 | 2rHBtJ…9k8a | buypump-curve1 | $7.42 | $7.42 | $7.17 | 337 | 149 | 51 | 47 | 89 | — | venue event | clean | ||
| 11-02 19:05:26 | xJog9p…1kft | sellpumpswap | $69 | $69 | $67 | 310 | 24 | 0 | 136 | 150 | — | exact mid | clean | ||
| 11-02 19:05:24 | 52G4z2…aDon | buypumpswap | $9.37 | $9.37 | $9.68 | −328! | 98 | 99 | 100 | -625 | — | exact mid | — | ||
| 11-02 19:05:13 | 2WaFHa…i4da | buypump-curve | $5.43 | $5.43 | $4.41 | 1885 | 83 | 11 | 1719 | 72 | — | venue event | — | ||
| 11-02 19:05:10 | 31FNHB…JzcK | buypump-curve | $3.63 | $3.63 | $3.32 | 848 | 0 | 729 | 114 | 4 | $0.26 | venue event | clean | ||
| 11-02 19:04:28 | 0x9e0a…4c19 | buyuniswap-v4from Robinhood | $227 | $227 | $181 | 2029! | 589 | 99 | 0 | 1341 | — | exact mid | — | ||
| 11-02 19:04:04 | 4c6Wc2…98T5 | buypumpswap | $93 | $93 | $92 | 125 | 73 | 0 | 180 | -127 | — | exact mid | clean | ||
| 11-02 19:02:30 | 33k5UR…y9Af | buypumpswap2 | $10 | $10 | $11 | −559! | 44 | 0 | 167 | -770 | — | exact mid | — | ||
| 11-02 19:02:26 | DA5mER…vto3 | sellpump-curve | $93 | $93 | $88 | 500 | 96 | 3 | 132 | 270 | — | venue event | clean | ||
| 11-02 19:02:13 | 3JbZxG…GnhG | sellpump-curve | $45 | $45 | $44 | 301 | 76 | 0 | 69 | 155 | — | venue event | clean | ||
| 11-02 19:00:48 | 0x5782…7352 | selluniswap-v2from BNB | $28 | $28 | $27 | 226 | 100 | 5 | 0 | 121 | — | exact mid | — | ||
| 11-02 19:00:16 | 38yiTW…zmYL | sellpumpswap | $86 | $86 | $84 | 182 | 0 | 0 | 100 | 83 | — | exact mid | clean | ||
| 11-02 19:00:01 | 61VENS…kkLT | buypumpswap3 | $70 | $70 | $68 | 307 | 136 | 0 | 6 | 164 | — | exact mid | clean | ||
| 11-02 18:59:30 | UN1Pdu…a6ub | sellpumpswap | $6.57 | $6.57 | $6.09 | 733 | 95 | 29 | 95 | 515 | — | exact mid | — | ||
| 11-02 18:59:19 | PJpk8T…ayD4 | buypump-curve | $25 | $25 | $24 | 215 | 25 | 1 | 138 | 51 | — | venue event | clean | ||
| 11-02 18:58:50 | 4a8Zsf…bttZ | selluniswap-v2from BNB | $166 | $166 | $161 | 294 | 84 | 4 | 0 | 146 | — | exact mid | — | ||
| 11-02 18:58:47 | 0x1ffa…e36c | buyuniswap-v3from Solana | $50 | $50 | $50 | 96 | 0 | 3 | 0 | 21 | — | exact mid | — |
Frequently asked
What is the reference price and why does it matter?
The token side of a swap has no price of its own; it has to be valued at something. This bench values it at the pool's mid price just before the swap: exactly, from the pool's own pre-trade balances in the transaction, on PumpSwap (with the virtual quote reserve its migrated pools store), Raydium, Launchpad, Meteora DLMM, four.meme and the EVM pools; and, where the pool's formula is not known or the route crosses several pools, at the effective price of the previous trade on the same pool, at most 60 seconds earlier and usually under one. That is the arrival price a TCA desk would use. Valuing at the price after the swap would hide the trade's own impact. When neither is available the swap keeps its exact cost split but no loss figure; no off-chain token price is used for the token side; on the EVM rows the gas-coin leg is valued at the route's own stable-to-gas hop pre-trade mid (the executed rate as fallback), and origin gas at Coinbase spot.
Why is the loss much larger than the terminal's 1 % fee?
Because the fee is one of five costs. On a pump.fun curve or PumpSwap trade the protocol and creator fees add roughly 1 to 1.4 %, the pool keeps its LP fee and the price impact of the trade, the app attaches a priority fee and often an inclusion tip, and the pool's price may already have moved between the arrival trade and ours. The split is published per terminal so the terminal-attributable part is visible on its own.
Is this comparable across terminals?
The explicit components (terminal, network) are exact and terminal-attributable. The pool component depends on what users trade and how much, which differs per app (Photon's and FOMO's median swaps are about $20), so read the total loss together with the trade size column and the size buckets. A terminal is marked ranked from 100 priced swaps, and a pooled row from 100 effective swaps once the chain weights are applied; read the 95 % interval next to each median, adjacent ranks often overlap; single swaps are not comparable.
Are sandwiches counted?
Screened, not ranked. A sandwich's two legs both touch the pool, so they are the user's neighbours in the pool's own transaction sequence: another signer trading the same direction just before, and back just after, in the same slot or the next. Every hit is in the JSON with the attacker and both signatures. It is not a column because the share of swaps that can be screened depends on how busy the pool is, which differs per terminal. The victim's extra cost is not a separate line either: the front-run precedes the user's swap, so the arrival price already carries it inside the pool component.
How is a swap attributed to a terminal?
By the fee it pays: every terminal transfers its fee to known wallets in the same transaction, and those wallet lists are the ones DeFiLlama's adapters use for volume, so attribution matches benches 201 and 267. Where the fee wallet is not enough: pump.fun's app and Banana Gun by their programs, Phantom by its fee token account, FOMO by the vanity account every FOMO transaction carries (its gas sponsor signs and is excluded as user), the EVM rows by the router the transaction was sent to (Binance Wallet from blocks read in full), the cross-chain rows by Relay's referrer or fee recipient (FOMO 0x9fc4…, pump.fun app 0xdab3…, verified by the Solana users behind them). pump.fun moved most of its cross-chain flow onto its own bridge on 2026-10-07 and Relay's feed does not see it, so that flow is published as its own row, Pump Bridge, read straight off the Solana deposits and the EVM routers; the pump.fun app row carries what still goes through Relay.
Source code github.com/ChainBench/OpenChainBench/tree/main/harnesses/terminal-fill-quality