getVoteAccounts

Learn getVoteAccounts use cases, code examples, request parameters, response structure, and tips.

The getVoteAccounts RPC method in CoinVera returns detailed information about all validator vote accounts currently known to the network. It separates active (current) validators from delinquent ones and provides insights into their identity, stake, commission, voting performance, and more.


✅ Common Use Cases

  • Validator Monitoring Track validator voting status, commission rates, and recent activity.

  • Staking Dashboards Display available validators for delegators, including performance metrics and stake data.

  • Network Health Analysis Assess decentralization and performance by examining stake distribution and active participation.

  • Identifying Delinquent Validators Detect validators that have fallen behind or are not actively voting in consensus.


🧾 Request Parameters

[
  options?: {
    commitment?: string,                 // Optional – "processed", "confirmed", or "finalized"
    votePubkey?: string,                 // Optional – Filter by a specific validator vote account
    keepUnstakedDelinquents?: boolean,   // Optional – Include unstaked delinquent validators
    delinquentSlotDistance?: number      // Optional – Slots behind tip to consider as delinquent
  }
]
  • commitment (optional): The desired commitment level for the returned data. Defaults to the node’s configuration.

  • votePubkey (optional): Filter results to a specific vote account (base-58 public key).

  • keepUnstakedDelinquents (optional): Include delinquent validators with zero active stake. Defaults to false.

  • delinquentSlotDistance (optional): Specify how many slots a validator must fall behind the ledger tip to be marked delinquent.


📦 Response Structure

The response contains two arrays:

current: List of active vote accounts

delinquent: List of delinquent vote accounts

Each object includes:

{
  "votePubkey": "VoteAccountAddress",
  "nodePubkey": "ValidatorIdentityPubkey",
  "activatedStake": 543210000000,
  "epochVoteAccount": true,
  "commission": 8,
  "lastVote": 221446590,
  "rootSlot": 221446500,
  "epochCredits": [
    [378, 144, 20094],
    [379, 150, 20244]
  ]
}

Key fields:

  • votePubkey: Public key of the vote account.

  • nodePubkey: Validator’s identity (node) key.

  • activatedStake: Currently active delegated stake in lamports.

  • commission: Validator fee charged (percentage from 0–100).

  • lastVote: Last slot this validator voted on.

  • rootSlot: Last fully confirmed slot recognized by this validator.

  • epochVoteAccount: true if active this epoch.

  • epochCredits: List of [epoch, earned_credits, previous_total].


🧪 Example

Fetch All Validator Vote Accounts

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getVoteAccounts",
  "params": [
    {
      "commitment": "finalized",
      "keepUnstakedDelinquents": true
    }
  ]
}

Code Examples

const fetch = require('node-fetch');

async function getVoteAccounts(rpcUrl) {
  try {
    const response = await fetch(rpcUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 1,
        method: 'getVoteAccounts',
        "params": [
            {
              "commitment": "confirmed",
              "keepUnstakedDelinquents": true
            }
          ]
      }),
    });

    const data = await response.json();
    
    // Print the exact full response
    console.log('Full RPC Response:');
    console.log(JSON.stringify(data, null, 2));
    
    return data;
  } catch (error) {
    console.error('Error getting health:', error.message);
    return null;
  }
}

// Example usage
const RPC_URL = 'https://rpc.coinvera.io/?x-api-key=your-coinvera-x-api-key';

getVoteAccounts(RPC_URL);

Example Response

{
  "jsonrpc": "2.0",
  "result": {
    "current": [
      {
        "activatedStake": 38263229364446900,
        "commission": 95,
        "epochCredits": [
          [902, 1383125544, 1376213656],
          [903, 1390037304, 1383125544],
          [904, 1396949288, 1390037304],
          [905, 1403861272, 1396949288],
          [906, 1406766600, 1403861272]
        ],
        "epochVoteAccount": true,
        "lastVote": 391573587,
        "nodePubkey": "dv2eQHeP4RFrJZ6UeiZWoc3XTtmtZCUKxxCApCDcRNV",
        "rootSlot": 391573556,
        "votePubkey": "i7NyKBMJCA9bLM2nsGyAGCKHECuR2L5eh4GqFciuwNT"
      }
    ],
    "delinquent": []
  },
  "id": 1
}

💡 Developer Tips

  • Large Data Size Expect large responses on Mainnet Beta. Use pagination or lazy loading in UIs.

  • Delinquency Is Node-Relative The delinquentSlotDistance setting and local node state determine who appears delinquent—results may differ across nodes.

  • Stake Activation Delays Stake transitions take several epochs. activatedStake only includes stake that is currently active.

  • Use epochCredits to Measure Voting Performance High credit gains indicate reliable voting behavior.


The getVoteAccounts method is a foundational tool for validator monitoring, staking interfaces, and network observability in Solana applications powered by CoinVera.

Last updated