> ## 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.

# Cómo usar getVoteAccounts

> Conoce los casos de uso de getVoteAccounts, ejemplos de código, parámetros de solicitud, estructura de respuesta y consejos.

El método RPC [`getVoteAccounts`](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) devuelve información sobre todas las cuentas de votación (validadores) del banco actual. Distingue entre validadores `current` (activos) e `delinquent` y proporciona detalles sobre su stake, actividad de votación e identidad.

## Casos de uso comunes

* **Monitoreo de validadores:** Haz un seguimiento del estado, el stake y el rendimiento de los validadores en la red.
* **Paneles de staking:** Muestra información sobre los validadores disponibles para los usuarios que desean delegar sus SOL.
* **Análisis del estado de la red:** Evalúa el estado general y la descentralización de la red examinando la distribución del stake y la actividad de los validadores.
* **Identificación de validadores inactivos:** Encuentra validadores que no participan activamente en el consenso.

## Parámetros de solicitud

Este método acepta un objeto de configuración opcional con los siguientes campos:

1. **`commitment`** (cadena, opcional): Especifica el [nivel de compromiso](https://www.helius.dev/blog/solana-commitment-levels) de la consulta (por ejemplo, `"finalized"`, `"confirmed"`, `"processed"`). Si se omite, se usa el nivel de compromiso predeterminado del nodo.
2. **`votePubkey`** (cadena, opcional): Si se proporciona, los resultados se filtrarán para incluir únicamente la dirección especificada de la cuenta de votación del validador (codificada en base 58).
3. **`keepUnstakedDelinquents`** (booleano, opcional): El valor predeterminado es `false`. Si se establece en `true`, la lista `delinquent` incluirá validadores sin stake activado. De lo contrario, se excluirán.
4. **`delinquentSlotDistance`** (u64, opcional): Especifica cuántos slots debe estar un validador por detrás del extremo del libro mayor para considerarse inactivo. Si no se especifica, el nodo usa un valor predeterminado.

## Estructura de la respuesta

El campo `result` de la respuesta JSON-RPC es un objeto que contiene dos arreglos:

* **`current`**: Un arreglo de objetos, donde cada objeto representa una cuenta de votación activa con los siguientes campos:
  * **`votePubkey`** (cadena): La dirección de la cuenta de votación (codificada en base 58).
  * **`nodePubkey`** (cadena): La clave pública de identidad del nodo validador (codificada en base 58).
  * **`activatedStake`** (u64): La cantidad de stake, en lamports, delegada a esta cuenta de votación y activa en la época actual.
  * **`epochVoteAccount`** (booleano): `true` si la cuenta de votación estuvo activa al menos una vez durante la época actual.
  * **`commission`** (número): El porcentaje de comisión (0-100) que cobra el validador.
  * **`lastVote`** (u64): El número de slot más reciente por el que votó este validador.
  * **`rootSlot`** (u64): El último slot que el nodo consideró como raíz (un bloque totalmente confirmado que no se revertirá).
  * **`epochCredits`** (arreglo): Un arreglo de arreglos, donde cada arreglo interno contiene `[epoch, credits_earned_in_epoch, previous_total_credits]`.
* **`delinquent`**: Un arreglo de objetos con la misma estructura que `current`, que representa a los validadores que el nodo considera inactivos.

**Fragmento de ejemplo de la respuesta:**

```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
}
```

## Ejemplos 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>

## Consejos para desarrolladores

* **Respuesta grande:** Este método puede devolver una gran cantidad de datos, especialmente en redes con muchos validadores, como Mainnet Beta. Ten en cuenta el tamaño de la respuesta y el tiempo de procesamiento.
* **Definición de inactividad:** La definición de "inactivo" puede depender de `delinquentSlotDistance` y de la perspectiva del nodo. Un validador podría aparecer como inactivo en un nodo, pero no en otro, si sus vistas del extremo del libro mayor difieren.
* **Activación del stake:** `activatedStake` refleja el stake activo en la época actual. Activar y desactivar el stake lleva tiempo.
* **Créditos de época:** `epochCredits` proporciona un historial del rendimiento de un validador al obtener créditos mediante la votación.

Esta guía cubre el método RPC `getVoteAccounts` y te permite consultar y comprender la información de los validadores en la red Solana.
