← Back to leaderboard
Methodology · gdi-1.1.1

How the GDI is computed

The score is reproducible from on-chain data and a small set of public APIs. If you can't reproduce it from this page, that's a bug — please file an issue.

What we're measuring

A simple question: does this pool delegate to places that need stake, or does it pile more onto already-popular validators?

A pool whose stake sits in the same handful of overweight cities and ASNs as everyone else isn't improving network decentralisation, regardless of how internally diverse its own delegations look. A pool that finds underweight regions — Hong Kong, São Paulo, Manila, Lagos — is doing the actual work of decentralising the network.

The formula

For each validator v in a pool with stake fraction wᵥ, we compute its rarity on three dimensions — country, city, and autonomous system number (ASN):

rarity_D(v)  =  -ln( network_share_D(category of v) )       D ∈ {country, city, ASN}

network_share_D(category) is the fraction of total network stake currently delegated to validators in that category. A validator in NYC (where ~8% of network stake sits) has a low rarity; a validator in Manila (~0.1%) has a high rarity.

The pool's Decentralisation Contribution on each dimension is the stake-weighted average rarity of its validators:

DC_D  =  Σᵥ wᵥ · rarity_D(v)

The composite GDI is the geometric mean of the three:

GDI  =  ( DC_country · DC_city · DC_asn )^(1/3)

Geometric mean penalises being good on one dimension and poor on another — these are distinct decentralisation risk classes. A pool that's geographically diverse but everyone's on AWS still has a single-ASN failure mode.

The GDI deliberately excludes operator-quality composites (Stakewiz wiz_score, similar). Those metrics weight things like commission, which validators operating in remote regions often set higher to cover real cost differences — exactly the geographic decentralisation the index is designed to reward. Mixing quality and decentralisation into one number creates counter-incentives. Quality signals belong on their source (Stakewiz, Solana Compass); GDI's job is geographic spread.

Why three dimensions?

The obvious objection: country and city are correlated. If you know a validator is in Frankfurt, you know it's in Germany. So isn't the country dimension redundant once city is in the formula?

Correlated, yes. Redundant, no. Consider a pool with five validators in LA, San Francisco, NYC, Chicago, and Dallas — five different US cities on five different ASNs. On a city-and-ASN-only composite that pool looks well-decentralised. With the country dimension included, the same pool scores poorly on country (effectively one bucket: US), and the geometric mean drags the composite down. That's the right answer: single-jurisdiction concentration is a real risk class, distinct from physical-location and network-operator risk.

The three failure modes are independent:

Geometric mean weights the three equally — no domain-expert opinion baked in about which risk class is most important. A pool concentrated on any single dimension gets pulled down by the geometric mean regardless of how diverse it looks on the other two. This is the intended behaviour: you don't want a pool with all stake on AWS (single-ASN failure mode) to claim a high score because its cities and countries are diverse.

The active validator set (what counts as "the network")

Network shares are stake-weighted over Solana's actively-voting validator set:

active = { v in Stakewiz : !v.delinquent AND v.activated_stake > 0 }

Roughly 760 of ~1,955 Stakewiz records at any given time. Delinquent or zero-stake validators still appear on chain (their stake is delegated, just not producing votes), but counting them in the denominator would inflate the network size and artificially lower rarity values for popular buckets. The active-set definition matches Solana's getVoteAccounts.current convention used by Stakewiz, Solana Beach, and other ecosystem tooling.

The same definition gates the active-set rank shown on each validator's lookup page at /validator.

Network baseline (reference value)

Applying the same formula to the active validator set gives the network baseline GDI — by construction, the network's own stake-weighted average rarity. It's published at /gdi/network-baseline.json each epoch as a reference value. The leaderboard ranks pools by GDI directly (higher = more decentralised) rather than by deviation from the baseline; we found the rank-based framing easier to read than "+X% vs baseline". The baseline is still useful as a single number for "how decentralised is Solana right now overall?".

Data sources

SourceProvidesTrust
Helius RPCPool → validator → stake mapping (current epoch); getClusterNodes for client version per identity (used to derive Agave / Jito / BAM / vN labels)Authoritative (on-chain)
StakewizIP-derived country / city / ASN; activated stakePrimary for location + network shares
Validators.appCross-reference for validator metadata (datacenter labels, identity names, geo fallback)Fallback / disagreement check
Jito BAMBlock Assembly Marketplace connected-validator list (is_bam operational flag)Authoritative (BAM public API)
Jito IBRLPer-validator block-build quality score (0–100): non-vote packing, slot time, vote packingAuthoritative (Jito IBRL API)
DoubleZeroOn-chain DZ User-account registrations (is_dz flag — shown but not scored)Authoritative (on-chain)
JupiterLST mint → display name / symbol for newly discovered poolsAuthoritative for naming

Concentration: computed vs reported

Stakewiz publishes its own per-validator city_concentration and asn_concentration fields. The GDI does not use these directly for scoring — instead, we compute network shares ourselves from the raw activated_stake + IP fields, so the math is fully reproducible from public inputs and we cover all three dimensions (country, city, ASN) the same way (Stakewiz doesn't expose a country-concentration field).

We do store Stakewiz's reported concentration values alongside our own computed shares as a sanity check. A side-by-side comparison for the top buckets is published at /gdi/concentration-crosscheck.json each ingest. Wide divergence between our numbers and Stakewiz's would be a red flag — if you spot one, file an issue.

Limitations (read these before quoting a score)

Client diversity (CDI)

Stake concentrated on a single validator client is a real network risk — a bug in that client can take down every validator running it. The Client Diversity Index (CDI) sits alongside GDI as a companion score on a different axis.

For each pool we compute the stake-weighted distribution across validator client labels (Agave, Jito, BAM (v2/v3), Agave v4, Jito v4, BAM v4, Frankendancer, Frankendancer v4, Firedancer, Firedancer v4, …) and report the effective number of clients — the exponential of the Shannon entropy of that distribution. A pool with all stake on one client scores 1.0; a perfectly even split across N clients scores N; real distributions land in between. The same metric is computed across the whole active validator set as a network baseline, so each pool can be read as "above" or "below" average.

Why v4 has its own bucket. v4 is the major upgrade the Solana Foundation tracks for network rollout (per Jump's compat note: "operators are required to be running a minimum of Agave 4.0.0-rc.1 or Firedancer 0.909.40001"). Lumping v4 with v2/v3 would hide adoption progress. We split each family so a pool delegating heavily to v4 shows up as more diverse in the CDI than a pool stuck on older majors with the same nominal split.

The rule generalises across families:

Future v5 surfaces automatically without code changes (Agave 5.x.x → Agave v5; Frankendancer build ≥ 50000 → Frankendancer v5).

Trust model. The version string and identity pubkey come from Solana's on-chain getClusterNodes RPC — authoritative and covers 100% of gossip-visible validators. The jito flag is on-chain verifiable (Jito tip-program activity is detectable). The bam flag comes from Jito's BAM API. Frankendancer vs Firedancer is inferred from the gossip version string (0.8xx = Frankendancer). No operator self-attestation is relied on — every bucket above is mechanically derivable from public sources.

Not folded into GDI. CDI is published as a separate score, not blended into the headline GDI. Historical GDI values remain valid under gdi-1.0.0; adding client diversity didn't reset that baseline. If we later decide to combine them into a unified Decentralisation Index, it will be a coordinated methodology bump with its own version, not a silent shift.

DoubleZero is shown but not scored. DoubleZero is a dedicated fibre network for validators that provides faster voting and block production. Most active stake runs on it, and a pool that picks non-DZ validators effectively accepts slower performance — so the pool's "lever" there isn't symmetric with client choice. We report DZ participation on the pool detail page as an operator-quality signal but do not fold it into any decentralisation index. Network-level concentration on DZ infrastructure is a real risk worth tracking, but it lives outside the rarity-and-stake framework GDI/CDI use.

Version policy

Current methodology version: gdi-1.1.1. Historical scores remain reproducible under their original version forever — each pool_scores row carries the version it was computed under, and a methodology bump only affects new epochs.

VersionChangeEffect
gdi-1.0.0Initial methodology.Network shares computed over { stake > 0 } (~1,929 records).
gdi-1.1.0Tightened the network denominator to actively-voting validators only: !delinquent && stake > 0.Smaller denominator (~760 instead of ~1,929) lifts rarity values uniformly; pool GDI rankings shift only slightly.
gdi-1.1.1Pool members absent from the active-set denominator (e.g. delinquent validators) are excluded from DC as non-placeable, instead of receiving a floor rarity of −ln(10⁻⁹) ≈ 20.7.Delinquent stake can no longer inflate a pool's GDI (a transient delinquency flag briefly inflated one pool by +106% on 2026-06-10). Affected stake now shows up as reduced placement coverage rather than as score.

Disclosure

The maintainer of this index — Tielman (@tielmane on X, @realtielman on Telegram) — also operates the Definity stake pool, which appears in this leaderboard. Scoring is mechanical and reproducible from public data — there is no manual adjustment. Any pool's GDI can be recomputed from this page's formula plus the raw inputs published at /gdi/*.json. The maintainer cannot privilege any one pool without that privilege being visible in the code and the published JSON. The eventual aim is handoff to a fully neutral steward (Stakewiz, Solana Compass, or the Solana Foundation) once the project has a track record.