> ## 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 원장에서 특정 블록의 [commitment](https://www.helius.dev/blog/solana-commitment-levels) 상태에 대한 정보를 제공합니다. 이는 블록에 투표한 지분에 기반하여 블록이 얼마나 확정되었는지를 이해하는 데 유용합니다.

## 일반적인 사용 사례

* **블록 확정성 평가:** 다양한 확인 깊이에서 지분 가중치가 투표한 내용을 조사하여 블록이 달성한 합의 수준을 결정합니다.
* **클러스터 상태 파악:** `totalStake`는 블록이 처리될 때 클러스터 내 총 활성 지분에 대한 통찰력을 제공합니다.
* **고급 확인 로직:** 표준 커밋먼트 레벨(`confirmed`, `finalized`) 이상의 블록 확정성에 대한 특정한 보장이 필요한 애플리케이션에 유용합니다.

## 매개변수

1. `slot` (숫자, 필수): 커밋먼트 정보를 쿼리할 블록의 슬롯 번호(u64).

## 응답

JSON-RPC 응답의 `result` 필드는 다음을 포함하는 객체입니다:

* `commitment` (u64 정수 배열 | null):
  * 각 정수가 특정 확인 깊이에서 블록에 투표한 클러스터 지분(람포츠)을 나타내는 u64 정수 배열입니다.
  * 배열은 보통 32개의 요소를 포함합니다(깊이 0부터 `MAX_LOCKOUT_HISTORY`, 즉 31까지).
  * 배열의 `i` 인덱스는 블록 자체와 그 자손에 대한 투표를 고려하여 블록에 대해 투표한 지분을 보여줍니다.
  * 블록이 발견되지 않거나 커밋먼트 정보가 없으면(예: 너무 오래되어 커밋먼트 추적에서 삭제된 경우) 이 필드는 `null`가 됩니다.
* `totalStake` (숫자):
  * 이 블록이 처리될 때 슬롯의 클러스터 내 총 활성 지분(람포츠). 이 값은 블록에 커밋된 지분의 백분율을 계산하는 데 사용됩니다.

## 개발자 팁

* **`commitment` 배열 해석:**
  * `commitment` 배열은 다양한 확인 깊이에서 블록에 투표한 지분(람포츠)을 보여줍니다. 더 깊은 인덱스에서 높은 값은 더 강한 확정성을 나타냅니다.
  * `null` `commitment` 배열은 슬롯에 대한 데이터를 노드가 가지고 있지 않음을 의미하며, 이는 슬롯이 너무 오래되었거나 건너뛰었기 때문일 수 있습니다.
  * `commitment[i] / totalStake >= 2/3` (슈퍼다수)일 경우 깊이 `i`에서 확정성을 평가할 수 있습니다.
* **고급 사용 사례:** `getBlockCommitment`는 미세한 확정성 분석을 위한 것입니다. 대부분의 일반적인 시나리오에서는 다른 RPC 메서드(`getTransaction` 또는 `getBlock` 등)와 함께 표준 확정 수준(`processed`, `confirmed`, 또는 `finalized`)에 의존하는 것이 더 간단하고 충분합니다.
* **커밋먼트 이해하기:** `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>
