Methodology
SwapScope publishes reference prices for order-book atomic-swap markets. Everything below is what the pricing engine does, stated precisely enough to be checked against the numbers it publishes: the rejected volume, the rejection reasons and the confidence components are all served alongside the prices themselves. It is versioned, and when a rule changes the version is bumped and the change is recorded in the history at the end of this page. Current version: v1.5.0.
0. Two networks
Prices are computed separately for each of the two networks this data comes from: GLEEC's netid 6133 and the Komodo network's netid 8762. They run the same protocol over the same coins at different taker fees, and no order on one can be taken from the other, so pooling them would average two markets that never trade with each other. A pair on the primary network keeps its plain id; the same pair on the other is written base/quote@8762. A USD conversion route never crosses a network boundary. Everything below applies within one network. The two networks explains the split, when it happened, and how a swap is attributed to one.
1. Data and definitions
Only successfully completed atomic swaps can establish a reference price. Open orders are never treated as trades. Each market is stored in one canonical direction (the higher-ranked asset is the quote; ties are broken alphabetically), so observations of RXD/LTC and LTC/RXD are directly comparable. We keep these values separate and label them as such:
- Last completed swap price: the newest completed swap, whatever its quality.
- Raw 24h VWAP and filtered 24h VWAP: volume-weighted averages over all swaps versus reference-eligible swaps.
- Best bid / best ask / midpoint: order-book values. The midpoint is never presented as a traded price.
- Reference price: the robust, confirmed price described below.
- Indicative price: the best current estimate when no reference is available (order-book midpoint or an unconfirmed trade cluster), always labelled.
- Reliable volume versus raw volume: reliable volume counts only eligible, materially unflagged trades.
2. USD conversion routes
Anchor providers (CoinGecko, CoinPaprika, the GLEEC price service) supply USD prices for quote-grade assets only: approved quotes such as LTC, BTC, ETH, KMD, DOGE and USD stablecoins. The median across providers is used; provider disagreement and age reduce route quality but are published, not hidden. The disagreement penalty is measured from the provider furthest from the median, not from a robust average of them, so a single source far out of line lowers confidence sharply while the median holds the price steady. That is deliberate — sources disagreeing by a third is a fact worth surfacing — but it means a low score here can mean one bad feed rather than an uncertain market, and the anchor comparison on the asset page shows which. A DEX-priced asset such as RXD is never priced from its own external aggregator quote; that value is shown separately for comparison.
Routes form a graph: pair reference prices (bidirectional) and anchor edges to USD. We enumerate simple paths up to 3 hops, score each by the product of hop qualities with a 10% penalty per extra hop, and select the best; ties prefer fewer hops. The selected route is always displayed (for example RXD → LTC → USD) alongside alternatives and the divergence between them.
3. Trade eligibility and weights
Every completed swap in the 7-day window is evaluated for:
- USD notional — below $1 a trade is excluded from price setting outright, not discounted. The
TINY_NOTIONALflag currently marks that same set rather than a narrower one, so it records smallness without adding a second rule. - age (continuous decay with a 24-hour half-life);
- quote-asset quality and USD-route quality;
- deviation from a robust centre of the window (median absolute deviation, 3.5 MAD; trades more than 25% off are excluded unless they belong to a multi-participant cluster);
- execution outside the contemporaneous bid/ask spread (±2%);
- alternating trades between the same two participants, rapid round-trips, and runs of 3+ identical sizes;
- on-chain confirmation, when the source reports it.
On-chain evidence. Trades carry one of two kinds, shown separately because they are not equally strong. The public swap records carry no transaction ids, so all that can be done with them is to look for a transaction moving exactly the swap's amount, on the right chain, touching the address derived from that party's pubkey, near the swap time. That is an amount match: evidence of settlement, not proof, since it does not establish that the transaction was an atomic-swap contract or that the two legs were linked. When SwapScope runs its own node as a network seed, the node keeps the protocol's full event log for every swap it relays, and those records name the transactions outright on both chains. A named transaction that is then found on the chain is verified; one the record names that no server has returned yet is stated. Those records also carry the hash both halves of the swap are locked to and the preimage published when the first side claims. Where both legs are found on their chains carrying that hash, and the preimage hashes to it, the pair is proven: the two payments are shown to be one atomic swap rather than two transactions that line up, and every step can be repeated from the chains. That is a claim about the link and not about the outcome: a swap can be proven and still have failed, because the preimage becomes public when the first side claims, and the second side's claim can be rejected afterwards, leaving one payment unspent until it is refunded. Whether a swap completed is read from its own protocol log, not from this. A transaction is cited for at most one leg: where a party repeats the same trade size, the only candidate may already belong to another swap, and the leg is then marked ambiguous rather than claiming the same movement twice. Pubkeys are never stored: they are hashed on ingestion, and the amount-match path re-reads the public record and discards the key.
How a chain is read. A swap settles in one of two ways and each is read on its own terms, with the same standard of proof. On a chain whose contracts are scripts, the payment pays a hash-timelock and publishes the hash it is locked to; the spend publishes the preimage. Both are read from the transaction's scripts through an Electrum server. On a chain whose contracts are calls, the payment and the spend are calls to that network's atomic-swap contract, and the same two values sit in the call's arguments instead; both are read from an ordinary node of that chain. Server lists, the contract address and which chain is which all come from the network's own coin repository rather than from anything of ours. A call carries one thing a script cannot: the address it was made to, so a leg on a contract chain is additionally shown to have gone to that chain's declared swap contract rather than merely to have happened.
What is not possible on a contract chain is amount matching. It works by deriving a party's address from their pubkey and reading that address's history, and on a contract chain the money moves to the contract rather than to either party, so there is no address of theirs to watch. A leg there with no protocol record is therefore reported as unsupported and never as not found: nothing was looked for, so nothing failing to turn up would mean anything. Chains that mark a swap in neither way leave nothing to find either, and a leg stays at verified rather than being demoted for it.
Weight = sqrt(usdNotional) × recencyFactor × quoteQuality × routeQuality × anomalyFactor. Small trades are not deleted: they remain visible as raw activity but carry little or no weight.
4. Reference price
The reference price is a weighted median of eligible trades, after capping any single trade at 30% and any single observable participant at 40% of total weight. Because it is a median, one large trade cannot drag the price and a series of tiny trades cannot dominate it.
Repricing. The newest cluster of trades is compared with the rest of the window. A move larger than 15% becomes the reference only when confirmed by at least 3 materially unflagged trades from at least 2 observable participants, no single participant being party to more than 60% of them, with at least $20 notional over at least 30 minutes; a strong cluster (twice the trade requirement) or executable order-book support at the new level also confirms. Until then the established price is retained and the candidate is published as indicative with an UNCONFIRMED_REPRICING flag. A cluster consisting only of flagged trades is ignored (UNSUPPORTED_MOVE). Confirmed repricings supersede older trades at the old level.
5. Staleness
Freshness is the age of the newest reliable trade: under 1 hour Live, 1–12 hours Recent, 12–24 hours Low confidence, 1–7 days Stale, over 7 days No reliable current price. Confidence decays continuously between these boundaries. An order book may provide an indicative price but never resets trade age.
A stale price is the last one that was measured, republished. That matters on the price history chart, where a market nobody traded for a fortnight would otherwise draw as a fortnight of perfect stability. Stored history keeps every status, so those stretches are drawn apart from measured ones and periods that could not be priced at all are left as gaps rather than joined across.
6. Candles
OHLCV candles are built from completed swaps and published in two kinds. Raw candles include every successful swap, so they show what the market did. Filtered candles include only trades that were eligible for the reference price and not materially flagged, so they show what the methodology was willing to price from. The gap between the two lines is the part of the market that carried no price information.
Raw candles are derived directly from stored swaps, so they cover the whole record at every interval. Filtered candles depend on an evaluation, which is judged against the trades around it and as of a moment, so historical ones exist only at the intervals a reprocess can speak for — daily and weekly for older periods. A filtered line that stops short on an intraday view of old data is that limit, not missing trades.
7. Confidence score
A 0–100 score with published components: reliable 24h USD volume (15), eligible trades (10), independent observable participants (15), age of the latest reliable trade (20), bid/ask spread (10), executable depth within 5% (10), agreement between pairs (5), agreement between anchor providers (5), share of raw volume not rejected (5), influence concentration (5). An unconfirmed repricing multiplies the score by 0.7. Levels: High ≥ 70, Medium ≥ 45, otherwise Low; Stale and Unavailable follow the freshness state.
8. Manipulation detection and its limits
Participant identifiers are keyed hashes of the pubkeys carried in public swap records. The pubkey itself is never stored, and because the key is secret, a pubkey cannot be tested against this data to find out whether it traded. The hashes let us detect repeated counterparties and round-trips, but a determined actor can rotate keys, and an honest market maker legitimately appears in many trades. Flags therefore discount influence rather than prove intent, are published with codes and explanations, and are never claims about real-world identities. Order-book participant data is only available when SwapScope runs its own KDF node; with the public defi_stats source alone, order books carry price and volume only and the UI says so.
What this data cannot show is someone trading with themselves. The protocol refuses to start a swap when both sides present the same pubkey, so the SELF_TRADE check is an invariant rather than a detection: it has never fired, and if it ever does, the record is wrong rather than the trader. Two parties who are in fact one person look exactly like two parties, because telling them apart needs knowledge of who owns which address, and no public swap record carries it. So the most this site can honestly report is the shape of the activity, which is what the flags above describe. Value moving back and forth between the same two participants is visible here; whose value it is, and why they moved it, is not.
9. Versioning
Raw swaps are never rewritten. When the methodology changes, the version is bumped and derived series are recalculated explicitly under the new version so that both can be compared.