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.
| Field | Source | Refresh | Status |
|---|---|---|---|
| TVL (USD) | DefiLlama /v2/chains Looked up by name (defillamaSlug). Chains not tracked on DefiLlama show N/A with reason. | 5 min cache | Live |
| 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 filter | Live |
| 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 cache | Live |
| 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 cache | Live |
| 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 cache | Live |
| 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 cache | Live |
| 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 cache | Live |
| 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) cache | Live |
| 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 fields | Live |
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
- All upstream calls go through Upstash Redis read-through cache. Cache misses fall through to the live API; cache failures are swallowed.
- When an upstream is rate-limited or unreachable, the affected card shows N/A with the reason rather than a stale or fabricated value.
- Public Avalanche P-Chain RPC throttles aggressively per-IP. Production should set
AVAX_PCHAIN_RPC_URLto a paid endpoint (Ankr / Quicknode).