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

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

Metode RPC [`getBlockProduction`](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) menyediakan informasi tentang produksi blok dalam epok saat ini atau rentang slot tertentu. Metode ini dapat digunakan untuk mengambil data semua validator atau identitas validator tertentu. Informasi ini berguna untuk memantau kinerja validator dan memahami pola produksi blok di jaringan.

## Kasus Penggunaan Umum

* **Memantau Kinerja Validator:** Lacak jumlah blok yang diproduksi dan slot pemimpin untuk validator tertentu.
* **Menganalisis Kinerja Epok:** Dapatkan gambaran umum produksi blok di seluruh validator dalam epok saat ini atau epok sebelumnya.
* **Mengidentifikasi Slot yang Terlewat:** Periksa apakah validator melewatkan slot pemimpin yang ditetapkan kepadanya.
* **Memeriksa Kondisi Jaringan:** Kumpulkan data tentang efisiensi produksi blok secara keseluruhan.

## Parameter Permintaan

Metode `getBlockProduction` menerima objek konfigurasi opsional dengan parameter berikut:

1. **`commitment`** (string, opsional): Menentukan tingkat komitmen yang akan digunakan untuk kueri. Jika dihilangkan, komitmen default node akan digunakan.
2. **`range`** (object, opsional): Menentukan rentang slot yang akan dikueri.
   * `firstSlot` (u64): Slot pertama yang informasi produksi bloknya akan diambil (inklusif).
   * `lastSlot` (u64, opsional): Slot terakhir yang informasi produksi bloknya akan diambil (inklusif). Jika dihilangkan, produksi blok epok saat ini hingga slot terkini akan dikembalikan.
3. **`identity`** (string, opsional): Kunci publik identitas validator yang dikodekan dengan base58. Jika diberikan, respons hanya akan menyertakan informasi produksi blok untuk validator khusus ini. Jika dihilangkan, informasi untuk semua validator dalam rentang yang ditentukan (atau epok saat ini) akan dikembalikan.

**Catatan:** Setidaknya salah satu dari `identity` atau `range.firstSlot` harus diberikan. Jika `identity` tidak diberikan, parameter `range` wajib diberikan.

## Struktur Respons

Kolom `result` dari respons JSON-RPC akan berupa objek yang berisi:

* `context` (object):
  * `slot` (u64): Slot saat informasi diambil.
* `value` (object):
  * `byIdentity` (object): Objek dengan kunci berupa string identitas validator (kunci publik yang dikodekan dengan base58), dan nilai berupa objek yang berisi:
    * `leaderSlots` (u64): Jumlah slot pemimpin yang ditetapkan kepada validator ini dalam rentang/epok yang dikueri.
    * `blocksProduced` (u64): Jumlah blok yang diproduksi oleh validator ini dalam rentang/epok yang dikueri.
  * `range` (object):
    * `firstSlot` (u64): Slot pertama dalam rentang yang dikueri.
    * `lastSlot` (u64): Slot terakhir dalam rentang yang dikueri.

## Tips untuk Developer

* **Pahami Batas Epok**: Saat membuat kueri berdasarkan `identity` tanpa `range`, data yang dikembalikan mencakup epok saat ini hingga slot terbaru yang telah diproses oleh node. Jika Anda memerlukan data untuk epok sebelumnya secara *penuh* bagi validator tertentu, Anda perlu menentukan `firstSlot` dan `lastSlot` untuk epok tersebut.
* **Ketersediaan Data Node**: Rentang data historis produksi blok dapat berbeda-beda antara node RPC. Rentang slot yang sangat lama mungkin tidak tersedia di semua node.
* **Pemantauan Kinerja**: `getBlockProduction` penting untuk membuat dasbor atau peringatan terkait waktu aktif validator dan tingkat keberhasilan produksi blok.
* **Menggabungkan dengan `getLeaderSchedule`**: Untuk analisis lebih mendalam, Anda dapat mengorelasikan data `getBlockProduction` dengan keluaran `getLeaderSchedule` guna melihat slot pemimpin tertentu yang berhasil dibuat atau terlewat.
* **Identitas vs. Semua Validator**: Kueri tanpa `identity` dapat mengembalikan data dalam jumlah besar, terutama jika `range` tidak ditentukan atau rentang `range` yang ditentukan terlalu luas. Perhatikan ukuran respons dan kebutuhan pemrosesan.

## Contoh

### 1. Mendapatkan Produksi Blok untuk Epok Saat Ini (Semua Validator)

Contoh ini mengambil data produksi blok untuk semua validator dalam epok saat ini.

<CodeGroup>
  ```bash cURL theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction"
    }'
  ```

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

  async function getEpochBlockProduction() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction();
      console.log('Block Production for Current Epoch:', JSON.stringify(blockProduction, null, 2));
      // Example: Accessing data for a specific validator (if present)
      // const specificValidatorIdentity = " deaktivCQ2sV2KF1y7n4qX1xUFk6VXL79CdfjrmLdshs"; // Replace with actual identity
      // if (blockProduction.value.byIdentity[specificValidatorIdentity]) {
      //   console.log(\`Data for \${specificValidatorIdentity}:\`, blockProduction.value.byIdentity[specificValidatorIdentity]);
      // }
    } catch (error) {
      console.error('Error fetching block production:', error);
    }
  }

  getEpochBlockProduction();
  ```
</CodeGroup>

### 2. Mendapatkan Produksi Blok untuk Validator Tertentu dalam Epok Saat Ini

Contoh ini mengambil data produksi blok untuk identitas validator tertentu dalam epok saat ini.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY with the actual validator's base58 public key.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY"
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProduction(validatorIdentity) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({ identity: validatorIdentity });
      console.log(\`Block Production for \${validatorIdentity}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity}:\`, error);
    }
  }

  // Replace with the validator identity you want to query
  const validatorIdentity = "So11111111111111111111111111111111111111112"; // Example: Solana Foundation
  getValidatorBlockProduction(validatorIdentity);
  ```
</CodeGroup>

### 3. Mendapatkan Produksi Blok untuk Rentang Slot dan Validator Tertentu

Contoh ini mengambil data produksi blok untuk validator tertentu dalam rentang slot yang telah ditentukan.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY, START_SLOT, and END_SLOT.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY",
          "range": {
            "firstSlot": START_SLOT, # e.g., 200000000
            "lastSlot": END_SLOT    # e.g., 200010000
          }
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({
        identity: validatorIdentity,
        range: {
          firstSlot: firstSlot,
          lastSlot: lastSlot,
        },
      });
      console.log(\`Block Production for \${validatorIdentity} in range \${firstSlot}-\${lastSlot}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity} in range:\`, error);
    }
  }

  // Replace with your desired parameters
  const validatorIdentity = "Beefy1So11111111111111111111111111111111111"; // Example validator
  const firstSlot = 200000000; // Example start slot
  const lastSlot = 200010000;   // Example end slot
  getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot);
  ```
</CodeGroup>

Panduan ini akan membantu Anda memahami dengan baik cara menggunakan metode RPC `getBlockProduction` untuk menganalisis produksi blok di Solana.

## Metode Terkait

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/docs/id/api-reference/rpc/http/getleaderschedule">
    Dapatkan jadwal pemimpin lengkap untuk dikorelasikan dengan data produksi
  </Card>

  <Card title="getVoteAccounts" href="/docs/id/api-reference/rpc/http/getvoteaccounts">
    Dapatkan informasi tentang semua validator pemberi suara
  </Card>
</CardGroup>
