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

# Cara Menggunakan getVoteAccounts

> Pelajari kasus penggunaan getVoteAccounts, contoh kode, parameter permintaan, struktur respons, dan tips.

Metode RPC [`getVoteAccounts`](https://www.helius.dev/docs/api-reference/rpc/http/getvoteaccounts) menampilkan informasi tentang semua akun voting (validator) di bank saat ini. Metode ini membedakan validator `current` (aktif) dan `delinquent` serta memberikan detail tentang stake, aktivitas voting, dan identitasnya.

## Kasus Penggunaan Umum

* **Pemantauan Validator:** Melacak status, stake, dan performa validator di jaringan.
* **Dasbor Staking:** Menampilkan informasi tentang validator yang tersedia bagi pengguna yang ingin mendelegasikan SOL mereka.
* **Analisis Kondisi Jaringan:** Menilai kondisi dan desentralisasi jaringan secara keseluruhan dengan memeriksa distribusi stake dan aktivitas validator.
* **Mengidentifikasi Validator Bermasalah:** Menemukan validator yang tidak berpartisipasi aktif dalam konsensus.

## Parameter Permintaan

Metode ini menerima objek konfigurasi opsional dengan bidang berikut:

1. **`commitment`** (string, opsional): Menentukan [tingkat komitmen](https://www.helius.dev/blog/solana-commitment-levels) untuk kueri (misalnya, `"finalized"`, `"confirmed"`, `"processed"`). Jika dihilangkan, komitmen default simpul akan digunakan.
2. **`votePubkey`** (string, opsional): Jika diberikan, hasil akan difilter agar hanya menyertakan alamat akun voting validator yang ditentukan (dikodekan dalam base-58).
3. **`keepUnstakedDelinquents`** (boolean, opsional): Nilai default-nya adalah `false`. Jika ditetapkan ke `true`, daftar `delinquent` akan menyertakan validator tanpa stake yang diaktifkan. Jika tidak, validator tersebut akan difilter.
4. **`delinquentSlotDistance`** (u64, opsional): Menentukan jumlah slot ketertinggalan validator dari ujung ledger agar dianggap bermasalah. Jika tidak ditentukan, simpul akan menggunakan nilai default.

## Struktur Respons

Bidang `result` dalam respons JSON-RPC adalah objek yang berisi dua array:

* **`current`**: Array objek, dengan setiap objek mewakili akun voting aktif yang memiliki bidang berikut:
  * **`votePubkey`** (string): Alamat akun voting (dikodekan dalam base-58).
  * **`nodePubkey`** (string): Kunci publik identitas simpul validator (dikodekan dalam base-58).
  * **`activatedStake`** (u64): Jumlah stake, dalam lamport, yang didelegasikan ke akun voting ini dan aktif pada epoch saat ini.
  * **`epochVoteAccount`** (boolean): `true` jika akun voting telah aktif setidaknya sekali selama epoch saat ini.
  * **`commission`** (number): Persentase komisi (0-100) yang dibebankan oleh validator.
  * **`lastVote`** (u64): Nomor slot terbaru yang dipilih oleh validator ini.
  * **`rootSlot`** (u64): Slot terakhir yang dianggap sebagai root oleh simpul (blok yang telah dikonfirmasi sepenuhnya dan tidak akan dibatalkan).
  * **`epochCredits`** (array): Array yang berisi array, dengan setiap array di dalamnya memuat `[epoch, credits_earned_in_epoch, previous_total_credits]`.
* **`delinquent`**: Array objek dengan struktur yang sama seperti `current`, yang mewakili validator yang dianggap bermasalah oleh simpul.

**Cuplikan Contoh Respons:**

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

## Contoh Kode

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

## Tips untuk Developer

* **Respons Besar:** Metode ini dapat menampilkan data dalam jumlah besar, terutama pada jaringan dengan banyak validator seperti Mainnet Beta. Perhatikan ukuran respons dan waktu pemrosesan.
* **Definisi Validator Bermasalah:** Definisi "bermasalah" dapat bergantung pada `delinquentSlotDistance` dan perspektif simpul. Validator mungkin terlihat bermasalah pada satu simpul, tetapi tidak pada simpul lain jika pandangan mereka terhadap ujung ledger berbeda.
* **Aktivasi Stake:** `activatedStake` mencerminkan stake yang aktif pada epoch saat ini. Aktivasi dan penonaktifan stake membutuhkan waktu.
* **Kredit Epoch:** `epochCredits` menyediakan riwayat performa validator dalam memperoleh kredit melalui voting.

Panduan ini membahas metode RPC `getVoteAccounts`, sehingga Anda dapat mengkueri dan memahami informasi validator di jaringan Solana.
