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

# Comment utiliser getVoteAccounts

> Découvrez les cas d'utilisation de getVoteAccounts, des exemples de code, les paramètres de requête, la structure de la réponse et des conseils.

La méthode RPC [`getVoteAccounts`](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) renvoie des informations sur tous les comptes de vote (validateurs) dans la banque actuelle. Elle distingue les validateurs `current` (actifs) et `delinquent` et fournit des détails sur leur participation, activité de vote et identité.

## Cas d'utilisation courants

* **Surveillance des validateurs :** Suivi de l'état, de la participation et des performances des validateurs sur le réseau.
* **Tableaux de bord de staking :** Affichage d'informations sur les validateurs disponibles pour les utilisateurs souhaitant déléguer leur SOL.
* **Analyse de la santé du réseau :** Évaluation de la santé globale et de la décentralisation du réseau en examinant la distribution des participations et l'activité des validateurs.
* **Identification des validateurs délinquants :** Recherche de validateurs qui ne participent pas activement au consensus.

## Paramètres de requête

Cette méthode accepte un objet de configuration optionnel avec les champs suivants :

1. **`commitment`** (chaîne, optionnel) : Spécifie le [niveau d'engagement](https://www.helius.dev/blog/solana-commitment-levels) pour la requête (par exemple, `"finalized"`, `"confirmed"`, `"processed"`). Si omis, l'engagement par défaut du nœud est utilisé.
2. **`votePubkey`** (chaîne, optionnel) : Si fourni, les résultats seront filtrés pour n'inclure que l'adresse de compte de vote du validateur spécifiée (encodée en base 58).
3. **`keepUnstakedDelinquents`** (booléen, optionnel) : Par défaut à `false`. Si défini sur `true`, la liste `delinquent` inclura les validateurs sans participation activée. Sinon, ils sont filtrés.
4. **`delinquentSlotDistance`** (u64, optionnel) : Spécifie combien de créneaux un validateur doit être derrière la pointe du registre pour être considéré comme délinquant. Si non spécifié, le nœud utilise une valeur par défaut.

## Structure de la réponse

Le champ `result` dans la réponse JSON-RPC est un objet contenant deux tableaux :

* **`current`**: Un tableau d'objets, où chaque objet représente un compte de vote actif avec les champs suivants :
  * **`votePubkey`** (chaîne) : L'adresse du compte de vote (encodée en base 58).
  * **`nodePubkey`** (chaîne) : La clé publique d'identité du nœud validateur (encodée en base 58).
  * **`activatedStake`** (u64) : Le montant de la participation, en lamports, délégué à ce compte de vote et actif dans l'époque actuelle.
  * **`epochVoteAccount`** (booléen) : `true` si le compte de vote a été actif au moins une fois pendant l'époque actuelle.
  * **`commission`** (nombre) : Le pourcentage de commission (0-100) facturé par le validateur.
  * **`lastVote`** (u64) : Le numéro de créneau le plus récent sur lequel ce validateur a voté.
  * **`rootSlot`** (u64) : Le dernier créneau que le nœud considère comme une racine (un bloc qui est entièrement confirmé et ne sera pas annulé).
  * **`epochCredits`** (tableau) : Un tableau de tableaux, où chaque tableau intérieur contient `[epoch, credits_earned_in_epoch, previous_total_credits]`.
* **`delinquent`**: Un tableau d'objets, avec la même structure que `current`, représentant les validateurs considérés comme délinquants par le nœud.

**Exemple de réponse :**

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

## Exemples de code

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

## Conseils pour les développeurs

* **Réponse volumineuse :** Cette méthode peut renvoyer une grande quantité de données, surtout sur des réseaux avec de nombreux validateurs comme le Mainnet Beta. Faites attention à la taille de la réponse et au temps de traitement.
* **Définition de la délinquance :** La définition de "délinquant" peut dépendre de `delinquentSlotDistance` et de la perspective du nœud. Un validateur peut apparaître comme délinquant sur un nœud mais pas sur un autre si leur vue de la pointe du registre diffère.
* **Activation de la participation :** `activatedStake` reflète la participation qui est active dans l'époque actuelle. La participation prend du temps pour s'activer et se désactiver.
* **Crédits d'époque :** `epochCredits` fournit un historique de la performance d'un validateur en obtenant des crédits par vote.

Ce guide couvre la méthode RPC `getVoteAccounts`, vous permettant de consulter et de comprendre les informations des validateurs sur le réseau Solana.
