Methodology

Every number on SubnetScope traces back to a public source. This page lists exactly where the data comes from and how stale it can be. We always show the source and the last-updated time on each metric — if either is missing, treat the value as suspect.

FieldSourceRefreshStatus
TVL (USD)
DefiLlama /v2/chains
Looked up by name (defillamaSlug). Chains not tracked on DefiLlama show N/A with reason.
5 min cacheLive
Per-protocol TVL · category breakdown
DefiLlama /protocols (~7000 entries, 8 MB)
One full-feed fetch covers every chain — per-chain queries collapse to in-process filter. Sum of per-protocol TVL may differ slightly from headline chain TVL because DefiLlama measures the two via different rules.
10 min cache (full feed) + 10 min per-chain filterLive
Tx (24h, estimated) · Avg block time · Block count (24h)
Universal EVM JSON-RPC sampling (each chain's own RPC)
Latest block + binary-search to find the block ~24h ago + 8 evenly distributed sample blocks. tx24h ≈ avgTxPerBlock × blockCount. Estimated, not exact — marked '~' in the UI. Works on any EVM RPC.
5 min cacheLive
Tx per day series (7 / 14 / 30 days)
EVM JSON-RPC sampling — extended estimator
For each day boundary, binary-search the matching block, then sample 2 blocks within the day to estimate avg tx/block × blocks_in_day. Roughly 21 RPC calls per chain for 7d. Cached 1h since the value only changes day-over-day.
1 hour cacheLive
Active addresses (24h) · Gas used (24h)
Each chain's explorer or growthepie (planned)
Active-address counts can't be sampled without walking every tx — needs an explorer-side aggregate. Pending M2 follow-up.
5 min cache (planned)M2
Validator count · stake · uptime · weight
Avalanche P-Chain RPC platform.getCurrentValidators
Per-validator stake (AVAX), weight, uptime % and connected status. L1-specific lists need validatorSubnetId in subnets.json — L1s without it show 'Validator subnet ID not yet curated'. (Field name keeps P-Chain's vocabulary.) Primary network defaults cover Avalanche C-Chain. Public RPC is rate-limited; production should set AVAX_PCHAIN_RPC_URL.
10 min cacheLive
Stake distribution · Lorenz curve · Gini coefficient
Computed in-process from validator list
Top 10 + Others bar chart and a Lorenz curve over either AVAX stake (primary) or weight (subnet validators). Gini is reported next to the curve.
10 min cache (inherits from validator list)Live
Cross-L1 validator presence
Aggregated per-NodeID across curated L1s
Identifies nodes validating ≥ 2 of the curated L1s. Becomes meaningful as more validatorSubnetId entries are added.
10 min cacheLive
Token price / market cap / FDV / 24h & 7d change
CoinGecko /coins/markets
Looked up by nativeToken.coingeckoId. Tokens without a CoinGecko entry show N/A. Free tier is 30 req/min — set COINGECKO_API_KEY for the Pro endpoint.
5 min cacheLive
Price time-series (30/90/365d) · circulating & total supply
CoinGecko /coins/{id}/market_chart
Hourly granularity ≤ 90d, daily beyond. Circulating and total supply are derived from MC/price and FDV/price respectively.
10 min (30d) / 30 min (90d) / 60 min (365d) cacheLive
Compare table (`/compare?ids=…`)
Server-side join of all four upstream adapters
URL-shareable: the chain selection is encoded as ?ids=a,b,c. Up to 6 chains side-by-side.
Inherits the slowest cache TTL among contributing fieldsLive

L1 curation

L1 identity, logos, RPCs and CoinGecko IDs are kept inpackages/subnet-web/data/subnets.json(filename keeps the platform's vocabulary) and reviewed via PR. New entries are auto-discovered against the live P-Chain via pnpm spike:discover-l1s, then the human merges the high-signal ones into subnets.json.

Caching & degradation