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

# getBlockCommitmentの使用方法

> getBlockCommitmentの使用例、コード例、リクエストパラメータ、応答構造、およびヒントを学びます。

[`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) RPCメソッドは、Solana台帳の特定のブロックにおける[コミットメント](https://www.helius.dev/blog/solana-commitment-levels)のステータスに関する情報を提供します。これは、ブロックがどれほど最終確定されたかを理解するために、投票したステークに基づいて役立ちます。

## 一般的な使用例

* **ブロックの最終確定の評価:** 異なる確認深度でのステーク重み付き投票を調査することにより、ブロックが達成したコンセンサスレベルを決定します。
* **クラスターの健全性の理解:** `totalStake`は、ブロックが処理された時点でのクラスター内の総アクティブステークに関する洞察を提供します。
* **高度な確認ロジック:** 標準的なコミットメントレベル（`confirmed`、`finalized`）を超えたブロックの最終確定に関して非常に具体的な保証を必要とするアプリケーションのためのものです。

## パラメータ

1. `slot` (number, required): コミットメント情報を問い合わせるブロックのスロット番号（u64）。

## レスポンス

JSON-RPCレスポンスの`result`フィールドは、次の内容を含むオブジェクトになります。

* `commitment` (u64整数の配列 | null):
  * 各整数が特定の確認深度でブロックに投票したクラスターのステーク量（lamports単位）を表すu64整数の配列です。
  * 配列は通常、32要素（深度0から`MAX_LOCKOUT_HISTORY`、つまり31まで）を持ちます。
  * 配列のインデックス`i`は、ブロック自体とその子孫に対して`i`レベル深までの投票を考慮したブロックに投票したステークを示します。
  * ブロックが見つからない、またはそのコミットメント情報が利用できない場合（たとえば、古すぎてコミットメントトラッキングからプルーニングされているなど）、このフィールドは`null`になります。
* `totalStake` (number):
  * このブロックが処理されたスロットでのクラスター内の総アクティブステーク（lamports単位）。この値はブロックにコミットしたステークの割合を計算するために使用されます。

## 開発者のヒント

* **`commitment`配列の解釈:**
  * `commitment`配列は、異なる確認深度でブロックに投票したステーク（lamports単位）を示します。深いインデックスで値が高いほど、より強力な最終確定を意味します。
  * `null` `commitment`配列は、スロットのデータがノードに存在しない可能性が高いことを示します。それは、スロットが古すぎるかスキップされた可能性があります。
  * `i`の深さでの最終確定を判断することができます。これは、`commitment[i] / totalStake >= 2/3`（スーパー多数決）の場合です。
* **高度な使用例:** `getBlockCommitment`は精緻な最終確定分析のためのものです。多くの一般的なシナリオでは、標準的なコミットメントレベル（`processed`、`confirmed`、または`finalized`）と他のRPCメソッド（例えば、`getTransaction`や`getBlock`）に依存することで十分です。
* **コミットメントの理解:** `getBlockCommitment`を最大限に活用するためには、Solanaのコミットメントレベルの理解が必要です。[Solana Commitment Levels](https://www.helius.dev/blog/solana-commitment-levels)を参照して詳細情報を確認してください。
* **プルーニング:** RPCノードが古いコミットメント情報をプルーニングする可能性があり、これにより古いスロットに対して`null`の結果が生じることを認識してください。

## 例: ブロックコミットメント情報の取得

Devnetでのスロット番号の具体例を用いてコミットメント情報を取得してみましょう。
**重要:** スロット番号は迅速に処理されます。以下で使用されているスロット番号（`250000000`）はプレースホルダーです。例を実行する際には、ターゲットネットワーク（例えば、DevnetまたはMainnet）で存在することが確認されている最近のスロットに置き換えてください。最新のスロット番号はSolanaブロックエクスプローラーを使用して確認できます。

**注意:** 以下の例で使われる`YOUR_API_KEY`を、実際のHelius APIキーに置き換えてください。

<CodeGroup>
  ```bash curl theme={"system"}
  # Replace 250000000 with a valid, recent slot number on Devnet/Mainnet
  curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBlockCommitment",
    "params": [
      250000000 
    ]
  }'
  ```

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

  async function getBlockCommitmentDetails() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');
    
    // Replace with a valid, recent slot number on your target network
    const slotToQuery = 250000000; 

    try {
      // Note: getBlockCommitment is not directly available in @solana/web3.js Connection object.
      // You typically need to make a direct RPC call for this method.
      // The example below shows how to construct and send such a raw request.
      const response = await fetch(rpcUrl, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: 1,
          method: 'getBlockCommitment',
          params: [slotToQuery],
        }),
      });
      const result = await response.json();

      if (result.error) {
        console.error(`Error fetching block commitment for slot ${slotToQuery}:`, result.error.message);
        return;
      }

      const blockCommitment = result.result;

      if (blockCommitment) {
        console.log(`Block Commitment for Slot ${slotToQuery}:`);
        console.log(`   Total Stake (Lamports): ${blockCommitment.totalStake}`);
        console.log(`   Commitment Array:`, blockCommitment.commitment ? blockCommitment.commitment : 'Not available/Unknown block');
        // The commitment array shows lamports committed at different depths.
        // A null commitment array usually means the block is not found or too old.
        // A non-null array where later entries are higher indicates increasing finality.
      } else {
        console.log(`Block commitment data for slot ${slotToQuery} not found.`);
      }
    } catch (error) {
      console.error(`Error fetching block commitment for slot ${slotToQuery}:`, error);
    }
  }

  getBlockCommitmentDetails();
  ```

  ```typescript Kit theme={"system"}
  import { createSolanaRpc } from "@solana/kit";

  const rpc_url = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY";
  const rpc = createSolanaRpc(rpc_url);

  const slot_number = BigInt(5);

  let blockCommitment = await rpc.getBlockCommitment(slot_number).send();

  console.log("block commitment:", blockCommitment);
  ```
</CodeGroup>
