Collective Intelligence Protocol
HomeCrisisOne PriceObservatoryResearch
Hive →
↑ Methods

How One Price compares one asset across venues

NightWatch Labs, updated 2026-10-21

In an efficient market one asset has one price. In practice the same token is quoted on dozens of exchanges, and the quotes differ. One Price is NightWatch's map of those differences. It also tries to answer the harder question: is a gap something a person could actually cross, or is it a mirage? This page explains how a gap is computed and why most gaps are smaller, or less real, than they look.

The idea

If a token costs 100 on one venue and 101 on another, the textbook move is to buy the cheap one and sell the dear one. That needs three things at once: both quotes are live and comparable, the token can be moved from one venue to the other, and the cost of doing so is smaller than the gap. The One Price page shows the gaps and, next to each, how far each of those conditions is verified.

How a raw gap is computed

The waterfall scanner collects the last traded price of the token from every tracked venue that lists it. Prices in other currencies are converted to a USDT-equivalent. For each token with at least two listings the scanner takes the lowest price and the highest price and computes the spread: the highest divided by the lowest, minus one, in percent. Spreads under 0.5% are not stored. The venue with the lowest price and the venue with the highest price are recorded with the number of venues and the time skew, in milliseconds, between the earliest and latest quote used.

A second figure checks whether the gap is a crossed market. The scanner takes the lowest ask and the highest bid across different venues. If the highest bid is above the lowest ask, a buy on one venue and a sell on the other would have been profitable at those quoted prices before fees; the percentage is stored as the actionable gap. The ranking uses each venue's last traded price converted to USDT; the bid/ask crossing figure is stored beside it.

Boards and windows

The ranking board looks back over a window of 1, 2 or 24 hours and orders tokens by the largest spread seen in that window, with tokens that pass quality checks listed first. It also reports habituality, how often the same gap recurs over seven days, and a 24-hour trend. A token that shows 8% once and never again is treated differently from one that shows 0.6% every day. The board is precomputed by a worker about every two minutes and served from storage; if the stored copy is older than ten minutes the response says it is stale.

The three tags

TagWhat it means
CAPTURABLEBoth doors are reported open: withdrawals at the buying venue and deposits at the selling venue. Where both venues publish per-network data, the route must also be on a shared network with no contract mismatch.
MIRAGEThe price gap exists, but a door on the route is shut, or the two venues list different assets under one ticker.
UNVERIFIEDThere is not enough route data to call it either way.

The transfer gate

The board’s tags use a lighter three-state check (open, shut, unknown) on stored door and contract data, not the full pair gate. The public pair-gate read is the full gate, the same code the system’s own engines use. It checks in a fixed order. First, identity: a ticker known to mean different assets on different venues is refused. Second, data: with no chain or contract data for a venue, the answer is “unknown support” and the route is not accepted. Third, doors: for a shared chain to count, withdrawals must be enabled at the buying venue and deposits at the selling venue on that same chain, after chain names have been normalised so that spellings of one network match. If both venues publish a contract on a chain and the contracts differ, that route is blocked as a collision. Fourth, speed: a route whose only open path is the slow Bitcoin network is rejected by default, because a settlement time of half an hour or more does not suit the minute-scale window in which these gaps close.

Each refusal has a reason code, such as identity_collision, unknown_support, no_common_network, route_closed_or_collision or mainnet_only. The gate result is cached for 60 seconds per token and venue pair.

Fees, latency and why the net number is smaller

  • Trading fees: both legs pay a taker fee. A gap of 0.3% is gone if the two fees add up to 0.2% and anything else goes wrong.
  • Withdrawal fees: many tokens have a flat withdrawal fee, so the cost as a share of the trade is large for small sizes and small for large ones.
  • Transfer time: the gap is measured at one moment. During the minutes a transfer takes, both prices move, and the gap can close or reverse.
  • Depth: a quoted price applies to a small size. The more you trade, the further you move the book.
  • Venue risk: a deposit or withdrawal can be suspended while funds are in transit.

The page therefore ranks by raw gap but labels each row with its route status, so a large number on a shut route reads as what it is. Rows whose route is unverified stay in the list.

A worked example (illustrative numbers)

Suppose a token shows a raw gap of 1.2% between venue A (cheaper) and venue B. Both venues charge a taker fee of 0.1%, so trading costs take 0.2 points and leave 1.0. Withdrawing from A costs a flat fee that equals 0.3% of the trade at your size, which leaves 0.7. The transfer takes eight minutes, and in that time the gap narrows to 0.9% before your sell executes at B, so the realised gap is roughly 0.4% after the same costs. If the deposit door at B was shut for that token, the row would carry the MIRAGE tag and the whole 1.2% would be unreachable. These are illustrative numbers, invented to show the order of the steps, not any real result.

Refresh cadence

The page runs one shared poller of about 60 seconds, paused while the browser tab is hidden. Each tile has its own error boundary, so a broken feed shows an error in that tile only. The recent-scan tape is cached for three seconds on the server and bounded to the last 15 minutes of scans.

Limits

  • Quotes from different venues are not taken at the same instant. The scanner records the time skew between the earliest and latest quote, but a gap smaller than that skew may be a timing artefact.
  • Conversion of local-currency quotes to USDT depends on a stablecoin rate that may itself differ from the official currency rate; the Observatory method page describes this basis.
  • Door status is a snapshot of what each venue publishes. A venue can show a door as open and still delay or reject a transfer.
  • Where per-network data is missing for a venue, the board falls back to that venue's overall deposit and withdrawal flags; where those are unknown too, the tag is UNVERIFIED, not CAPTURABLE.
  • The system describes gaps. It does not send orders on your behalf from this page.

Read the Observatory method page for how regional premiums are separated from the stablecoin basis, and the risk disclosure for the general limits of this material.


Informational only, not investment advice. See the risk disclosure.