Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
319 commits
Select commit Hold shift + click to select a range
7570ab9
feat(speedtest): responsive polish — readout in dial mouth, self-cent…
Flotapponnier Sep 3, 2026
f5baf29
Merge pull request #2246 from ChainBench/feat/speedtest-responsive-po…
Flotapponnier Sep 3, 2026
0c41738
feat(speedtest): SEO/GEO pass — FAQ + FAQPage JSON-LD, open-source li…
Flotapponnier Sep 3, 2026
a308758
Merge pull request #2247 from ChainBench/feat/speedtest-seo
Flotapponnier Sep 3, 2026
096edfc
feat(speedtest): stop button moved below progress, red outlined
Flotapponnier Sep 3, 2026
6a2adbb
Merge pull request #2248 from ChainBench/feat/speedtest-stop-button
Flotapponnier Sep 3, 2026
846389e
feat(speedtest): dedicated OG/Twitter card with the dial
Flotapponnier Sep 3, 2026
0873ec8
Merge pull request #2249 from ChainBench/feat/speedtest-og
Flotapponnier Sep 3, 2026
b789d23
fix(speedtest): OG card without svg text nodes (satori limitation)
Flotapponnier Sep 3, 2026
778ae9e
Merge pull request #2250 from ChainBench/fix/speedtest-og-satori
Flotapponnier Sep 3, 2026
5bedc81
feat: crowdsourced RPC latency world map (/rpc-map) + anonymous contr…
Flotapponnier Sep 4, 2026
6916ca6
Merge pull request #2251 from ChainBench/feat/rpc-map
Flotapponnier Sep 4, 2026
3d1952f
feat(map): chain search, provider multi-compare, viewport-driven rank…
Flotapponnier Sep 4, 2026
8cc4a58
Merge pull request #2252 from ChainBench/feat/rpc-map-v2
Flotapponnier Sep 4, 2026
8ac48a2
feat(map): clickable cells with per-provider history and freshness
Flotapponnier Sep 4, 2026
3eeb701
Merge pull request #2253 from ChainBench/feat/rpc-map-cell-detail
Flotapponnier Sep 4, 2026
d38dcb7
feat(map): near-me geolocation and droppable pin with nearest-area re…
Flotapponnier Sep 4, 2026
6171cc3
Merge pull request #2254 from ChainBench/feat/rpc-map-pin
Flotapponnier Sep 4, 2026
fd2f451
fix(speedtest): fail-open prefill validation when every endpoint flunks
Flotapponnier Sep 4, 2026
84445d0
Merge pull request #2255 from ChainBench/fix/speedtest-failopen
Flotapponnier Sep 4, 2026
2105466
fix(bench-205): Solana-scoped volumes via chain overview, GMGN was sh…
Flotapponnier Sep 5, 2026
0b284b5
Merge pull request #2259 from ChainBench/fix/solana-dex-volume-scope
Flotapponnier Sep 5, 2026
5dc8d21
feat: add Serialized as provider on benches 004 and 008 (#2261)
Flotapponnier Sep 5, 2026
0730b30
feat: declare Serialized in the 004 and 008 bench specs (#2262)
Flotapponnier Sep 5, 2026
8ae50fe
feat: add Serialized to benches 005 and 090 (chain coverage) (#2263)
Flotapponnier Sep 5, 2026
dcfe080
docs: correct the head-lag claim in the Serialized audit, add follow-…
Flotapponnier Sep 5, 2026
7814dc0
docs: correct the BONK root cause to a pool-ranking unit bug, add tok…
Flotapponnier Sep 5, 2026
a34a429
fix: add stricter companion series to benches 004 and 008 (#2266)
Flotapponnier Sep 5, 2026
8cae12f
fix(001): measure head lag against a node we hold, not the provider's…
Flotapponnier Sep 5, 2026
74a7d2d
feat(001): add Serialized to aggregator-head-lag (#2268)
Flotapponnier Sep 5, 2026
53c69c8
fix(seo): regenerate bench-published map, new benches were stuck at t…
Flotapponnier Sep 7, 2026
1f0e81c
fix(243): scope headline and report to the Singapore probe, drop the …
Flotapponnier Sep 8, 2026
a8d2fb8
fix: single-origin bench payload guard + sitemap lists only servable …
Flotapponnier Sep 8, 2026
d9fd0a5
fix: confine single-origin benches to their pinned region in overlayE…
Flotapponnier Sep 8, 2026
e8374d3
revert(001): drop Serialized from aggregator-head-lag (#2278)
Flotapponnier Sep 8, 2026
eda2da8
fix(products): per-chain chips show real leadership only, with the de…
Flotapponnier Sep 8, 2026
b6ba6b0
fix(ranking): rank multi-chain benches by contested-chain wins, not t…
Flotapponnier Sep 8, 2026
401d0a7
fix(scoring): scope the value to contested chains, opt-in per bench (…
Flotapponnier Sep 9, 2026
5ef21d8
chore(cache): bump bench-unfiltered and all-benchmarks for contested-…
Flotapponnier Sep 9, 2026
31f69ae
feat(rpc): add NOWNodes to ethereum-rpc and bnb-rpc (#2283)
Flotapponnier Sep 9, 2026
ba96ffe
fix(logo): replace NOWNodes placeholder with brand-purple N mark (#2285)
Flotapponnier Sep 9, 2026
710ed67
fix(ui): stop badging a single measurement as a percentile (#2286)
Flotapponnier Sep 9, 2026
7fdba76
feat(rpc): add Bitcoin and LUKSO benches, NOWNodes on Coreum (#2287)
Flotapponnier Sep 9, 2026
7087aa9
feat(rpc): add NOWNodes to the rpc-capabilities cross-chain provider …
Flotapponnier Sep 9, 2026
f7945d7
fix(registry): correct NOWNodes X handle to @NOWNodes (#2290)
Flotapponnier Sep 9, 2026
498a91d
fix(logo): add official LUKSO mark for the chain and lukso-official (…
Flotapponnier Sep 9, 2026
a515333
fix(chains): register Bitcoin and LUKSO so they display capitalized (…
Flotapponnier Sep 9, 2026
8c312ac
bridge-monitor: 3/30 tiers + 5-route conserving loop + HL withdraw (#…
Flotapponnier Sep 9, 2026
9a354bc
feat(001): measure Base against the flashblock reference, re-add Seri…
Flotapponnier Sep 9, 2026
db7f47e
bridge-monitor: add Near Intents as executing bridge on a USDC-only t…
Flotapponnier Sep 9, 2026
f619617
copy(001): name Serialized in the headline, drop the stale per-chain …
Flotapponnier Sep 10, 2026
b195c0e
bridge-monitor: fix nil-interface panic in evmClientFor (crash-looped…
Flotapponnier Sep 10, 2026
d71003a
feat(001): defer reference matching so a late reference still matches…
Flotapponnier Sep 10, 2026
3777109
bench 261: on-chain bridge execution latency + success rate (3/30, pe…
Flotapponnier Sep 10, 2026
93fd754
bridge-monitor: switch triangle to all-USDC (Arb leg USDT->USDC), avo…
Flotapponnier Sep 10, 2026
f59760f
bridge-monitor: capture exec-cost metrics (realized output, quote-vs-…
Flotapponnier Sep 10, 2026
d267365
sync to dev: series density fix + Near Intents single-test hook (#2314)
Flotapponnier Sep 10, 2026
c73f35a
bridge-monitor: reliability tail metrics (stuck rate + refund latency…
Flotapponnier Sep 10, 2026
d9acd6f
bridge: exec metric baseline fix + realized-cost bench + MCP allowlis…
Flotapponnier Sep 10, 2026
d3e1477
fix: slippage recorded only on fills + bench 263 region dimension (#2…
Flotapponnier Sep 10, 2026
fd9dca9
fiat-onramp-cost: bench 262 harness, spec, On-ramps category, product…
Flotapponnier Sep 11, 2026
3b834c8
bridge: exact execution latency (no buckets) + Near Intents in benche…
Flotapponnier Sep 11, 2026
361aebd
bridge exec benches: recording rules for always-fresh sparse-run valu…
Flotapponnier Sep 11, 2026
c9b521d
bench 264: dedicated Solana quote-latency (SOL to X) (#2327)
Flotapponnier Sep 11, 2026
9c490f3
bench 264: add SOL->Robinhood Chain (chainId 4663, USDG cross-asset) …
Flotapponnier Sep 11, 2026
ff62ff7
bench 264: correct Robinhood methodology — only Mobula quotes SOL->Ro…
Flotapponnier Sep 11, 2026
5356401
sync: bring dev up to date with main (resolve 5 conflicts) (#2334)
Flotapponnier Sep 11, 2026
a370cf1
bridge-monitor: map BNB(56)/Ethereum(1)/Robinhood(4663) in relay/lifi…
Flotapponnier Sep 11, 2026
3635b0a
bench 265 perp-pf-ratio: perp DEX price-to-fees valuation table (dev-…
Flotapponnier Sep 12, 2026
d5b599a
logos: official SVG marks for Avantis, ApeX and Derive (#2341)
Flotapponnier Sep 12, 2026
2253521
perf(vercel): stop the per-minute ISR purge, cache OG images, slim mi…
Flotapponnier Sep 13, 2026
69f06d6
middleware: literal 410 matcher only (Vercel matchers are case-insens…
Flotapponnier Sep 13, 2026
4915956
perf: fetch the search index on demand (-63% page weight); data cache…
Flotapponnier Sep 14, 2026
c7c1103
perf: cache share-card renders, aggregate proxy TTL 300s, slow-moving…
Flotapponnier Sep 14, 2026
7bdd0cf
bench 265: token-less rows report harness health (were shown as UNRES…
Flotapponnier Sep 14, 2026
9a371f6
fiat-onramp-cost: Mercuryo parser on the live response shape; MoonPay…
Flotapponnier Sep 14, 2026
5fcc638
fiat-onramp-cost: Transak verified live (SEPA no_quote until bank tra…
Flotapponnier Sep 14, 2026
47c9eab
logos: theme-safe official marks for the on-ramp cohort (#2353)
Flotapponnier Sep 14, 2026
970ea51
chore: untrack harnesses/perp-volume-history (WIP swept in by mistake…
Flotapponnier Sep 14, 2026
3d9b810
perp venue pages: Gains daily volume re-index jumps dropped; DeFiLlam…
Flotapponnier Sep 14, 2026
b9f7cb1
bench 265: pre-TGE perp DEXes listed unranked with fees and OI; edgeX…
Flotapponnier Sep 14, 2026
15e6a1d
bench 266: daily perp DEX volume on closed UTC days, backfilled; Gain…
Flotapponnier Sep 14, 2026
7035320
perp-volume-history: publish gauges after every source so the bench r…
Flotapponnier Sep 14, 2026
1ea25d7
perp venue pages: daily volume from OCB's own cohort bench; Gains 24h…
Flotapponnier Sep 14, 2026
9a54d13
perp-cohort-stats: Gains 24h volume on the DefiLlama perimeter (volum…
Flotapponnier Sep 14, 2026
646b415
api/series: serve harness-backfilled history for bench 266 on every r…
Flotapponnier Sep 14, 2026
8a277f7
perp-volume-history: remember the backfill horizon per venue (Hyperli…
Flotapponnier Sep 14, 2026
f9e4360
bench spec: optional chart block (min_range, default_range, window_la…
Flotapponnier Sep 14, 2026
796bd25
rename: gains.trade / Gains Network -> Gains everywhere the brand is …
Flotapponnier Sep 14, 2026
817755f
bench page: the parent-controlled chart range honours chart.default_r…
Flotapponnier Sep 14, 2026
a877d40
bench page: metric view tabs carry their definition as a tooltip; act…
Flotapponnier Sep 14, 2026
3a99aea
compare pages: two-line trend chart on every shared bench card; hero …
Flotapponnier Sep 14, 2026
807140d
compare: per-card trend charts only on perp venue pairs, with a y axi…
Flotapponnier Sep 14, 2026
f172e89
compare: drop the per-card trend charts, the perp volume hero is the …
Flotapponnier Sep 14, 2026
c1231f4
bench 265 copy: meta description no longer renders "1.559xx"; intro c…
Flotapponnier Sep 14, 2026
8e4baa1
compare: trend chart back on every shared bench card, with view tabs …
Flotapponnier Sep 14, 2026
8360d93
compare charts: accent on the selected view/range, hidden when either…
Flotapponnier Sep 14, 2026
ee1963d
perp-volume-history: sources run concurrently; dYdX honours 429 and g…
Flotapponnier Sep 14, 2026
43a40bb
bench 265: un-gate perp-pf-ratio on dev too, so the worker's sitemap …
Flotapponnier Sep 14, 2026
3629692
perp-volume-history: Extended skips a host after three consecutive fa…
Flotapponnier Sep 14, 2026
e080720
bench 265: Open interest ledger column, so pre-TGE rows show fees and…
Flotapponnier Sep 14, 2026
54ec353
bench 266 copy: Gains series is the Dune view, refresh runs in parall…
Flotapponnier Sep 14, 2026
3a85d8d
social cards: the leader claim is highlighted in orange on bench, rep…
Flotapponnier Sep 14, 2026
9a5dc0f
bench 262 fiat-onramp-cost: live, headline cell BTC by card at 500 EU…
Flotapponnier Sep 15, 2026
2a0ddbf
bench 262: only keyed providers declared (MoonPay, Transak) so the wo…
Flotapponnier Sep 15, 2026
7989d22
bench 262: view tabs and ledger columns per grid cell (declared fee, …
Flotapponnier Sep 15, 2026
87dd01a
head-lag: Solana headline becomes the lag behind the first feed to re…
Flotapponnier Sep 16, 2026
d226251
head-lag race: a race needs two participants (a lone GeckoTerminal po…
Flotapponnier Sep 16, 2026
d1646ef
head-lag: Solana opens on First to report; leader lag floored at 1 ms…
Flotapponnier Sep 16, 2026
42d25f5
head-lag: Solana offers only First to report (spec chart.hide_headlin…
Flotapponnier Sep 16, 2026
8c5d321
bench page: chart config read across seeded variants; cache keys bump…
Flotapponnier Sep 16, 2026
a4906ea
head-lag: First to report is scored between feeds only; panels sort b…
Flotapponnier Sep 16, 2026
eb3591f
Serialized: brand blue (was the palette orange next to Mobula), logo …
Flotapponnier Sep 16, 2026
ab5e852
head-lag: redact keyed reference URLs in the subscription log (#2401)
Flotapponnier Sep 16, 2026
380f4d2
perp-volume-history: read through the data cache (revalidate 300), no…
Flotapponnier Sep 16, 2026
59e15fe
share cards: gauge benches drop "by p50" and the p99 tails; benches 2…
Flotapponnier Sep 16, 2026
f88ad44
benches 265/234: scrape cadence is 30 seconds (2,880 samples per row …
Flotapponnier Sep 16, 2026
5bab24c
fiat-onramp-cost: Meld adapter verified live (sandbox): POST + JSON b…
Flotapponnier Sep 16, 2026
d76e10f
products: one page per product; /hyperliquid/<slug> and /perp/<slug> …
Flotapponnier Sep 17, 2026
fea2499
products: Trading app, Data API and Bridge views join the pill bar; e…
Flotapponnier Sep 17, 2026
4e10f55
redirects: the /hyperliquid hub's own image routes are excluded from …
Flotapponnier Sep 17, 2026
b73b0f4
products: perp venues that are also chains (hyperliquid, dydx) keep a…
Flotapponnier Sep 17, 2026
e73989e
products: pill order puts the product's own category first (Trading a…
Flotapponnier Sep 17, 2026
3af75c6
trading apps: per-platform chain scope on every figure (FOMO, Trojan,…
Flotapponnier Sep 17, 2026
6d5c395
bench 267: trading app daily volume, cross-chain, closed UTC days; /t…
Flotapponnier Sep 17, 2026
9580a5e
bench 267: FOMO scope note corrected, DeFiLlama's adapter already inc…
Flotapponnier Sep 17, 2026
1aa866c
bench 267: FOMO formula back under the 240-char spec limit (page was …
Flotapponnier Sep 17, 2026
71abce5
bench 205: take rate panel removed, DeFiLlama terminal volume is a fl…
Flotapponnier Sep 17, 2026
f64318f
trading apps: logos for the whole cohort, chain bars, linear sparklin…
Flotapponnier Sep 17, 2026
a1a02b5
trading apps: share-of-cohort view on the chart (stacked 100 %, Other…
Flotapponnier Sep 17, 2026
c86469f
bench 267: keep DeFiLlama's whole history (GMGN since Sep 2023, All s…
Flotapponnier Sep 17, 2026
528966d
trading apps: Dune 24h volume column and KPI removed, volume lives in…
Flotapponnier Sep 17, 2026
9515f80
trading apps chart: month tick dropped when it collides with the end-…
Flotapponnier Sep 17, 2026
f2510bf
bench 268: terminal fill quality, cost per swap on each Solana tradin…
Flotapponnier Sep 18, 2026
cde24ca
bench 267: chain split uses the latest day whose breakdown covers the…
Flotapponnier Sep 18, 2026
8bd18f7
bench 268: components always sum to the loss (pool derived), closed-a…
Flotapponnier Sep 18, 2026
8d57093
bench 268: exact pre-trade mid from pool reserves on PumpSwap (virtua…
Flotapponnier Sep 18, 2026
b6e07dd
bench 268: sandwich detection on each sampled swap's block (front-run…
Flotapponnier Sep 18, 2026
6ce9577
bench 268: a sandwich needs the back-run to close a comparable positi…
Flotapponnier Sep 18, 2026
a520c47
bench 268: no off-chain price in the loss figure (Jupiter fallback of…
Flotapponnier Sep 18, 2026
7e6677c
bench 268: Astralane tip accounts counted as network cost (Maestro's …
Flotapponnier Sep 18, 2026
2d3a43c
bench 268: live WebSocket feed (logsSubscribe) replaces wallet pollin…
Flotapponnier Sep 18, 2026
71e3e7d
bench 268: WS_URL lets the live feed run on the keyless public endpoi…
Flotapponnier Sep 18, 2026
5ac023f
bench 268: pool cache kept in raw units (a stable-quoted swap could p…
Flotapponnier Sep 18, 2026
fad7e77
keyed-rpc-robinhood: probe cadence 120 s (RPC_KEYED_PROBE_SECONDS=120…
Flotapponnier Sep 18, 2026
712a191
bench 268: the tick's draw is weighted by the tick's activity against…
Flotapponnier Sep 18, 2026
58846be
bench 268: BasedBot out of the table until its custodial program is d…
Flotapponnier Sep 18, 2026
2bce4e7
keyed RPC cohort: benches 237-242 restored, 269 HyperEVM and 270 Arc …
Flotapponnier Sep 18, 2026
7ec2032
prometheus (Railway): scrape rpc-keyed-eu and rpc-keyed-sgp; all thre…
Flotapponnier Sep 18, 2026
85a08e1
bench 268: BONKbot, Banana Gun, Nova and a 7th Trojan wallet from Dun…
Flotapponnier Sep 18, 2026
f35dd8c
bench 268: multi-hop routes whose final pool is quoted in a third ass…
Flotapponnier Sep 18, 2026
0004464
bench 268: explorable table of sampled swaps (filters, sort, Solscan …
Flotapponnier Sep 18, 2026
c7b1abe
keyed RPC: Alchemy measured on a Free plan key on Ethereum, Arbitrum,…
Flotapponnier Sep 18, 2026
cf6f369
rpc-keyed-latency: a cell whose variable reads "disabled" (or is not …
Flotapponnier Sep 18, 2026
eecf57a
rpc-keyed-latency: RPC_KEYED_CHAINS allowlist pauses part of the matr…
Flotapponnier Sep 18, 2026
8117ba6
bench 268: method v3 after the audit (pool identity by vault, exact a…
Flotapponnier Sep 18, 2026
79ca022
bench 268: sampled-swaps audit table on the bench page, always open (…
Flotapponnier Sep 18, 2026
e413eab
keyed RPC: Infura removed from the five EVM pages (no key, no data); …
Flotapponnier Sep 18, 2026
ef240e6
bench 268: audit table redesigned: logos, buy/sell chips, loss gauge …
Flotapponnier Sep 18, 2026
4587240
bench 268: exact mids from Launchpad TradeEvent and DLMM Swap events …
Flotapponnier Sep 18, 2026
99cb4a3
bench 268: FOMO and BasedBot cross-chain legs measured from Relay's p…
Flotapponnier Sep 18, 2026
492099e
bench 268: methodology line under the 500-character limit (#2460)
Flotapponnier Sep 18, 2026
567c4f8
bench 268: FOMO and BasedBot trading on Robinhood Chain, BNB, Base, E…
Flotapponnier Sep 18, 2026
988a775
bench 268: EVM pricing coverage: v4 manager aggregates, hops matched …
Flotapponnier Sep 18, 2026
0405410
bench 268: GMGN and Axiom native on BNB and Robinhood Chain, from the…
Flotapponnier Sep 18, 2026
84a4699
bench 268: EVM_RPC_<CHAIN> puts a keyed endpoint ahead of the public …
Flotapponnier Sep 18, 2026
c6a2ddb
bench 268: router log polling in 400-block chunks, HTTP redirects not…
Flotapponnier Sep 18, 2026
83b8947
bench 268: native EVM fee split made exact: a v4 hook's cut of the sw…
Flotapponnier Sep 18, 2026
85fd97a
bench 268: fail rate on the native EVM rows from a block sample (tran…
Flotapponnier Sep 18, 2026
525d5a2
bench 268: Phantom (Solana, 0.85 % fee wallet) and Binance Wallet (BS…
Flotapponnier Sep 18, 2026
940e7a6
bench 268: cohort discovery: fee wallets and routers learned from the…
Flotapponnier Sep 18, 2026
a02eb15
bench 268: a split pool without its own quote leg leaves the row unpr…
Flotapponnier Sep 18, 2026
d04f9d7
bench 268: one row per product with a chain selector (pooled chain=al…
Flotapponnier Sep 19, 2026
e20aa70
bench 268: FOMO's feed follows the vanity account every FOMO transact…
Flotapponnier Sep 19, 2026
d61b2a9
bench 268: a single chain's entry publishes from 25 priced swaps (hal…
Flotapponnier Sep 19, 2026
1601b21
bench 268: the fill-quality table reads like a metrics sheet: median …
Flotapponnier Sep 19, 2026
c4e5206
bench 268: the bench page ledger reads as a cost sheet (value lost, m…
Flotapponnier Sep 19, 2026
2589d29
layout: pages no longer scroll sideways on laptops and tablets; dense…
Flotapponnier Sep 19, 2026
12945a0
logos: Phantom and Binance Wallet marks on bench 268 (phantom.svg was…
Flotapponnier Sep 19, 2026
37f3d61
bench 268, audit 1: pooled entries weigh each chain's sampled swaps b…
Flotapponnier Sep 19, 2026
f896063
bench 268: the Binance Wallet row is "Binance" and lands on /products…
Flotapponnier Sep 19, 2026
5634388
bench 268, audit 2: failed-attempt sampler accrues every tick and ref…
Flotapponnier Sep 19, 2026
bdb7cb0
seo: product and bench pages link only compare pairs whose page is in…
Flotapponnier Sep 19, 2026
e52f518
bench 268, audit 3: BasedBot measured on Robinhood Chain (the wallets…
Flotapponnier Sep 19, 2026
bc17a65
bench 268: methodology bullet 17 back under the 500-character cap (th…
Flotapponnier Sep 19, 2026
afa3ceb
RPC pages: the public no-key endpoint URL next to each provider (spec…
Flotapponnier Sep 19, 2026
b42dd91
bench 268: the Relay walk goes past known requests only for pending o…
Flotapponnier Sep 19, 2026
fdf7246
bench 268: requests met pending on the Relay feed are re-read by id e…
Flotapponnier Sep 19, 2026
21eb6cb
sitemap: lastmod is the last editorial change of the page's content f…
Flotapponnier Sep 19, 2026
aaff0be
RPC specs: live placeholders instead of hand-typed counts and latenci…
Flotapponnier Sep 19, 2026
7db3cad
seo: hubs link only indexable RPC pages; ledger and region labels are…
Flotapponnier Sep 19, 2026
9419724
deploy: full git history in the checkout so the sitemap lastmod manif…
Flotapponnier Sep 19, 2026
14c154b
RPC titles, 10-page test: "<Chain> RPC endpoints: free public URLs ra…
Flotapponnier Sep 19, 2026
f52c31a
bench 268, audit 4: the pooled entry admits only the chain rows above…
Flotapponnier Sep 19, 2026
3ae6a5b
bench 268: the Relay walk resumes at the previous instance's newest r…
Flotapponnier Sep 19, 2026
8fa6b0a
RPC endpoints block: only endpoints with a live 24h measurement are l…
Flotapponnier Sep 19, 2026
a638a81
seo: RPC pages link every indexable sibling chain; Dataset.descriptio…
Flotapponnier Sep 19, 2026
3212c92
RPC specs, second pass: every typed cohort count is {{count}}, name l…
Flotapponnier Sep 19, 2026
7d66ff5
seo round 2, site: the served HTML carries the results table (server …
Flotapponnier Sep 19, 2026
54f7c62
templates: a known placeholder that cannot resolve today drops its cl…
Flotapponnier Sep 19, 2026
863c273
bench 268, audit 5: a product whose main chain is still filling is no…
Flotapponnier Sep 19, 2026
e5d2d8d
dune harnesses: one execution a day (DUNE_REFRESH_HOURS, default 24) …
Flotapponnier Sep 19, 2026
2d45786
products: the provider index keeps only appearances on benches that e…
Flotapponnier Sep 19, 2026
fe16e5c
seo round 3: title overlaid from the live YAML (H1 = spec), endpoints…
Flotapponnier Sep 19, 2026
f91b624
bench 268, audit 6: a native EVM row with one side only and no fee on…
Flotapponnier Sep 19, 2026
d186195
dune-platform-volume: one execution a day (DUNE_REFRESH_HOURS, defaul…
Flotapponnier Sep 19, 2026
998fc57
bench 268, audit 7: a held chain row never re-enters the pooled entry…
Flotapponnier Sep 19, 2026
956b427
seo round 4: freshness gate (stale chain RPC pages say so, noindex af…
Flotapponnier Sep 19, 2026
5140e95
seo: answers and products snippets, excluded_providers on RPC pages, …
Flotapponnier Sep 19, 2026
a8e0141
seo round 5: one cohort count on every surface ({{count}}, infobox, T…
Flotapponnier Sep 19, 2026
ba75456
bench 268, audit 8: the Solana draw quota accrues every tick with the…
Flotapponnier Sep 19, 2026
7722aff
answers and products: no link into a page this deployment cannot serv…
Flotapponnier Sep 19, 2026
60eb606
products: the per-chain RPC table links a chain only when its bench p…
Flotapponnier Sep 19, 2026
80e8f7c
bench 268: the native leg of an EVM swap is valued at the route's sta…
Flotapponnier Sep 19, 2026
2965c40
bench 268, audit 9: FOMO's fee legs bounded one by one (a routing tra…
Flotapponnier Sep 19, 2026
b894225
crawl: every generated image and every /api route answers X-Robots-Ta…
Flotapponnier Sep 19, 2026
05b028e
bench chain pages: a chain that left the cohort redirects (308) to th…
Flotapponnier Sep 19, 2026
a4148c0
network-fees (031): rollup L1 data fee included, Avalanche, Stellar, …
Flotapponnier Sep 19, 2026
ce942cf
bench 268, audit 10: Banana Gun's 1 % leg counted on sells too (a per…
Flotapponnier Sep 19, 2026
597e6fe
bridge-execution-latency: settlement latency read on-chain (dest bloc…
Flotapponnier Sep 19, 2026
21e4481
bench 268, audit 11: sparse-terminal draws keep their accrued quota (…
Flotapponnier Sep 19, 2026
c17b354
bridge-execution-latency: millisecond settlement latency (two-ended 1…
Flotapponnier Sep 19, 2026
61b86a7
bench 268: BasedBot measured on BNB, Base and Ethereum (its router fa…
Flotapponnier Sep 19, 2026
9135212
bridge-execution-latency spec: methodology bullets back under 500 cha…
Flotapponnier Sep 19, 2026
19854c9
bench 268, audit 12: Terminal's ste11 relay tips are network (read as…
Flotapponnier Sep 19, 2026
2ecf027
signed metrics: a live row keeps a zero or negative p50 (bridge-reali…
Flotapponnier Sep 19, 2026
bc1706f
format: fmtUnit declares its string return type (the negative-USD bra…
Flotapponnier Sep 19, 2026
74117a9
bench 268, audit 13: a purged entry says it is re-sampling (state, no…
Flotapponnier Sep 19, 2026
73265b0
bridge execution benches (261, 263), audit round 1: per-execution pul…
Flotapponnier Sep 19, 2026
2c711b6
freshness_timestamp_metric: read the age from Prometheus (time() - ma…
Flotapponnier Sep 19, 2026
147954f
bench 268: Banana Gun on Ethereum is buys only by nature (its buyers …
Flotapponnier Sep 19, 2026
dcd91e8
bridge quote benches (002, 264): the headline was a random cell; quer…
Flotapponnier Sep 19, 2026
f99e156
bridge execution benches (261, 263), audit round 2: one quoted-fee de…
Flotapponnier Sep 19, 2026
c7c785b
bench 268: Solana reads through a list of endpoints with fallback (SO…
Flotapponnier Sep 19, 2026
dc287d4
bench 268: RPC budget knobs for a minimal profile: SANDWICH=0 (no nei…
Flotapponnier Sep 19, 2026
4db6e90
bridge-monitor: the slippage pulse is gated on the existence of a quo…
Flotapponnier Sep 19, 2026
3d7174b
bridge pages, SEO/GEO audit: titles and descriptions of benches 002/0…
Flotapponnier Sep 19, 2026
a4759af
compare FAQ: when both winners share the verb, the question names the…
Flotapponnier Sep 19, 2026
ccb0d5f
crm: internal dashboard on Railway (PostHog traffic with AI-referral …
Flotapponnier Sep 20, 2026
5f3e573
posthog: outbound_click, copy and search events; crm Actions page (#2…
Flotapponnier Sep 20, 2026
1425bc8
deploy: NEXT_PUBLIC_POSTHOG_KEY injected at build from a repository v…
Flotapponnier Sep 20, 2026
5ddfa3e
crm: the "PostHog not configured" status is cleared once the keys are…
Flotapponnier Sep 20, 2026
47c0dd9
crm: password minimum 12 characters (the signing secret keeps 16) (#2…
Flotapponnier Sep 20, 2026
cbf6383
crm: snapshot refreshed every 15 min (60 PostHog queries per hour, 2.…
Flotapponnier Sep 20, 2026
a14ef2b
ledger: ledger_reliability: false hides the Success and Reliability c…
Flotapponnier Sep 20, 2026
b650d81
crm: Search Console, Vercel log drain (AI crawlers, 404s, API callers…
Flotapponnier Sep 20, 2026
a6ce0f4
terminal-fill audit table: a row reads as the product name plus a bad…
Flotapponnier Sep 20, 2026
2c2eda7
terminal-fill: BasedBot's Relay legs described as its in-app bridge b…
Flotapponnier Sep 20, 2026
9e3ee4e
logos: binance-wallet aliased to the Binance logo (bench 268 audit ro…
Flotapponnier Sep 20, 2026
fd1cc5d
logos: Binance diamond as a 475-byte SVG (brand yellow #F0B90B) inste…
Flotapponnier Sep 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,9 @@
# Optional. Live-page WebSocket relay. Public (NEXT_PUBLIC_) so it's baked
# into the browser bundle. Defaults to the production relay if unset.
# NEXT_PUBLIC_RELAY_WS_URL=wss://ocb-stream-relay-production.up.railway.app/ws

# Optional. Minimum seconds between two full ISR tag purges triggered by
# the materialize worker's /api/internal/revalidate-aggregate hook. The
# worker calls the hook after every 60 s publish; without this throttle
# every ISR page was invalidated each minute. Default 600. "0" disables.
# REVALIDATE_MIN_INTERVAL_SEC=600
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,40 @@ jobs:
- run: pnpm lint
- run: pnpm test
- run: pnpm build

# crm/ is its own package (Railway); the root typecheck excludes it, so it
# gets its own check. Runs only when the app changes.
crm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: changed
with:
filters: |
crm:
- 'crm/**'
- uses: pnpm/action-setup@v4
if: steps.changed.outputs.crm == 'true'
with:
version: 10
- uses: actions/setup-node@v4
if: steps.changed.outputs.crm == 'true'
with:
node-version: 22
- uses: oven-sh/setup-bun@v2
if: steps.changed.outputs.crm == 'true'
with:
bun-version: latest
- run: pnpm install --frozen-lockfile --ignore-workspace
if: steps.changed.outputs.crm == 'true'
working-directory: crm
- run: pnpm typecheck
if: steps.changed.outputs.crm == 'true'
working-directory: crm
- run: pnpm test
if: steps.changed.outputs.crm == 'true'
working-directory: crm
- run: pnpm build
if: steps.changed.outputs.crm == 'true'
working-directory: crm
14 changes: 14 additions & 0 deletions .github/workflows/prod-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ jobs:
CRON_SECRET: ${{ secrets.CRON_SECRET }}
steps:
- uses: actions/checkout@v4
with:
# Full history: scripts/emit-page-mtimes.ts (prebuild) reads each
# content file's last commit for the sitemap <lastmod>. A depth-1
# checkout dates only the files touched by HEAD and every other
# URL falls back to the build time (929 of 929 on 2026-09-19).
fetch-depth: 0

- uses: actions/setup-node@v4
with:
Expand All @@ -48,6 +54,14 @@ jobs:
run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}

- name: Build
# NEXT_PUBLIC_POSTHOG_KEY comes from a repository variable: `vercel pull`
# writes the literal "[SENSITIVE]" for env vars flagged sensitive on
# Vercel, and that string was compiled into the bundle as the PostHog
# token (no event reached PostHog from 2026-08-24 to 2026-09-20).
# process.env wins over the pulled .env file. The token is public by
# nature (it ships to every browser), so a variable, not a secret.
env:
NEXT_PUBLIC_POSTHOG_KEY: ${{ vars.NEXT_PUBLIC_POSTHOG_KEY }}
run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}

- name: Deploy to Production
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/staging-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ jobs:
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
steps:
- uses: actions/checkout@v4
with:
# Full history: scripts/emit-page-mtimes.ts (prebuild) reads each
# content file's last commit for the sitemap <lastmod>. A depth-1
# checkout dates only the files touched by HEAD and every other
# URL falls back to the build time (929 of 929 on 2026-09-19).
fetch-depth: 0

- uses: actions/setup-node@v4
with:
Expand All @@ -41,6 +47,10 @@ jobs:
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}

- name: Build
# Same repository variable as prod-deploy.yml (see the note there).
# Staging events are excluded by the CRM's host filter.
env:
NEXT_PUBLIC_POSTHOG_KEY: ${{ vars.NEXT_PUBLIC_POSTHOG_KEY }}
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}

- name: Deploy Preview
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ Source: OpenChainBench (https://openchainbench.com/benchmarks/aggregator-head-la
| [`/`](https://openchainbench.com/) | Hero + Latest benchmarks table + Live dashboard |
| [`/benchmarks`](https://openchainbench.com/benchmarks) · `/benchmarks/[slug]` | Catalog grid + per-bench leaderboard with chart, ledger, chain/region filters, share cards, FAQ |
| [`/benchmarks/[slug]/[chain]`](https://openchainbench.com/benchmarks/aggregator-head-lag/solana) | Chain-scoped bench view with per-chain explainer |
| [`/products/[slug]`](https://openchainbench.com/products/mobula) | Per-provider aggregated profile: every bench they appear in, top-1 counts, related products |
| [`/products/[slug]`](https://openchainbench.com/products/mobula) | The one page per product: every bench it appears in, top-1 counts, related products, and a view per category it belongs to (Trading app, Perpetuals, Prediction markets, Data API, Bridge, RPC, Hyperliquid) selectable by pill or URL hash |
| [`/chains/[slug]`](https://openchainbench.com/chains/ethereum) | Per-chain hub: live native price, TVL history, every bench that touches this chain grouped by category |
| [`/compare/[a]-vs-[b]`](https://openchainbench.com/compare/codex-vs-mobula) | Head-to-head comparison across shared benches, canonical alphabetical order enforced at the edge |
| [`/alternatives/[slug]`](https://openchainbench.com/alternatives/alchemy) | "Alternatives to X" landing pages with live leaderboard from the referenced bench |
| [`/answers/[slug]`](https://openchainbench.com/answers/which-crypto-data-api-covers-the-most-blockchains) | Q&A pages backed by a live bench, formatted for AI answer engines |
| [`/hyperliquid`](https://openchainbench.com/hyperliquid) · `/hyperliquid/[slug]` | HyperLiquid frontends cohort + per-builder dashboard (revenue, volume, first-active date) |
| [`/hyperliquid`](https://openchainbench.com/hyperliquid) | HyperLiquid frontends cohort; each builder's dashboard (revenue, volume, first-active date) is the Hyperliquid view on its `/products/[slug]` page |
| [`/perps`](https://openchainbench.com/perps) · [`/prediction-markets`](https://openchainbench.com/prediction-markets) · [`/rpc`](https://openchainbench.com/rpc) | Vertical hubs aggregating multiple benches per topic |
| [`/mcp`](https://openchainbench.com/mcp) | MCP server docs + install instructions |
| [`/methodology`](https://openchainbench.com/methodology) · [`/contribute`](https://openchainbench.com/contribute) · [`/team`](https://openchainbench.com/team) · [`/about`](https://openchainbench.com/about) · [`/press`](https://openchainbench.com/press) · [`/badges`](https://openchainbench.com/badges) | Static |
Expand Down
33 changes: 17 additions & 16 deletions answers/cheapest-bridge-usdc-to-base.yml
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
slug: cheapest-bridge-usdc-to-base
question: "Which bridge is cheapest to move USDC to Base?"
short_answer: |
OpenChainBench measures the all in cost of a $300 USDC bridge (fee plus slippage plus destination gas) across eight routers: Mobula, Relay, LI.FI, deBridge, Across, Near Intents, Squid and Socket. Since the bench aggregates across the Solana, Base and Arbitrum corridors, the USDC-to-Base leader on a specific corridor is on the per corridor breakdown at openchainbench.com/benchmarks/bridge-fee.
{{best_name:chain:Base}} is the cheapest measured bridge for $300 USDC from Solana to Base at {{best_p50:chain:Base}} all in (fee plus slippage plus destination gas, p50 over 24h); {{worst_name:chain:Base}} is the most expensive on that corridor at {{worst_p50:chain:Base}}. Across every corridor the leader is {{best_name}} at {{best_p50}}, measured live by OpenChainBench across {{count}} routers.

benchmark: bridge-fee

intro: |
Bridge comparison articles publish rack rate fee schedules and stop there. The rack rate is one number in a bill that also includes destination gas, LP fees passed through as slippage, and the effective execution price the router actually delivers. On a $300 USDC bridge to Base, two providers quoting the same 5 bps headline can deliver very different real fees once the router walks the pool. This page answers the specific question retail and small-treasury movers actually search for: at $300 USDC notional, which bridge to Base is cheapest today. OpenChainBench queries the same USDC to Base intent against every major router every 5 minutes, computes the all-in effective fee including destination gas, and publishes the ranked leaderboard live.
Bridge comparison articles publish rack rate fee schedules and stop there. The rack rate is one number in a bill that also includes destination gas, LP fees passed through as slippage, and the effective execution price the router actually delivers. On a $300 USDC bridge to Base, two providers quoting the same 5 bps headline can deliver very different real fees once the router walks the pool. This page answers the specific question retail and small treasury movers actually search for: at $300 USDC notional, which bridge into Base is cheapest today. OpenChainBench sends the same Solana to Base USDC quote request to every measured router every 5 minutes, computes the all in cost including destination gas, and publishes the ranked leaderboard live; the Sol to Base tab of the bench page is the corridor this answer reads.

methodology: |
Every 5 minutes the harness sends the same intent (source: Ethereum mainnet USDC, destination: Base USDC, amount: $300 notional, receiver: probe wallet) to each router's quote API in parallel. Effective fee is computed as `(source_input_usd - destination_output_usd - destination_gas_usd) / source_input_usd` in basis points, so slippage, LP fees and gas are all inside the same number. Providers that fail to return a quote (5xx, rate limit, timeout) leave the previous gauge in place and increment a fetch_errors_total counter. The leaderboard ranks by 24h average of bridge_effective_fee_bps for the USDC to Base pair. The $300 size is the small ticket regime; sibling benches probe higher notional to expose where routers slip on size.
Every 5 minutes the bridge-monitor harness requests a quote for the same intent (source: USDC on Solana, destination: USDC on Base, amount: $300) from each router's quote API. The recorded metric is `bridge_cost_percent`, the share of the $300 ticket that does not arrive on Base once the explicit fee, the slippage and the destination gas returned by the quote are summed. Quotes that error (unsupported route, quote_failed, timeout) are excluded from the cost aggregate and counted toward the success rate, so a broken router cannot post a zero. The leaderboard ranks by the 24h p50 of `bridge_cost_percent{bridge="X", amount_usd="300", to_chain="Base"}`; p90 and p99 capture the worst minutes. The bench page's Sol to Base tab is this corridor; the other tabs (Base to Arb, Arb to Sol, Arb to HyperCore) show the same routers on the other measured routes.

limitations:
- "Quote fee only. This measures router-quoted effective fee, not settlement. Any router that quotes tighter than it settles would show a fast p50 with degraded real-world execution; the sibling bridge-quote-latency bench flags routers where quote-to-settle drift is measurable."
- "One size, one route. The $300 USDC to Base pair is the highest-search-volume small-ticket bridge query. At $50k notional the leaderboard re-orders because the spread and LP fee components dominate. Producers moving treasury size should read the per-size breakdown on the bench page."
- "Destination gas at quote time. Destination gas is included in the effective fee at the quoted receiver payout, not at a delayed execution instant. A destination gas spike between quote and settle would degrade the actual fee below what this leaderboard reports."
- "No canonical CCTP fast path. The USDC canonical bridge via Circle CCTP has different guarantees and speeds than the market-maker routers ranked here. The leaderboard measures the market-maker path (Mobula, Relay, LI.FI, deBridge, Across, Near Intents) because it is the head-to-head every comparison article ranks."
- "Quote cost, not settled cost. This measures what the router quotes for the transfer, not what lands after settlement. A router that quotes tighter than it settles would look cheaper here than in a wallet; a separate execution bench on the same harness reads the realized amount on chain for the routers that support programmatic execution."
- "One size, one route. The $300 USDC Solana to Base corridor is the highest search volume small ticket bridge query. At $10000 the ranking re-orders because the fixed components (destination gas, base protocol fee) dilute into the percentage; the harness quotes $5, $50 and $300 only, so larger tickets are not measured."
- "Destination gas at quote time. Destination gas is included in the all in cost at the quoted payout, not at a delayed execution instant. A Base gas spike between quote and settlement would move the real cost away from what this leaderboard reports."
- "No canonical CCTP path. Circle's burn and mint bridge has different guarantees and speeds than the market maker routers ranked here. The leaderboard measures the router path because it is the head to head every comparison article ranks."
- "Single point of measurement in EU-West (Paris). A router whose solvers sit in us-east can quote differently from there; the us-east and Singapore probes are paused."

faq:
- q: "Which bridge is cheapest for a $300 USDC transfer to Base?"
a: "The bench-fee leaderboard on the Base corridor is at openchainbench.com/benchmarks/bridge-fee. Eight routers compete on the same $300 USDC probe (Mobula, Relay, LI.FI, deBridge, Across, Near Intents, Squid and Socket) and the ranking re-sorts every 5 minutes against fresh Prometheus samples."
a: "{{best_name:chain:Base}} at {{best_p50:chain:Base}} all in on the Solana to Base corridor (p50 over 24h). {{count}} routers compete on the same $300 USDC quote and the ranking re-sorts every 5 minutes against fresh Prometheus samples; the most expensive on this corridor is {{worst_name:chain:Base}} at {{worst_p50:chain:Base}}."
- q: "Why $300, and does the winner change at $10k or $100k?"
a: "$300 is the small-ticket regime that dominates retail search. At $10k the leaderboard shifts because aggregator markups compress against intent-based routers (Across, Near Intents, Mobula) whose quotes are less size-dependent. At $100k the spread widens further and the choice becomes size-specific; the per-size tab on the bench page shows the leader at each notional."
a: "$300 is the small ticket regime that dominates retail search. At $10k the ranking shifts because fixed components (destination gas, protocol base fee) dilute into the percentage and aggregator markups compress against intent based routers whose quotes are less size dependent. The harness quotes $5, $50 and $300, so this page cannot name the leader at $10k; treasury size transfers should be quoted directly."
- q: "Is Circle CCTP not on this ranking?"
a: "CCTP is Circle's canonical burn-and-mint path for USDC. It has different guarantees, speeds and a fixed protocol path, so it is not directly comparable to market-maker routers that price a swap through a pool. The bench measures the market-maker rankings because that is the choice retail actually makes; canonical CCTP is a separate decision users make once they know their maximum acceptable latency."
- q: "How is Across usually so cheap on this route?"
a: "Across runs an intent-based settlement model where relayers compete to fill from destination inventory. That model compresses the spread component to near zero on high-liquidity pairs like USDC Ethereum to Base. On less-liquid destinations Across loses its edge; that per-destination effect is why the leaderboard re-ranks by pair rather than emitting a single global cheapest bridge."
a: "CCTP is Circle's canonical burn and mint path for USDC. It has different guarantees, speeds and a fixed protocol path, so it is not directly comparable to market maker routers that price a transfer through a pool or a solver auction. The bench measures the router rankings because that is the choice retail actually makes; canonical CCTP is a separate decision users make once they know their maximum acceptable latency."
- q: "Why does the Base corridor leader differ from the overall leader?"
a: "The overall headline pools the Solana, Base, Arbitrum and HyperCore corridors. A solver network with deep inventory on Base can lead Sol to Base and trail on Arb to HyperCore, where inventory is thinner. Today the overall leader is {{best_name}} at {{best_p50}} and the Sol to Base leader is {{best_name:chain:Base}} at {{best_p50:chain:Base}}; the two names coincide only when one router leads on every route."
- q: "Which USDC routers are on this leaderboard?"
a: "Eight routers: Mobula, Relay, LI.FI, deBridge, Across, Near Intents, Squid and Socket. Stargate is not measured because its $300 USDC quote API did not meet the harness's coverage or reliability threshold."
a: "{{count}} routers with live data today. The measured set spans direct protocols, aggregators, intent layers and relays; a router drops out of the ranking when its quotes fail for the whole 24h window and returns when they resume. Stargate is not measured because its $300 USDC quote API did not meet the harness's coverage or reliability threshold."
- q: "How often is the leaderboard refreshed?"
a: "Every 5 minutes. The harness probes every router's quote API at that cadence, publishes bridge_effective_fee_bps to Prometheus, and the page reads a 24h rolling average. Because the recording rules re-aggregate every 30 seconds the on-screen ranking re-orders within a minute of any router changing quote behavior."
a: "Every 5 minutes. The harness requests a quote from every router at that cadence, publishes `bridge_cost_percent` to Prometheus, and the page reads a rolling 24h p50, p90 and p99, so a single off market quote cannot move the headline."

related:
- which-bridge-has-the-fastest-quote-api
- which-bridge-has-the-cheapest-usdc-fee
- which-blockchain-has-cheapest-transaction-fees

seo_title: "Cheapest bridge for USDC to Base 2026 live"
seo_description: "OpenChainBench ranks six USDC routers (Mobula, Relay, LI.FI, deBridge, Across, Near Intents) on all in cost at $300 notional across Solana, Base and Arbitrum. Live per corridor breakdown on the bench page."
seo_title: "Cheapest bridge for USDC to Base: {{best_name:chain:Base}} at {{best_p50:chain:Base}}"
seo_description: "{{best_name:chain:Base}} is the cheapest bridge for $300 USDC from Solana to Base at {{best_p50:chain:Base}} all in (fees, slippage, gas), measured live every 5 minutes across {{count}} routers."
status: live
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ related:
- cheapest-bridge-usdc-to-base
- which-bridge-has-the-fastest-quote-api

seo_title: "How much does it cost to bridge USDC to Arbitrum? Live all in fees"
seo_title: "How much does it cost to bridge USDC to Arbitrum? Live fees"
seo_description: "Bridging $300 of USDC costs from {{best_p50}} to {{worst_p50}} all in (p50, 24h) depending on provider. deBridge, LI.FI, Mobula, Relay, Across and Near Intents measured live by OpenChainBench."
status: live
2 changes: 1 addition & 1 deletion answers/is-polymarket-legal-in-the-us.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,5 +83,5 @@ related:
- best-prediction-market-for-politics
- which-prediction-market-data-api-is-the-freshest

seo_title: "Is Polymarket legal in the US? CFTC settlement, QCX and state bans explained"
seo_title: "Is Polymarket legal in the US? CFTC settlement and state bans"
seo_description: "Polymarket.com geoblocked US users after a 2022 CFTC settlement. Polymarket US (QCX) launched December 2025 as the CFTC-regulated US option. Kalshi is also CFTC-regulated. Minnesota banned prediction markets Aug 2026."
Loading
Loading