Skip to main content
Schema: solana.gov Table: fact_validators Type: Base Table

Description

This table contains comprehensive validator data by epoch, sourced from the Validators.app API. It tracks validator performance, stake distribution, geographic location, and operational metrics, providing detailed insights into Solana’s validator network and supporting staking analytics and network health monitoring.

Key Use Cases

  • Analyze validator performance and stake distribution across epochs
  • Track validator geographic distribution and data center locations
  • Monitor validator uptime, commission rates, and operational status
  • Study staking patterns and validator selection behavior
  • Support network health analysis and validator ranking

Important Relationships

  • Links to gov.dim_epoch via epoch for epoch-based validator analysis
  • Connects to gov.fact_vote_accounts through vote_pubkey for vote account analysis
  • References gov.fact_stake_accounts for stake distribution analysis
  • Provides validator context for gov.fact_rewards_staking and gov.fact_rewards_voting

Commonly-used Fields

  • epoch: The epoch when validator data was recorded
  • node_pubkey: Account for the validator node
  • vote_pubkey: Vote account for the validator
  • active_stake: Active stake in Lamports delegated to the validator. Divide by pow(10,9) to convert to SOL
  • commission: Percentage of rewards payout to the vote account
  • delinquent: Status whether the validator is offline/delinquent
  • validator_name: Name of the validator
  • data_center_key: Identifier for the data center
  • data_center_host: Host for the data center
  • latitude and longitude: Geographic coordinates of data center
  • software_version: Solana mainnet version

Sample Queries

Top validators by total stake with performance metrics

SELECT
    vote_pubkey,
    validator_name,
    SUM(active_stake) / pow(10,9) AS total_stake_sol,
    AVG(commission) AS avg_commission_pct,
    COUNT(DISTINCT epoch) AS epochs_active,
    MAX(epoch) AS last_active_epoch,
    AVG(CASE WHEN delinquent = FALSE THEN 1 ELSE 0 END) * 100 AS uptime_percentage
FROM solana.gov.fact_validators
WHERE epoch >= (SELECT MAX(epoch) - 10 FROM solana.gov.fact_validators)
GROUP BY vote_pubkey, validator_name
HAVING total_stake_sol > 10000
ORDER BY total_stake_sol DESC
LIMIT 50;

Validator geographic distribution and performance

SELECT
    data_center_host,
    data_center_key,
    COUNT(DISTINCT vote_pubkey) AS validator_count,
    SUM(active_stake) / pow(10,9) AS total_stake_sol,
    AVG(commission) AS avg_commission,
    AVG(CASE WHEN delinquent = FALSE THEN 1 ELSE 0 END) * 100 AS avg_uptime_pct,
    COUNT(DISTINCT CASE WHEN delinquent = FALSE THEN vote_pubkey END) AS active_validators
FROM solana.gov.fact_validators
WHERE epoch = (SELECT MAX(epoch) FROM solana.gov.fact_validators)
    AND data_center_host IS NOT NULL
GROUP BY data_center_host, data_center_key
HAVING validator_count > 1
ORDER BY total_stake_sol DESC
LIMIT 50;

Columns

Column NameData TypeDescription
EPOCHNUMBER
NODE_PUBKEYTEXT
VOTE_PUBKEYTEXT
ACTIVE_STAKENUMBER
ADMIN_WARNINGTEXT
AVATAR_URLTEXT
COMMISSIONNUMBER
CREATED_ATTEXT
DATA_CENTER_HOSTTEXT
DATA_CENTER_KEYTEXT
DELINQUENTBOOLEAN
DETAILSTEXT
EPOCH_ACTIVENUMBER
EPOCH_CREDITSNUMBER
KEYBASE_IDTEXT
LATITUDETEXT
LONGITUDETEXT
VALIDATOR_NAMETEXT
SOFTWARE_VERSIONTEXT
UPDATED_ATTEXT
WWW_URLTEXT
FACT_VALIDATORS_IDTEXTA unique, stable identifier for each record in this table. The primary key (PK) ensures that every row is uniquely identifiable and supports efficient joins, lookups, and data integrity across models. The PK may be a natural key (such as a blockchain transaction hash) or a surrogate key generated from one or more fields, depending on the table’s structure and requirements.
INSERTED_TIMESTAMPTIMESTAMP_NTZThe timestamp when this transaction record was first inserted into the analytics database. Used for data freshness tracking and incremental model logic. Format: YYYY-MM-DD HH:MI:SS. Not derived from the blockchain, but from the ETL process.
MODIFIED_TIMESTAMPTIMESTAMP_NTZThe timestamp when this transaction record was last updated in the analytics database. Used for tracking updates and supporting incremental model logic. Format: YYYY-MM-DD HH:MI:SS. Not derived from the blockchain, but from the ETL process.