> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Como Usar getVoteAccounts

> Aprenda casos de uso do getVoteAccounts, exemplos de código, parâmetros de solicitação, estrutura de resposta e dicas.

O método RPC [`getVoteAccounts`](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) retorna informações sobre todas as contas de votação (validadores) no banco atual. Ele distingue entre validadores `current` (ativos) e `delinquent` e fornece detalhes sobre sua participação, atividade de votação e identidade.

## Casos de Uso Comuns

* **Monitoramento de Validadores:** Rastreamento do status, participação e desempenho dos validadores na rede.
* **Painéis de Staking:** Exibição de informações sobre validadores disponíveis para usuários que desejam delegar seu SOL.
* **Análise de Saúde da Rede:** Avaliação da saúde geral e descentralização da rede, examinando a distribuição da participação e a atividade dos validadores.
* **Identificação de Validadores Delinquentes:** Encontrar validadores que não estão participando ativamente do consenso.

## Parâmetros da Solicitação

Este método aceita um objeto de configuração opcional com os seguintes campos:

1. **`commitment`** (string, opcional): Especifica o [nível de compromisso](https://www.helius.dev/blog/solana-commitment-levels) para a consulta (por exemplo, `"finalized"`, `"confirmed"`, `"processed"`). Se omitido, o compromisso padrão do nó é utilizado.
2. **`votePubkey`** (string, opcional): Se fornecido, os resultados serão filtrados para incluir apenas o endereço de conta de votação do validador especificado (codificado em base-58).
3. **`keepUnstakedDelinquents`** (booleano, opcional): O padrão é `false`. Se definido como `true`, a lista `delinquent` incluirá validadores sem participação ativada. Caso contrário, eles serão filtrados.
4. **`delinquentSlotDistance`** (u64, opcional): Especifica quantos slots um validador deve estar atrás do topo do livro razão para ser considerado delinquente. Se não especificado, o nó usa um valor padrão.

## Estrutura de Resposta

O campo `result` na resposta JSON-RPC é um objeto contendo dois arrays:

* **`current`**: Um array de objetos, onde cada objeto representa uma conta de votação ativa com os seguintes campos:
  * **`votePubkey`** (string): O endereço da conta de votação (codificado em base-58).
  * **`nodePubkey`** (string): A chave pública de identidade do nó validador (codificado em base-58).
  * **`activatedStake`** (u64): A quantidade de participação, em lamports, delegada a esta conta de votação e ativa no epoch atual.
  * **`epochVoteAccount`** (booleano): `true` se a conta de votação esteve ativa pelo menos uma vez durante o epoch atual.
  * **`commission`** (número): A porcentagem de comissão (0-100) cobrada pelo validador.
  * **`lastVote`** (u64): O número mais recente de slot em que este validador votou.
  * **`rootSlot`** (u64): O último slot que o nó considerou ser uma raiz (um bloco totalmente confirmado que não será revertido).
  * **`epochCredits`** (array): Um array de arrays, onde cada array interno contém `[epoch, credits_earned_in_epoch, previous_total_credits]`.
* **`delinquent`**: Um array de objetos, com a mesma estrutura de `current`, representando validadores considerados delinquentes pelo nó.

**Exemplo de Trecho de Resposta:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "current": [
      {
        "commission": 10,
        "epochCredits": [[300, 12345, 567890]],
        "epochVoteAccount": true,
        "lastVote": 180000500,
        "nodePubkey": "NodePubkeyExample123...",
        "rootSlot": 180000450,
        "activatedStake": "50000000000000", // lamports
        "votePubkey": "VoteAccountPubkeyExample123..."
      }
      // ... more current validators
    ],
    "delinquent": [
      // ... delinquent validators, if any
    ]
  },
  "id": 1
}
```

## Exemplos de Código

<CodeGroup>
  ```bash cURL theme={"system"}
  # Get all current and delinquent vote accounts:
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getVoteAccounts"
    }' \
    <YOUR_RPC_URL>

  # Get a specific vote account:
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getVoteAccounts",
      "params": [
        {
          "votePubkey": "<SPECIFIC_VOTE_ACCOUNT_PUBKEY>"
        }
      ]
    }' \
    <YOUR_RPC_URL>

  # Get vote accounts with "confirmed" commitment and keep unstaked delinquents:
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getVoteAccounts",
      "params": [
        {
          "commitment": "confirmed",
          "keepUnstakedDelinquents": true
        }
      ]
    }' \
    <YOUR_RPC_URL>
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function fetchVoteAccounts() {
    // Replace with your RPC endpoint
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');

    try {
      // Get all vote accounts
      const voteAccounts = await connection.getVoteAccounts();
      console.log(`Found ${voteAccounts.current.length} current validators.`);
      console.log(`Found ${voteAccounts.delinquent.length} delinquent validators.`);

      if (voteAccounts.current.length > 0) {
        console.log("\nFirst current validator details:");
        console.log(`  Vote Pubkey: ${voteAccounts.current[0].votePubkey}`);
        console.log(`  Node Pubkey: ${voteAccounts.current[0].nodePubkey}`);
        console.log(`  Activated Stake: ${voteAccounts.current[0].activatedStake} lamports`);
        console.log(`  Commission: ${voteAccounts.current[0].commission}%`);
        console.log(`  Last Vote: ${voteAccounts.current[0].lastVote}`);
        // console.log(JSON.stringify(voteAccounts.current[0], null, 2)); // For full details
      }

      // Get a specific vote account (replace with an actual vote account public key)
      // const specificVotePubkey = 'SPECIFIC_VOTE_ACCOUNT_PUBKEY';
      // const specificValidator = await connection.getVoteAccounts('confirmed', specificVotePubkey);
      // console.log(`\nDetails for ${specificVotePubkey}:`, JSON.stringify(specificValidator, null, 2));

    } catch (error) {
      console.error('Error fetching vote accounts:', error);
    }
  }

  fetchVoteAccounts();
  ```
</CodeGroup>

## Dicas para Desenvolvedores

* **Resposta Grande:** Este método pode retornar uma grande quantidade de dados, especialmente em redes com muitos validadores, como a Mainnet Beta. Fique atento ao tamanho da resposta e ao tempo de processamento.
* **Definição de Delinquência:** A definição de "delinquente" pode depender do `delinquentSlotDistance` e da perspectiva do nó. Um validador pode parecer delinquente em um nó, mas não em outro, se a visão deles do topo do livro razão for diferente.
* **Ativação de Participação:** `activatedStake` reflete a participação que está ativa no epoch atual. A participação leva tempo para ativar e desativar.
* **Créditos de Epoch:** `epochCredits` fornece um histórico do desempenho de um validador em ganhar créditos por votação.

Este guia cobre o método RPC `getVoteAccounts`, permitindo que você consulte e entenda informações sobre validadores na rede Solana.
