Methodology 2.6
0t.link methodology
Updated 2026-09-23
What 0t compares
0t.link compares available ways to move a stated amount from one asset to another.
Each result is a route: a provider, an origin network, a destination network, an expected net amount, and a settlement estimate only when a provider supplies one.
The public product answers three questions: where should the money go, what actually happened, and which markets consistently deliver.
0t does not hold funds, take custody, sign transactions, or move customer money.
Live versus sample data
Every displayed number has a status: LIVE, SAMPLE, STALE, UNAVAILABLE, ESTIMATED, or HISTORICAL.
If at least one live provider returns a usable quote for the request, only live quotes are ranked.
Sample routes are not mixed into a live ranking. If no live provider supports the route, 0t says so instead of substituting sample numbers.
A quote is never labeled LIVE after it is stale or expired.
How net proceeds are calculated
Net output is the destination-asset amount the recipient is expected to receive after all known destination-side costs.
If a provider returns a destination amount and does not itemize a destination-side fee, that destination amount is stored as both quoted_output and net_output.
Unknown costs are stored as null. 0t does not treat an unknown fee as zero.
Sender-side gas reported in USD is recorded separately. It is not subtracted from the destination-token amount, because that would mix units.
How fees are handled
Provider fees, network fees, gas, other fees, and slippage are stored only when the source discloses them.
If any of those fields is unavailable, the interface can say that some provider costs are unavailable.
0t does not add an 0t execution fee. This phase is intelligence only.
Comparability
Routes are comparable when they share the same source asset, destination asset, input amount, and destination network.
USDC → ETH on Ethereum and USDC → ETH on Base are not treated as identical outcomes.
ETH credited on Kraken, Coinbase, Bitstamp, or Binance is not treated as the same destination as ETH on Ethereum, Base, or Arbitrum.
USD paid out through MoonPay is not treated as the same destination as a USD ticker on Kraken, Coinbase, Bitstamp, or Binance.
USD credited through Coinbase Ramp is not treated as the same destination as MoonPay payout or a USD ticker on Coinbase Exchange.
BTC on Bitcoin, WBTC on Ethereum, and BTC credited on an exchange are not treated as the same destination.
Origin country and destination country are stored when a provider uses them. They are unused for the current DEX-aggregator and public-ticker sources.
How ranking works
BEST_RATE ranks by highest comparable net output.
FASTEST ranks only when a provider supplies a settlement estimate. Missing times are not invented.
RECOMMENDED uses recommended_v2_net_freshness_settlement: net proceeds 70%, quote freshness 20%, settlement estimate 10% and only when present.
Phase 2 does not use historical reliability scores. Those will be added only after the collected dataset supports them.
How savings are calculated
Executable savings compares the best net output with the next-best route that shares the winner's destination network, at the selected size.
savings = best_net_output − next_best_net_output.
The headline states that difference in USD when a reference price is available: Executable savings: best route saves $XX.XX vs next-best.
The supporting line shows destination-asset proceeds and the relative difference in basis points.
This is a counterfactual estimate within that comparison set. It is not a promise of execution.
Quote freshness
Every quote stores the provider timestamp when supplied, the 0t received timestamp, age, expiration, and status.
Current live aggregators are treated as stale after 30 seconds unless they expire sooner.
Expired quotes are labeled expired. They are not presented as live market data.
Historical observations
A background collector requests configured markets, amounts, networks, and live providers independently of website traffic.
Each successful collection inserts a new immutable observation. Previous rows are never overwritten.
Raw provider responses are stored after credential sanitization so later normalization versions can reprocess them.
Each observation records normalization_version, methodology_version, and collector_version.
Failed collections are stored as jobs. Failures are data.
How numbers are represented
User savings are shown in USD when a reference price can be implied from the comparison.
Actual proceeds are shown in destination-asset units, such as ETH received.
Rates, spreads, slippage, price impact, and relative execution differences are shown in basis points, with the percentage in parentheses for readability: 12 bps (0.12%).
Underlying values are stored at full precision. Rounding happens only when a number is formatted for display.
USD reference for savings
When the destination asset is ETH and the source is USDC or USDT, 0t also expresses the savings difference in USD.
That USD figure uses the implied price from the winning quote in the same comparison: input ÷ expected ETH output.
It is a reference value for readability, not a locked FX quote.
Independent FX benchmark
For cash-out and fiat corridors, 0t also stores an independent mid-market FX rate from Frankfurter, which republishes the ECB reference print.
That rate is collected on the worker and cached in D1. Compare uses the cached print to calculate a theoretical fair destination amount. It does not call Frankfurter once per venue.
Fair value = input amount × mid-market rate. USDC, USDT, and DAI are treated as 1 USD for that conversion, and that peg assumption is disclosed.
The gap versus mid-market is the combined FX spread, disclosed fees, and any other costs the quote does not itemize. Missing fees stay null. 0t does not invent a hidden-fee line when the provider did not disclose a breakdown.
Frankfurter is a benchmark, not a route. It cannot move money and is never ranked as a venue.
MXN, BRL, JPY, and AUD prints are cached as reference corridors. They are not compared as payout routes until an official quote API exists.
This methodology version is 2.6.
Size-aware exchange books
Centralized exchange rows walk the official public order book to the requested size when that book is published.
USDC → ETH consumes asks. ETH → USDC consumes bids. The destination amount is the volume-weighted fill, not the top-of-book touch.
Price impact is (VWAP − top) / top when the published book covers the size. It is stored as a ratio and shown in basis points.
If the published book does not cover the size, or the depth endpoint fails, 0t falls back to the official top-of-book ticker and labels that row top-of-book. It does not invent the missing depth from the touch price.
Coinbase Exchange still uses the official ticker only. Its full level-2 book is too large to fetch as a live quote.
Landed-on-chain cost
A landed row is shown only when the venue publishes a fixed withdrawal fee in the destination asset on the native chain.
Today that is Bitget, HTX, and Poloniex for ETH, USDC, BTC, or SOL when those fees are present and not marked dynamic.
Landed net output = size-aware or top-of-book destination amount − published withdrawal fee. Destination is Ethereum, isolated from the same venue's exchange credit.
Kraken, Coinbase, Binance, and the other books stay credit-only until they publish a public withdraw fee. 0t does not invent gas or VIP tiers.
Park USDC
Park compares published rates for sitting in USDC at the selected size, not swapping it.
Aave uses the official GraphQL supply APY for Ethereum USDC. Proceeds are a hypothetical 365-day value at the current print. Destination is Aave v3 aUSDC.
US Treasury uses the official Fiscal Data average interest rate on Treasury bills outstanding. That is a monthly average, not an auction award. Destination is a Treasury bill, not USDC.
Compound and Sky stay unavailable until they publish an official public rate API. 0t does not scrape interfaces or use third-party yield aggregators.
These rows are never mixed into the USDC → ETH route compare.
Independent prediction markets
0t compares implied YES prices on Kalshi, Polymarket, Azuro, and Omen when those venues appear to settle the same outcome.
Matching uses event identity, expiration when published, resolution source when published, and YES/NO wording. Titles alone are not enough. Equivalence is Verified, Probable, or Unverified.
Workers AI is used only to confirm borderline matches. High-confidence name-and-event matches are accepted without the model. Related but differently structured contracts are not priced against each other.
Displayed prices are official public asks, AMM marginal prices, or implied probabilities from official decimal odds. Kalshi destination is exchange USD. Polymarket destination is USDC on Polygon. Azuro destination is the protocol pool. Omen destination is xDAI on Gnosis. Those are not treated as the same payout. Dexsport is listed only when an official public book exists; none is published today.
Fee drag uses each venue's published taker formula when the parameter is known. 0t does not invent a fee when the market does not disclose one.
0t does not place, route, or hedge these contracts.
Historical market intelligence
The public markets section lists every live venue 0t compares and uses collected quote observations, not reconstructed blockchain transactions.
The 24H, 7D, 30D, and 90D controls are rolling windows, not calendar days.
Best-route changes count how often the leading provider and network changed across one-minute buckets.
Average and largest spread compare the best and second-best net output in those buckets and are shown in basis points.
Max observed savings scales that largest best-versus-next-best spread to the sampled amount when the source is USD, USDC, or USDT.
Best route frequency is wins divided by comparable minutes for the same pair, amount, and destination network. Coverage is limited below 20 comparable minutes.
These figures appear only after enough live observations exist for the sampled size.
Public transaction lookup
Pasting a transaction hash looks up the public record on Ethereum, Base, and Arbitrum.
0t shows the confirmed network, status, timestamp, parties, fee, and decoded token transfers when the explorer or public RPC returns them.
A best-route comparison is only shown when the transaction is a simple supported swap and 0t has contemporaneous quote observations. Missing proceeds and missing historical quotes stay null.
Batch contract calls, airdrops, and multi-transfer transactions are identified as public records, not reconstructed as a single comparable route.
Shareable snapshots
Pressing Compare writes an immutable snapshot of the quotes 0t observed at that moment.
The browser opens a pair-specific page at /{from}-to-{to}/{timestamp}-{id}/, which is the shareable proof record for that search.
Opening that URL reloads the stored snapshot. It does not claim the quotes remained available after that timestamp.
Limitations
Current live DEX sources are Velora, KyberSwap, CowSwap, and Bebop. Current live exchange sources are Kraken, Coinbase, Bitstamp, Binance, Gemini, OKX, Gate.io, MEXC, Bitget, HTX, Crypto.com, Bitfinex, Poloniex, ChangeNOW, and StealthEX. Current live ramp sources are MoonPay and Coinbase Ramp.
Exchange rows for Kraken, Coinbase, Bitstamp, Binance, Gemini, OKX, Gate.io, MEXC, Bitget, HTX, Crypto.com, Bitfinex, and Poloniex use official public top-of-book tickers. They are not size-aware and do not include account fees or withdrawal time. Each exchange credit is a separate destination.
Binance uses the official public bookTicker. The primary host is Binance market data; if that host is blocked from the worker, 0t falls back to the public Binance.US or Binance.com book and records which source answered. Destination is Binance credit, not Kraken, Coinbase, Bitstamp, or on-chain delivery. No API key is used and no order is placed.
MoonPay prefers the official sell-quote API for crypto to USD, EUR, GBP, or CAD. When that endpoint rejects the pair, 0t uses the official bid_price for the same sell-supported assets. Destination is MoonPay fiat, not an exchange book and not on-chain USD. Sell-quote quoteCurrencyAmount and disclosed feeAmount are stored when present. bid_price is an indicative sell-side rate; payout-rail fees are not itemized. No sell transaction is created.
ChangeNOW uses the official estimated-amount API for crypto pairs, including BTC, SOL, DAI, WBTC, LINK, and UNI. Same-chain and cross-chain crypto routes are quoted when the API returns them. Fiat on-ramp and offramp estimates are inactive. No exchange is created.
StealthEX uses the official v4 estimated-amount API for crypto pairs. Fiat and offramp pairs are not available on that estimate API. No exchange is created.
ETH on an exchange is not treated as the same destination as ETH on Ethereum, Base, or Arbitrum.
USD credited through Coinbase Ramp is not treated as the same destination as a USD ticker on Coinbase Exchange.
USD credited through MoonPay is not treated as the same destination as a USD ticker on Kraken, Coinbase, Bitstamp, or Binance.
Coinbase Ramp uses the official Coinbase Developer Platform buy and sell quote APIs. cashout_total or purchase_amount is stored as net output. Disclosed coinbase_fee and network_fee are stored when present. Fiat can be USD, EUR, GBP, or CAD. Destination is Coinbase Ramp funding or payout, not the Coinbase Exchange ticker and not MoonPay. No session token or transaction is created.
Independent FX uses Frankfurter ECB reference rates. That source is a benchmark only.
Prediction-market rows are a separate comparison class from asset-routing quotes.
Quotes can expire, liquidity can move, and later execution can differ from a comparison.
Circle and other on-ramp venues stay unavailable until they offer a legitimate public quote API.
Independent prediction-market comparison uses official public Kalshi, Polymarket, PredictIt, Limitless, Myriad, Azuro, and Omen books. 0t matches only contracts that appear to settle the same outcome. Fed rate-level contracts are not treated as the same as cut/hold buckets. Kalshi and PredictIt USD, Polymarket/Limitless/Myriad USDC, Azuro pool odds, and Omen xDAI are not treated as the same destination. When Kalshi rate-limits Cloudflare egress, 0t reuses the last official book snapshot instead of inventing prices.
Kalshi taker fees use the published formula round_up(0.07 × C × P × (1−P)) with multiplier 1 when the series multiplier is not returned. Polymarket taker fees use that market's disclosed feeSchedule rate, or zero when feesEnabled is false. Omen uses the market's disclosed FPMM fee on collateral. Myriad uses the market's disclosed buy.fee when present. Azuro implied probability is 1 / official decimal odds; book margin is not isolated. Limitless uses official active-market prices without a separate taker fee. PredictIt uses official bid/ask and does not invent a withdrawal-profit fee as a taker cost. Dexsport has no official public book API, so its prices stay unavailable.
A hedged YES/NO route is shown only on verified matches when both sides and known fees still cost less than $1. That is potential arbitrage, not executable, until official event depth is walked. Price discrepancy is shown on weaker matches.
Size-aware exchange rows walk official public books to the requested size. Insufficient depth stays labeled top-of-book. Landed Ethereum rows exist only for Bitget, HTX, and Poloniex when a fixed native-chain withdrawal fee is published.
Park compares official Aave v3 Ethereum USDC supply APY and the Fiscal Data Treasury bill average. Those destinations are isolated from each other and from swap routes. Liquidity, redemption, counterparty, smart-contract, and asset exposure are shown so destinations are not ranked by APY alone. Compound, Sky, and tokenized T-bills stay unavailable until an official public rate API exists.
This methodology version is 2.6. Historical analyses store the methodology version used at the time.