Skip to content

Reference

Methodology

Every rule below is the rule the running system actually applies, and every weight is read live from the settings the scorer uses — not from this page's prose.

What a score is made of

Availability
40%
Latency
30%
Correctness
20%
Head freshness
10%

Correctness is a ceiling

89

Below 99% correct, the composite is capped no matter how fast the provider is. A node returning wrong data cannot be presented as healthy.

Below this, no score

30

samples in the window. Under it a provider is reported as insufficient data rather than given a number the sample count cannot support.

Principles

Nothing is invented

Every published figure traces to a collected observation. Where a measurement does not exist, the interface says so rather than substituting a zero. “Never measured” and “measured as zero” are opposite facts and are never rendered the same way.

Failures are classified, not counted

A rate limit, an unsupported method and a TLS failure are three entirely different facts about a provider. Collapsing them into one error count destroys the ability to say anything useful, so each is recorded and treated separately.

Our bugs are never their outage

Failures caused by our own measurement software are recorded in their own categories and excluded from provider scoring entirely. A defect in RPCNode.IO must never appear as a provider failing.

Percentiles are real percentiles

Latency percentiles are computed in the database from mergeable t-digest states, so a 30-day p95 is a genuine merge of daily states rather than an average of averages. Averaging percentiles is a common shortcut that produces plausible, false numbers.

Measurement rules

Availability
Rate-limited requests and unsupported methods are excluded from the denominator. A provider enforcing its published limits, or not implementing an optional method, has not had an outage.
Latency
Percentiles are computed over successful requests only. A request that timed out is not a latency sample; it is counted against availability instead.
Correctness
Responses are validated against the chain and the method's expected shape. Correctness also caps the composite score: a provider returning wrong data cannot be presented as healthy however fast it is.
Head freshness
Chain head is compared against the cohort reference: the highest head any provider reached, after discarding heads implausibly far above the cohort median and time-aligning samples taken at different instants. No single provider is ever treated as truth.
Connection profiles
Warm measurements reuse a pooled connection; cold measurements dial fresh and include DNS, TCP and TLS setup. The two are never mixed.
Our own failures
Failures caused by RPCNode.IO itself are recorded separately and never counted against a provider.

Configuration in force

Read live from the running configuration. If a weight or a threshold changes, this table changes with it.

Platform settings currently in force
SettingValue
benchmark.cold_interval_s900
benchmark.default_interval_s60
benchmark.default_jitter_pct20
capability.confirm_threshold3
freshness.cohort_min_providers2
freshness.cohort_window_seconds90
freshness.max_ahead_seconds60
freshness.stale_behind_seconds30
score.min_samples30
score.weight.availability0.4
score.weight.correctness0.2
score.weight.freshness0.1
score.weight.latency0.3
score.winsorize_pct5
stake.min_epochs1
stake.weight.commission_stability0.15
stake.weight.decentralisation0.15
stake.weight.performance0.35
stake.weight.yield0.35
status.degraded_success_rate0.95
status.hysteresis_windows3
status.offline_success_rate0.5

Scenario versions in force

Every observation is stored with the version of the scenario that produced it. A figure computed under version 1 and one computed under version 2 are not the same measurement, and this is how a consumer of the API can tell — the version is the contract, not the method name.

Current scenario version per measured method
MethodFamilyScenarioVersion
eth_blockNumberevmevm.block_number1
eth_callevmevm.call_erc20_balance1
eth_chainIdevmevm.chain_id1
eth_estimateGasevmevm.estimate_gas1
eth_feeHistoryevmevm.fee_history1
eth_gasPriceevmevm.gas_price1
eth_getBalanceevmevm.get_balance1
eth_getBlockByNumberevmevm.get_block_by_number1
eth_getLogsevmevm.get_logs1
eth_getTransactionCountevmevm.get_transaction_count1
eth_getTransactionReceiptevmevm.get_transaction_receipt1
eth_maxPriorityFeePerGasevmevm.priority_fee1
eth_syncingevmevm.syncing1
net_versionevmevm.net_version1
web3_clientVersionevmevm.client_version1
eth_subscribe.newHeadsevmevm.ws_new_heads1
geyser.subscribeBlocksMetasolanasol.geyser_blocks_meta1
geyser.subscribeSlotssolanasol.geyser_slots1
geyser.subscribeTransactionssolanasol.geyser_transactions1
getAccountInfosolanasol.account_info1
getBalancesolanasol.balance1
getBlocksolanasol.block1
getBlockHeightsolanasol.block_height1
getClusterNodessolanasol.cluster_nodes1
getEpochInfosolanasol.epoch_info1
getHealthsolanasol.health1
getLatestBlockhashsolanasol.latest_blockhash1
getMultipleAccountssolanasol.multiple_accounts1
getProgramAccountssolanasol.program_accounts1
getSignaturesForAddresssolanasol.signatures_for_address1
getSlotsolanasol.slot1
getSupplysolanasol.supply1
getTransactionsolanasol.transaction1
getVersionsolanasol.version1
getVoteAccountssolanasol.vote_accounts1
logsSubscribesolanasol.ws_logs1
slotSubscribesolanasol.ws_slot1

How validators are named

The three chains differ, and the site does not paper over it.

BNB Smart Chain
Validators register a moniker on StakeHub. The name shown is the one on chain.
Solana
Validators are identified by their node identity pubkey. Reading the operator name requires querying the Config program, which is an expensive call this platform does not make on a schedule.
Ethereum
Beacon chain validators have no name. A validator is an index and a BLS public key, and nothing on the chain says who runs it.

What can be derived for Ethereum is the execution address in the withdrawal credentials, and from it two things: how many other validators withdraw to the same address, and — where that address is documented by the operator itself — who the operator is.

The first covers every validator and is what makes staking concentration visible. The second is deliberately rare. A mapping is added only when it is verifiable from the operator's own documentation or from a contract whose identity is not in dispute. An explorer's name tag is not enough: those are crowd-sourced, and attaching one here would publish a claim about who controls a large share of the stake on the basis of a wiki edit. Where nothing is published, the site says so and shows the address.