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

What

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
EPOCHNUMBEREPOCH column
NODE_PUBKEYTEXTNODE_PUBKEY column
VOTE_PUBKEYTEXTVOTE_PUBKEY column
ACTIVE_STAKENUMBERACTIVE_STAKE column
ADMIN_WARNINGTEXTADMIN_WARNING column
AVATAR_URLTEXTAVATAR_URL column
COMMISSIONNUMBERCOMMISSION column
CREATED_ATTEXTCREATED_AT column
DATA_CENTER_HOSTTEXTDATA_CENTER_HOST column
DATA_CENTER_KEYTEXTDATA_CENTER_KEY column
DELINQUENTBOOLEANDELINQUENT column
DETAILSTEXTDETAILS column
EPOCH_ACTIVENUMBEREPOCH_ACTIVE column
EPOCH_CREDITSNUMBEREPOCH_CREDITS column
KEYBASE_IDTEXTKEYBASE_ID column
LATITUDETEXTLATITUDE column
LONGITUDETEXTLONGITUDE column
VALIDATOR_NAMETEXTVALIDATOR_NAME column
SOFTWARE_VERSIONTEXTSOFTWARE_VERSION column
UPDATED_ATTEXTUPDATED_AT column
WWW_URLTEXTWWW_URL column
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.
IS_DZBOOLEANIS_DZ column
IS_JITOBOOLEANIS_JITO column
JITO_COMMISSIONNUMBERJITO_COMMISSION column
STAKE_POOLS_LISTARRAYSTAKE_POOLS_LIST column
SOFTWARE_CLIENTTEXTSOFTWARE_CLIENT column
SOFTWARE_CLIENT_IDTEXTSOFTWARE_CLIENT_ID column
IPTEXTIP column