Methodology
How every ranking is computed.
Each category is ranked on published criteria with published weights. Every score is a pure function of those inputs, the code that orders rows cannot see which links pay, and the build proves both before it ships.
How a ranking is made, on one screen
The score
- 20 Availability
- 30 Published criteria
- 10 Friction
- 8 Trust record
- 18 Measured data
The criteria carry 30 of 86 base weight points.
How a score is computedCriteria per categoryYour setup
It never changes the published score or order.
How availability is statedThe evidence ladder
- Verified820scores
- Attested by provider0scores
- Partial2scores
- Invalid0scores
- Unknown46scores
822 of 868 published scores have at least one quoted, linked source; the other 46 are provisional. Sources are re-read every 45 days.
What a score rests onFive names, five things
A number on this site goes by exactly one of five names. Two are published and identical for every reader; two are computed from the reader's own answers; one is money for a stated situation. A build check fails when a surface prints a word these replaced.
- ChainChoice ScoreOverall rank
- The published figure out of 100 (published scores fall between 41 and 99) a product carries in a category: its criterion strengths under the published weights, plus availability, friction, trust and quantitative data under the published base weights, computed before any reader answers anything and identical for every reader.Not a rank. Two products can share a ChainChoice Score and still be ordered by the tie-break; a score of 78 says nothing about position until the pool is read.Produced by: The ranking engine under default inputs, published in /data/rankings.json with its breakdown.
- Overall rankOverall rank
- The published order of a category: every product by ChainChoice Score, ties broken by the published tie-break, the same for every reader. "#1 overall" is position 1 in this order.Not a fit. It knows nothing about the reader — no country, no stated requirement, no scenario — and does not change when the reader answers questions.Produced by: The ranking engine under default inputs, published in /data/rankings.json as rank per product.
- Fit for youFit for you
- The same arithmetic as the ChainChoice Score, run under the reader's own answers: a criterion marked required doubles its published weight, preferred multiplies it by 1.4, and stated attributes claim the preference points. Different answers, different figure.Not the ChainChoice Score. It is printed beside the published figure with the shift between them, so a reader can see how far their own answers moved it — and it can be lower.Produced by: The ranking engine under the reader's inputs, computed in the browser at the moment of the run and part of no published file.
- Fit rankFit for you
- The order of a category under the reader's own answers: products the stated country cannot use are removed, the rest are ordered by Fit for you. "#1 for you" is position 1 in this order.Not the Overall rank, and never printed in its place. Both orders stay on the page: the Overall rank so the reader can see what the answers changed, the Fit rank so they can see what their answers did.Produced by: The ranking engine under the reader's inputs; a saved decision stores its #1 so the replay can say whether the Fit rank has since changed.
- Scenario economicsScenario economics
- A money figure for one stated situation — an annual cost, a net yield, a transaction cost — computed from the published pricing block and the amounts, country and period the reader entered.Not a ranking and not a score. The cheapest product in a scenario is a fact about that scenario; it does not move the ChainChoice Score, the Overall rank or the Fit for you, and a scenario with an unknown price prints "Unknown", never 0.Produced by: The typed pricing model (lib/pricingCore) under the reader's scenario inputs, in the browser.
The three chips above are the same words the authority badge prints on every surface that names a #1, read from this vocabulary, so the badge and the glossary cannot disagree; a “lowest known cost” chip is Scenario economics and ranks nothing.
How a score is computed
Three stages, each published. The first is the methodology you can inspect per category below; the second and third are the constants the engine applies to every category alike.
Criteria to methodology points
Each criterion is scored 0–10 from public evidence. Its contribution is its weight as a share of 100, times its score as a share of 10, times 32 points (
weight ÷ 100 × score ÷ 10 × 32), so a category's criteria together control 32 of the 40 objective points. The remaining 8 are preference points: unclaimed in the ChainChoice Score wherever a category is scored on its own criteria, because nothing is stated there, and claimed by the attributes you state in a Fit for you run; they tilt, they do not decide. A criterion without a receipt is not scored — it contributes nothing and is not read as 0.Fit for you re-weights the criteria: a criterion you mark required has its published weight doubled and the rest renormalise; preferred multiplies it by 1.4. 2 categories also publish situational adjustments: +2 points of fit when one specific answer matches a provider's published fact (an optimistic rollup for the deepest liquidity, a stableswap pool for pegged assets). 10 answers are published as a requirement instead, which removes the providers that fail it and names each one (a fast, trust-minimised exit shows ZK rollups only; a Bitcoin-only holder sees only devices with a Bitcoin-only firmware). Each is listed on its category's model below, keyed on a published fact and never on a provider's name, and none moves the published ChainChoice Score. The sentence "your weighting moved cost from 18% to 33%" is one you can check.
Where a category's scorer has no branch for your answers, the attributes you mark (a mobile app, long-term security) score directly: required ones share 24 of the 40 points and preferred ones 16, each scaled by the provider's published strength on it (7 of 10 when none is published). Each required attribute a provider lacks costs 4 points, and lacking more than half of them caps the dimension at 8 of 40. The published ranking is run with no answers, so this never moves the ChainChoice Score.
Five dimensions to a weighted total
The criteria dimension (
Ranking the pool…objectiveFitin the feed) joins availability, the friction dimension (frictionFit), trust bonus and quantitative data under published base weights; the total is the ChainChoice Score. A base weight is how much a dimension could move a score; each category also publishes how much it actually did.The friction dimension starts from how beginner-friendly a product is, adds up to 3 points for a simple, familiar flow the product publishes, and moves by the experience you state in Fit for you only through this published list of 5 rules. No published ranking states an experience, so none of them moves the ChainChoice Score.
- You are new to crypto, a hardware device you did not ask for: −4 points. A hardware wallet needs a careful first setup that a first-time buyer did not request.
- You are new to crypto, a DeFi-native or onchain-credit product, unless you use dapps daily: −3 points. These products assume onchain experience a first-time reader may not have.
- You are new to crypto, a product not marked beginner-friendly (hardware you asked for excepted): −2 points. A product without a beginner-friendly flow costs a first-time reader more effort.
- You are experienced, any product: friction is raised to at least 10 of 15: raised to at least 10 points. An experienced reader is not slowed by complexity, so it is not counted against a product.
- You are experienced, a very simple product (beginner-friendliness 9 or 10) with no advanced-trading or DeFi-native features: −2 points. A tool built for first-time buyers can feel limiting to an experienced reader.
Pool-relative score, then the Overall rank
The leader anchors the pool; every other row sits below it by its weighted distance, and no row may print above the row above it. The order itself comes from the chain below, the one the engine applies and the feed publishes as
formula.tieBreakChain; each key is read only when every key before it is equal.Why the figures sit high and close together: the weighted total runs 0 to 86, and step 2 maps it onto 40–99, so the scale has no zero: a weighted total of nothing still maps to 40. The leader of each category keeps that absolute figure; every other row prints 2.6 points below it for each weighted point it trails by, bounded to 41–99. A dimension that holds the same value for every row in a category adds the same points to all of them, which lifts the figures without separating them. Read a score against the row beside it, not as a percentage: a gap of 3 is a little over one weighted point. Categories rest on different criteria, so compare scores inside one category.
- availabilitySource, for a reader who states a country only: in perp_dex, perp_house_vaults, options_vaults, prediction_markets, a row whose availability in that country rests on a region tag its record gives no source for (no availability note quoting the provider's terms, and no dated country entry) sorts below every row whose availability is sourced. No row carries it in the orders published in this file, which state no country.
- weightedTotal as step 1 states it, higher first. Only rows whose weighted totals are exactly equal reach the keys below.
- unroundedWeightedTotal, higher first: step 1 over the dimension points before they are kept to a tenth of a point, published per product. Since methodology v2 a shared weighted total from different unrounded points is ordered by those points, so only rows equal on both reach the keys below.
- criteriaAverage, higher first: the row's unrounded weighted average of its published criterion scores (0 to 10) under the weights in use. Applied only when both rows are scored on their category's criteria and the averages differ; otherwise the keys below decide. Since methodology 2026.09.12.
- tiebreakDelta, higher first: the sum of three factors. (1) Price: when the category has one comparable pricing basis that may decide rank (priced for at least two of its catalog rows, not an entry-plan figure derived from a price ladder, and quoted in a single currency), a priced row earns 0 to 2 points in proportion to where its price sits between the highest and the lowest in the pool, or 1 point when every published price on that basis is equal; a row with no price on that basis, and every row of a category without such a basis, earns 0. (2) Strength: 1 point when at least three of the row's catalog fitStrength values are 9 or above; those values are its published criterion scores, plus further strength keys on some rows. (3) Dimension: 1 point when the row scores at least 85% of the maximum on the highest-weighted dimension of the weights in use (the first in weights order when two are equal). A row outside the alternate product catalog (every payment_gateway row) carries 0. It orders rows and is never added to a score.
- objectiveFit points, higher first.
- product name, alphabetical.
The published per-category tieBreakRules are not yet applied by the engine; where two rows share a weighted total and an unrounded weighted total, the chain above decides. Since methodology 2026.09.12 the first key after the totals is the two rows' unrounded weighted criterion averages, so a tie between rows scored on the published criteria is ordered by those criteria; the generic factors decide only where the averages are equal or a row has no criterion scores. tieBreakDecisions counts only pairs equal on both totals, and againstCriteria lists any of them still ordered against the criteria.
Determinism is asserted in the test suite: the same inputs always produce the same order, across every live category.
Editorial principles
Independence
No provider can pay for a position. The modules behind every surface listed under Ranking-blind below cannot import the affiliate registry, the outbound-link resolvers or the click telemetry; a build gate walks all 968 of them, fails the build if one can, and re-proves on every build that it would catch a planted read. Referral links are declared on the row, never in the score.
Transparency
Every weight, criterion and constant on this page is the one the engine runs, read from the same module. The full ranking with its breakdowns is published at rankings.json so the order can be rebuilt outside this site.
Fit rank beside the Overall rank
There is no single best product. A country you state removes providers that do not serve it; an answer published as a requirement removes the providers that fail it; a criterion you mark required re-weights the published model. Both changes are shown next to the result: the Overall rank stays visible beside your Fit rank, and neither is ever printed in the other's place.
Continuous review
Sources are re-read on a published cadence — 45 days for 121 of 121 categories — and every read is dated. The current evidence window runs 24 September 2026 to 10 November 2026; 103 of 108 categories carry a dated read, the rest say so.
What a score may rest on
A criterion is scored from a public page with a quote and a URL, read on a dated sweep. Where that receipt is missing the placement is published as needing evidence, not dressed as verified.
- Sources per product
- ≥ 4
- Required in 114 of 121 categories, with at least 4 structured facts.
- Needs evidence
- 46
- Published placements with zero public receipts — a score with no quote-and-url cell behind it yet.
- Complete ladders
- 99/485
- Criteria whose 0–10 rungs are all written; 59 more are partial. A published score is checked against every rung that exists at build time.
- Live feeds
- 5
- Price, volume and yield feeds regenerated on the build; last 12 November 2026. Shown beside the rankings, never in a score.
What is not measured
- Nothing is tested by transaction. Fees are read from published schedules and receipts, not from live orders placed by us.
- No provider is interviewed. A claim on a provider's own page counts as that provider's claim, and is labelled as such.
- Outcome accuracy publishes only above 30 responses. Below that floor the accuracy page shows its empty state rather than a percentage.
- The field is not countable. 771 refusals are named with reasons; no share of "all providers" is claimed because no such denominator exists.
How availability and other claims are stated
A sentence on a product page comes from one of six places, and the page says which. Availability is the sharpest case: a provider’s own “global” tag, a region it lists, and a country a model run checked at a named source are three different things, and they are printed in three different words. Only 0 provider × country pairs counted as verified on 12 November 2026, the day this page was built; everything else is labelled as what it is.
The nine availability states
- Verified in Germany
- Availability for this country was confirmed at a named source within the last six months.Rests on: Verified fact. Example for Germany: “Availability in Germany verified on 9 May 2026.”
- Verified: not available in Germany
- A named source, read within the last six months, confirms the provider does not serve this country.Rests on: Verified fact. Example for Germany: “Verified not available in Germany on 9 May 2026.”
- Lists Europe; Germany not individually verified
- The provider lists the region this country is in. The country itself was not checked.Rests on: Provider claim. Example for Germany: “Provider lists Europe among its markets. Germany itself was not verified.”
- Provider states broad availability
- The provider states broad availability. No restriction naming this country was found in the sources read.Rests on: Provider claim. Example for Germany: “Provider states broad availability. No restriction naming Germany was found in the sources read; Germany itself was not verified.”
- Not among the markets it lists
- The provider lists the markets it serves and this country is not among them.Rests on: Provider claim. Example for Germany: “Provider lists the markets it serves and Germany is not among them. Not verified by ChainChoice; this is the provider’s own list.”
- Restricted in Germany
- The provider’s own terms name this country as restricted.Rests on: Provider claim. Example for Germany: “Provider states: Germany is a restricted market. Not verified by ChainChoice; the provider’s own terms say so.”
- Existing customers only in Germany
- The provider serves existing customers in this country but takes no new ones.Rests on: Provider claim. Example for Germany: “Provider states: existing customers in Germany are served, new sign-ups are not.”
- Waitlist in Germany
- The provider has announced this country and is taking a waitlist.Rests on: Provider claim. Example for Germany: “Provider states: Germany is announced and taking a waitlist; the service is not open there yet.”
- Availability not published
- The record does not say, or no country was stated.Rests on: Unknown. Example for Germany: “The record does not say where the provider operates.”
A verified state needs a country entry with a source URL and a date younger than 180 days; an older entry falls back to what the record says. Green is used for a verified “yes” only. A provider’s claim and a region listing are amber because they are provisional; an omission or a named restriction is red; nothing stated is grey.
The six claim types
- Verified fact. Read at a named source on a stated date.
- Derived metric. Computed by the engine from verified facts; the formula is published.
- Provider claim. The provider says so. ChainChoice has not checked it.
- ChainChoice judgment. A ranking or score the published methodology produced.
- Editorial context. Background written for the page; not a fact about the record.
- Unknown. The record does not say.
A provider’s own figure that a page has to show — a country count, a location count, a coverage claim — is printed with the words “Provider states:” in front of it. A build check reads every product’s headline fields and fails when marketing language appears there without that attribution; a second check reads every source file and fails when any surface composes an availability sentence from a country name instead of from the state.
Four things that were one badge
Until 9 September 2026 one badge printed a rebuild notice when a receipt file failed to load, “Low” when a category had no research payload, and “High” when everything was in order — three unrelated facts in one word. They are now four named states, each derived from its own input, and a surface prints the one it means.
Score evidence — does the published score reconstruct
- Verified
- Every criterion strength reconstructs from a quoted observation with a source URL, and the build checks that each equals the published value.820 of 868 published scores today.
- Attested by provider
- Every criterion is covered, but at least one rests on a provider officer’s signed, dated and hashed attestation of a fact no public page shows, labelled attested-by-provider; an attestation lifts its criterion by at most one rung over the public evidence.0 of 868 published scores today.
- Partial
- Some criterion strengths have no observation on file, or their quote carries no source URL a reader could follow.2 of 868 published scores today.
- Invalid
- An observation on file disagrees with the published strength. The ranking is not restated until the two agree.0 of 868 published scores today.
- Unknown
- No structured observation is on file for this provider in this category; the strengths are the catalog’s published values.46 of 868 published scores today.
Read from the build’s own count of quoted, sourced cells per provider, never from a file fetched in the browser — so the state is the same before, during and after the receipt file loads. A build check keeps every research score equal to the published strength, which is why a sourced cell counts as a reconstructing one; a disagreement found at run time is the only way to “Invalid”, and it withholds the leader’s title until the two agree.
Public receipts — did the file arrive
- Available
- The receipt file loaded; every quote can be opened beside its score.
- Rebuilding
- This build expects a receipt file the server has not published yet. The scores stand on receipts verified at build; the quotes return when the file lands.
- Failed to load
- The receipt file could not be fetched from this connection. Nothing about the score changed; reload to try again.
- No receipt file
- This category publishes no receipt file, because no structured research payload exists for it yet.
A transport state: it says what the page can show, never what a score is worth. 104 of 121 categories publish a receipt file; the other 17 say “No receipt file” without making a request. A file that fails to load leaves every score, band and rank as it was.
Evidence confidence — the band a reader sees
- High
- Every criterion is scored and at least three of them carry a quoted, sourced receipt.
- Medium
- Either every criterion is scored or at least three receipts are on file — not both.
- Low
- Fewer than three receipts on a partly scored product, or no receipt with a source URL at all — including a category whose quotes were filed without one.
- Not yet rated
- No structured observation is on file for this category, so there is no receipt count to band.
Example reasons, as printed: “4/4 criteria scored, with 4 dated sources quoted.” · “4/4 criteria scored, with 4 quotes on file, none carrying a source URL.” · “No structured observation on file for this category; the receipt count is not counted.” The band reads the same build-time count as the validity above; nothing about a fetch can lower it.
Freshness — how old a date is
- Ranking snapshot
- Always current: a snapshot is true of its own day and is not claimed as today’s.
- Evidence verified through
- Current to 90 days · aging to 180 · stale beyond.
- Live feed as of
- Current to 6 hours · aging to 12 · stale beyond.
- Editorial reviewed
- Current to 180 days · aging to 365 · stale beyond.
- Field verified
- Current to 180 days · aging to 360 · stale beyond.
- Methodology
- Always current: a snapshot is true of its own day and is not claimed as today’s.
A date is judged on the day it is read, against the window for its kind; a category’s own review cadence (121 × 45 days) replaces the 90/180-day sweep window on its model page. Freshness labels and never demotes: an aging or stale date leaves the score unchanged and shows the date so the reader can weigh it. Only a conflict — two sources that disagree — withholds a leader’s title. A date that is not a date is “Unknown”, never silently current.
Category-level methodology
Every category is ranked under its own model: its criteria, weights, ladders, tie rules, evidence rules and sensitivity. Open one to inspect it row by row.
Account Abstraction Infra
Appchains / L3s
Automation & Keepers
Bitcoin Mining Pools
Block Explorers
Blockchain Indexers
Bridges
Bug Bounty Platforms
CDP Stablecoins
Creator Mint Platforms
Cross-Chain Messaging
Cross-Chain Swaps
Cross-Chain Token Standards
Crypto Bill Pay
Crypto Cards
Crypto Gift Cards
Crypto Neobanks
Crypto Offramps
Crypto Payroll
Crypto Remittances
Crypto Savings Plans
Crypto Subscriptions
Crypto-Backed Loans
DAO Governance Tools
Data Availability Layers
Decentralised Compute
Decentralised Identity
Decentralised Storage
DeFi Dashboards
DeFi Insurance
DePIN Networks
Dev Frameworks
DEX Aggregators
DEXs
Enterprise Crypto Accounting
Exchanges
Fiat Rails & Banking for Crypto Businesses
Fixed-Rate Yield
Flash Loan Venues
Hardware Wallets
Incentive Distribution
Institutional Custody
Institutional Execution Platforms
Intent Networks
Key Recovery & Inheritance
KYC & Compliance
L2 Blockchains
Layer-1 Blockchains
Lending & Borrowing
Lightning Payment Infrastructure
Lightning Wallets
Liquid Lockers
Liquid Staking
Liquidity Management
Market-Data APIs
MEV Protection
Money-Market Funds
MPC & Embedded Wallets
Naming Services
NFT Analytics
NFT Lending
NFT Marketplaces
Onchain Analytics
Onchain Attestations
Onchain Monitoring
Onramps
Options Vaults
Oracles
OTC Desks
P2P Exchanges
Paid Crypto Research Seats
Payment Gateways
Perp DEXs
Perp House Vaults
Portfolio Tracking
Prediction Markets
Privacy Tools
Private Credit
Proof of Personhood
Relayers
Restaking
Retail Staking
Rollup-as-a-Service
RPC & Node Services
Seed Phrase Backup
Sentiment Analytics
Shared Sequencers
Sidechains
Simple Buy
Smart Accounts & Multisig
Smart-Contract Audits
SocialFi
Stablecoin Issuance Platforms
Stablecoin Settlement
Stablecoin Yield
Stablecoins
Staking
Structured Products
Tax Software
Token Approval & Revoke Tools
Token Launch Platforms
Token Launchpads
Token Screeners
Tokenisation Platforms
Tokenised Bonds
Tokenised Carbon Credits
Tokenised Commodities
Tokenised Equities
Tokenised Funds
Tokenised Real Estate
Tokenised T-Bills
Trading Bots
Trading Tools
Transaction Simulation
Travel Rule Compliance
Wallet Screening
Wallets
Web3 Apps
Wrapped Assets
Yield Aggregators
Yield Vaults
Why some categories are not ranked right now
We read each provider's own public pages, documents and terms. We do not read a site with automated tools when its terms bar robots, crawlers, scraping or automated access, or when its robots.txt blocks AI agents like ours. We follow what the site asks.
When the facts we compare on rest only on pages like these, the provider stays listed but is not ranked. We show what we could read, and why. This is not a verdict on the product.
A ranking needs at least five products we can read in full. With fewer, the category shows "Not ranked right now" and lists its products A to Z. It is ranked again once five can be read in full: a provider's own pages are read by hand, the provider gives us permission or allows our declared agent, ChainChoice-research/1.0, or another allowed source covers the same facts, such as code it publishes for anyone to reuse, or on-chain data.
We check every category that is not ranked at least every 45 days. Each page shows the date of its next check.
A category is also not ranked when a source its method relies on is paused while we ask its permission, or bars automated reads, even if we can read every product: we will not rank on a figure older than 45 days. It is ranked again once the source gives us permission or we find another source we are allowed to use.
Why each category is not ranked today
Fewer than five products we can read in full: Cross-chain Swap Routes, Crypto Cards, Crypto Gift Card Services, Crypto Tax Tools, Offramps, Shared Sequencers, Simulation Tools.
A source we rely on is paused or bars automated reads, so one of the things we compare cannot be dated: Blockchain Oracles, DePIN Networks, NFT Lending Protocols, NFT Marketplaces, Prediction Markets, Privacy Tools.
Questions
Is a provider that is listed but not ranked a bad choice?
No. A clause about automated reading is a rule about how a website may be read, not a judgement on the product. We still name the provider, show what we could read and say why it is not ranked.
Can a provider ask to be read?
Yes. It can allow our declared agent, ChainChoice-research/1.0, in its robots.txt, and give us written permission where its terms bar automated reading. Send it to the address in our imprint, and we read the provider in full at our next check.
Why not read these sites anyway?
Our reading tools are automated. When a site says it does not want automated reading, we respect that, even when the page would load for us. Reading it anyway would go against the site's own rules.
How do you decide whether a site bars automated reading?
We read its terms and its robots.txt. A clause counts when it covers the website itself; one that covers only an app, an API or account holders leaves the website open to us. A robots.txt that blocks only crawlers that train AI models does not count, but one that blocks AI agents that read pages for answers does.
What can you still read for a provider whose site we leave unread?
Code it publishes for anyone to reuse, in its own GitHub organisation, its contracts on the public blockchain, and other sources that allow our reading, such as an independent record of incidents. If those cover every fact we compare on, the provider counts and is ranked with the rest.
Why does a category need five products?
With fewer than five, an order says too little, and one missing product can change what looks best. So below five we list the products A to Z with what we read, and we do not rank them.
When will a category be ranked again?
When five of its products can be read in full, or, where a source we rely on is paused or bars automated reads, when that source gives us permission or we find another we are allowed to use. We check every category that is not ranked at least every 45 days, and its page shows the date of the next check.
Published methodology versions
Each version is a dated change to the model. The changelog carries the full entry; the feed names the version every score was computed under.
- v2026.11.1The text of the published-cost criterion for wrapped assets loses the dollar price of bitcoin it quoted from DefiLlama, a source this site paused on 27 October 2026. No band and no score changes.
- v2026.10.18Retail Staking is a new category: ETH staking from Revolut, Kraken, Coinbase, Bitstamp, OKX and Bybit, with Lido's stETH as the self-custody yardstick, scored on the share of the reward you keep (50), the routes back to ETH (30) and the rate shown before sign-up (20).
- v2026.10.17A new category ranks recurring crypto buys on five published criteria: cost per year at €100 a month (35), custody and the route to your own wallet (25), licence and asset protection (15), minimum and schedule (15) and execution price transparency (10). Cost is a year of executions at the reader's monthly amount; a plan whose provider publishes no spread or bound on it shows "Spread unpublished" beside its fee instead of a total and cannot score above 5 of 10 on cost. Find my best adds the answer "Never held by the provider", which removes every plan that holds the coins itself.
- v2026.10.16Exchanges add two MiCA-authorised venues, read on 28 October 2026 from their own pages and ESMA's register: Bit2Me (Spain) and Gate's EEA entity (Malta). Gate, refused since 18 August for a pending licence and for adding nothing on a scored criterion, now has its EEA entity on the register, and none of Binance, Bybit or OKX matches or beats it on every criterion; Gate's global platform stays refused. KuCoin EU is refused: its own site says trading and deposits have been suspended since 4 February 2026. WhiteBIT stays refused: its EEA website takes waitlist sign-ups only.
- v2026.10.15OKX Wallet, Electrum and Sparrow Wallet are now ranked among software wallets, each graded on the four published criteria with a quote and source for every score, read on 2026-10-28. Ledger Wallet (formerly Ledger Live) is named as refused: it holds no key without a Ledger device, and the devices are ranked in hardware_wallet. The criteria, ladders and weights are unchanged.
- v2026.10.14Owner ruling, 28 October 2026: each reader's ranking uses the rate charged by the entity that serves their country, replacing the dearest-entity rule of 2026.10.13 before it reached the live site. A reader with no country is scored on the record's base rate. Where a venue's entity for the reader's region was not read, the base rate applies and the row says "regional rate not read".
Verification surfaces
Every claim above is backed by a public surface that exposes the numbers and their history.
- Categories ranked
- 108
- Categories with a published ranking.
- Published scores
- 868
- Placements with a published score in rankings.json — the number the order is rebuilt from.
- Criteria
- 485
- Across 121 category models; weights sum to 100 in each.
- Considered, refused
- 771
- Products a category considered and turned away, each with a published reason. Not a share of the field: the field is not countable.
- Reconstructable
- 121/121
- Categories whose displayed score is a function of the published breakdown. The exception table is read by the gate that checks it.
- Ranking-blind
- 968 modules
- 99 entry points across 8 surfaces (the published order, Fit, search relevance, provider discovery, the featured lists, the /vs/ verdicts and every "why it leads" or "what would change it" line, what is researched and re-read first and filters) walked; none can read payout, partner status, outbound routing, revenue, click or conversion telemetry and reader signals. Checked 12 November 2026.
Methodology changelog
Every published change to criteria, weights and constants — version, date, type, categories affected.
View →Data changelog
Every observed change to a published fact — a fee, a licence, a lifecycle — appended beside the value it replaced, never overwritten.
View →Provider universe
869 placements by state — ranked, needing evidence, cut, archived — the 771 named refusals, and the ledger of how the set changed.
View →Correction log
Every published editorial mistake: what was wrong, what was fixed, how it was caught.
View →Live data
Which numbers can move a score: every live feed, where it is shown, and the two kinds of figure a score reads.
View →Calibration corpus
The failures each published criterion is built to catch, each dated from its sources, with the methodology record's own words tying it to the criterion.
View →Outcome accuracy
Whether the #1 of a saved Fit rank held up after 30 days, per category, published once a sample clears 30; the empty state until then.
View →Fit rank drift
How often the #1 of a saved Fit rank changed when the engine was replayed — aggregated from saved decisions, not from the published order.
View →rankings.json
The whole ranking with breakdowns, weights, coverage and sensitivity — the artefact everything on this page reads.
View →Rank history
Any ranked product's rank on any day since the ledger began, as a chart, and each category's whole order on the day you pick, read back from the ledger below.
View →Rankings ledger
Every change to the published order since the ledger began, why it moved, and the rankings digest each published file had. Each entry carries the SHA-256 of the one before it.
View →Methodology archive
Each changelog version with its criteria, weights and tie-break rules as last in force, and the rankings digests it produced. A version the history cannot attribute rules to is listed as a gap, with the reason.
View →Machine-readable schemas for the decision primitives are published at /methodology/spec/ under CC-BY-4.0.
Who publishes this
ChainChoice is operated by Simi Ventures GmbH. These are the people behind it; the checks that run on every build are named by script on /why-trust-us.
Mathias Siemonsmeier
Mathias Siemonsmeier, Founder of ChainChoice. Mathias spent five years in banking and fintech before moving into blockchain research. He founded ChainChoice to compare crypto and onchain products on published, verifiable criteria, and he writes and reviews its rankings and guides.
- Approves methodology versions: each entry in the methodology changelog names him as approver
- Responsible for content under §18 (2) MStV, as the imprint states
Simi Ventures GmbH, which operates ChainChoice, is paid referral commission by providers with a live partner programme. Personal holdings: not published.
Jürgen Siemonsmeier
Managing director of Simi Ventures GmbH, the company that operates ChainChoice.
- Managing director of Simi Ventures GmbH, the operator
Simi Ventures GmbH, which operates ChainChoice, is paid referral commission by providers with a live partner programme. Personal holdings: not published.
Automated processes
6 processes run in the build, each named by the scripts that implement it.
- Published ranking feed. Generates the file the published order can be rebuilt from. scripts/generate-rankings-feed.ts
- Ranking verifier. Checks that the order a reader sees is the order the published inputs produce. scripts/check-published-ranking-verifies.ts · scripts/check-order-reconstructs.ts
- Commercial firewall. Keeps commercial data out of the code that computes rankings. scripts/check-ranking-path-blind.ts · scripts/check-affiliate-blind.mjs
- Review cadence check. Holds each category to the re-read interval it publishes. scripts/check-review-cadence-is-kept.ts
- Research drift check. Keeps shipped scores equal to the research that was verified. scripts/check-pool-matches-research.ts
- Methodology version check. Keeps every printed version stamp readable in the changelog. scripts/check-methodology-version-published.ts
Conflict-of-interest disclosure
When you follow a link on this site that carries a provider's referral code and then sign up with, deposit at or transact with that provider, and the provider confirms it, the provider pays Simi Ventures GmbH, which operates ChainChoice, a commission. Providers cannot buy placement, a score or coverage, and there is no sponsored tier. The modules that compute an order cannot import partner, payout or click data, and the build fails if one can.
The people on the roster above, Mathias Siemonsmeier and Jürgen Siemonsmeier, are the managing directors of Simi Ventures GmbH. Simi Ventures GmbH, which operates ChainChoice, is paid referral commission by providers with a live partner programme. That conflict is why commission is kept out of the ordering code by a build check rather than by a promise. Their personal holdings are not published.
Questions
If you believe a score is wrong or a fact is out of date, send the page and the fact to the address in the imprint. Published corrections are listed at /methodology/corrections.