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

# getBlockProductionの使用方法

> getBlockProductionの使用例、コード例、リクエストパラメータ、レスポンス構造、ヒントを学ぶ。

この[`getBlockProduction`](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) RPCメソッドは、現在のエポックまたは指定されたスロット範囲でのブロック生成に関する情報を提供します。すべてのバリデータまたは特定のバリデータIDのデータを取得するために使用できます。これは、バリデータのパフォーマンスを監視し、ネットワーク上のブロック生成パターンを理解するのに役立ちます。

## 共通の使用例

* **バリデータのパフォーマンス監視：** 特定のバリデータの生成されたブロック数とリーダースロットを追跡します。
* **エポックパフォーマンスの分析：** 現在または過去のエポックでのすべてのバリデータのブロック生成の概要を取得します。
* **ミススロットの特定：** バリデータが割り当てられたリーダースロットを逃していないか確認します。
* **ネットワークヘルスチェック：** 全体的なブロック生成効率に関するデータを収集します。

## リクエストパラメータ

`getBlockProduction` メソッドは、以下のパラメータを含むオプションの設定オブジェクトを受け入れます。

1. **`commitment`** (string, optional): クエリで使用するコミットメントレベルを指定します。省略した場合、ノードのデフォルトのコミットメントが使用されます。
2. **`range`** (object, optional): クエリするスロット範囲を定義します。
   * `firstSlot` (u64): ブロック生成情報を取得する最初のスロット（含む）。
   * `lastSlot` (u64, optional): ブロック生成情報を取得する最後のスロット（含む）。省略した場合、現在のエポックのブロック生成が最後のスロットまで返されます。
3. **`identity`** (string, optional): バリデータIDのbase58でエンコードされた公開鍵。指定した場合、レスポンスにはこの特定のバリデータのブロック生成情報のみが含まれます。省略した場合、指定された範囲または現在のエポック内のすべてのバリデータの情報が返されます。

**注:** `identity`または`range.firstSlot`のいずれかを提供する必要があります。`identity`を提供しない場合、`range`パラメータが必要です。

## レスポンス構造

JSON-RPC レスポンスの `result` フィールドは次のオブジェクトを含みます。

* `context` (object):
  * `slot` (u64): 情報が取得されたスロット。
* `value` (object):
  * `byIdentity` (object): キーがバリデータIDの文字列（base58でエンコードされた公開鍵）で、値が次のオブジェクトを含むオブジェクトです。
    * `leaderSlots` (u64): クエリされた範囲/エポックでこのバリデータに割り当てられたリーダースロットの数。
    * `blocksProduced` (u64): クエリされた範囲/エポックでこのバリデータにより生成されたブロック数。
  * `range` (object):
    * `firstSlot` (u64): クエリされた範囲の最初のスロット。
    * `lastSlot` (u64): クエリされた範囲の最後のスロット。

## 開発者向けヒント

* **エポックの境界を理解する**：`identity`が指定されており`range`が指定されていない場合、返されるデータは現在のエポックのもので、ノードが最新まで処理したスロットまでのものです。特定のバリデータの過去の完全なエポックのデータが必要な場合は、エポックの`firstSlot`と`lastSlot`を特定する必要があります。
* **ノードデータの利用可能性**：歴史的なブロック生成データの範囲は、RPCノードにより異なる場合があります。非常に古いスロット範囲はすべてのノードで利用できるとは限りません。
* **パフォーマンスの監視**：`getBlockProduction`は、バリデータの稼働時間やブロック生成成功率に関連するダッシュボードやアラートを構築するための鍵です。
* **`getLeaderSchedule`との組み合わせ**：より深い分析のために、`getBlockProduction`データを`getLeaderSchedule`の出力と相関させて、どの特定のリーダースロットが成功または失敗したかを確認できます。
* **ID対すべてのバリデータ**：`identity`なしでクエリすると、特に`range`や広い`range`を指定しない場合、大量のデータを返すことがあります。レスポンスサイズや処理要件に注意してください。

## 例

### 1. 現在のエポックのブロック生成を取得（すべてのバリデータ）

この例は、現在のエポックにおけるすべてのバリデータのブロック生成データを取得します。

<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. 特定のバリデータの現在のエポックにおけるブロック生成を取得

この例は、現在のエポックにおける特定のバリデータIDのブロック生成を取得します。

<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. 特定のスロット範囲とバリデータのブロック生成を取得

この例は、特定のスロット範囲内で特定のバリデータのブロック生成データを取得します。

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

このガイドは、Solana上でのブロック生成を分析するために`getBlockProduction` RPCメソッドを使用する方法を十分に理解するのに役立ちます。

## 関連するメソッド

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/ja/api-reference/rpc/http/getleaderschedule">
    生成データと相関するための完全なリーダースケジュールを取得
  </Card>

  <Card title="getVoteAccounts" href="/ja/api-reference/rpc/http/getvoteaccounts">
    すべての投票バリデータに関する情報を取得
  </Card>
</CardGroup>
