Quoting and routing
Это содержимое пока не доступно на вашем языке.
Every number you see on Kotova X comes from a request made when you asked for it. There is no rate table and nothing is pre-computed. When you change the pair or the amount, the server asks every eligible liquidity source what it would give you, all at the same time, and the answers stream back as they land.
Quotes are fetched on demand
Section titled “Quotes are fetched on demand”A quote round starts when you change what you are sending, what you are receiving, the amount, or the rate type. Typing is debounced, so the request fires shortly after you stop rather than on every keystroke.
The response is a stream, not a single answer. The first frame lists every source about to be asked, along with the reason any source is being skipped, which is why the source list can draw all of its rows before a single price exists. Each source then contributes exactly one further frame — a quote or a skip — as it settles, which is why rows fill in one by one rather than together. A closing frame marks the round complete.
Which sources are eligible
Section titled “Which sources are eligible”Kotova connects to nine liquidity sources. Not all nine are asked for every pair. A source is dropped before any network call is made if any of the following applies.
| Check | What it means | Shown as |
|---|---|---|
| Source disabled | Switched off centrally, usually while a problem is investigated | Down for maintenance |
| No catalogue entry | The source does not list one side of your pair on that network | Pair not supported |
| Rate type unsupported | The source cannot offer the rate type you selected | Fixed rate unsupported |
| Direction closed | The source lists the asset but has deposits or withdrawals suspended for it | Pair not supported |
| Amount outside limits | Your amount falls outside the source’s last known minimum or maximum | Above max / Below min |
Sources that fail a check are still listed, with the reason, rather than hidden — so you can see how many venues could have competed for your order and why the others could not.
Parallel requests and timeouts
Section titled “Parallel requests and timeouts”Every remaining source is called simultaneously, never one after another, so the wait is the slowest single source rather than the sum of all of them. Each call has a budget of roughly five seconds; a source that has not answered by then is marked as timed out and plays no further part in the round.
A source can also decline after being asked, and the reason appears on its row: above the maximum or below the minimum for the pair, with the threshold converted into your display currency; liquidity too thin to fill safely; not available in your jurisdiction; or a quote error when the source rejects the request outright.
How the best quote is chosen
Section titled “How the best quote is chosen”In the app, selection happens in two stages, and the second one is the one that counts.
Stage one — the server ranks
Section titled “Stage one — the server ranks”The server collects every successful quote and orders them by the amount you would receive, highest first. That ordering, along with the alternates, is what gets cached.
Stage two — your browser re-ranks
Section titled “Stage two — your browser re-ranks”The server’s ordering is not the final word. Your browser holds preferences that are never sent to the server: the sources you have switched off, and DEX-only mode. It re-ranks whatever remains after those filters, and the source it lands on is the one submitted when you confirm the order.
If you typed in the receive field instead of the send field, the comparison inverts. Every quote targets the same receive amount, so the best source is the one that needs the smallest deposit to deliver it.
That choice is re-checked on the server at order creation. If the source was switched off in between, the order is refused and you pick another.
Through the API
Section titled “Through the API”An app that uses the Kotova X API has no stage two. Selection runs once, on the server, under the same rule: the highest amount received, or on a reverse quote the lowest amount sent. The best source is returned with its quote, together with up to two next best sources. An order created from that quote goes to the best source or, when it cannot take the order, to the first of the next best sources that can, unless the app asks for the best source only.
Exclusions are part of each request rather than a stored preference. The app lists the
sources to leave out in exclude_sources, and can also restrict the request to sources
that cannot freeze funds. What Kotova earns on an order never weighs, through the API
or in the app. See Quotes.
Ranking parameters and weighting
Section titled “Ranking parameters and weighting”There is one ranking parameter, and it carries all of the weight:
- The amount you receive — highest wins. On a reverse quote, the amount you send — lowest wins.
Exact ties, which are rare, fall back to a fixed per-source display order and then to alphabetical order. Nothing else enters the calculation — not commercial arrangements between Kotova and a source, and not how fast a source usually is.
Display order in the list is separate from selection. Rows are grouped — selectable now, not selectable now, switched off by you, and offline — and ordered within each group by amount. The “Best” badge marks the highest amount across every source, including ones you have switched off, so an exclusion that is costing you money stays visible.
The rate you are shown is what the source quoted, all service charges included. Blockchain network fees are paid separately. See Fees.
Your own exclusions
Section titled “Your own exclusions”Switching a source off stores that choice on your device. It survives reloads, applies to every later quote, and propagates to your other open tabs. It is never transmitted: the server keeps requesting quotes from that source, and your browser keeps ignoring them. The asset picker also drops any asset or network that only the excluded source covered.
DEX-only mode is the same kind of device-local preference with a much wider effect: it removes every source that could hold or freeze funds mid-swap. Today exactly one source qualifies — Chainflip.
Caching and refresh
Section titled “Caching and refresh”Two caches sit in front of the fan-out.
The server cache is keyed on both assets, both networks, the exact amount, which side you typed, and the rate type, and lives for 60 seconds on variable rate and 30 seconds on fixed. Concurrent requests for an identical key do not each trigger a fan-out — one performs it and the others wait for its result.
The browser cache mirrors those lifetimes locally. When you nudge the amount up or down it can rescale the cached quotes instead of re-fetching, but only inside narrow guardrails: close to the cached amount, inside a mid-sized value band where source pricing is close to linear, and within each source’s limits. Outside any of those it forces a fresh round.
Quotes refresh when you change the pair, the amount or the rate type, and when you open the source list — which re-fetches if the cached quotes are past half their lifetime. No background timer re-quotes the page on its own.
Everything here produces an estimate. What you finally receive is set by the executing source, and on a variable-rate order it is set when your deposit confirms, not when you saw the quote. See The order lifecycle and Liquidity sources.