> ## 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 메서드는 현재 에포크 또는 지정된 슬롯 범위에서 블록 생산에 대한 정보를 제공합니다. 이는 모든 검증인에 대한 데이터 또는 특정 검증인 식별자에 대한 데이터를 검색하는 데 사용할 수 있습니다. 이는 검증인 성능을 모니터링하고 네트워크의 블록 생산 패턴을 이해하는 데 유용합니다.

## 일반적인 사용 사례

* **검증인 성능 모니터링:** 특정 검증인의 생성 블록 수와 리더 슬롯을 추적합니다.
* **에포크 성능 분석:** 현재 또는 과거 에포크에서 모든 검증인의 블록 생산 개요를 얻습니다.
* **누락된 슬롯 식별:** 검증인이 할당된 리더 슬롯을 놓치고 있는지 확인합니다.
* **네트워크 상태 점검:** 전체 블록 생산 효율성에 대한 데이터를 수집합니다.

## 요청 매개변수

`getBlockProduction` 메서드는 다음 매개변수를 가진 선택적 구성 객체를 허용합니다:

1. **`commitment`** (string, 선택 사항): 쿼리에 사용할 커밋 수준을 지정합니다. 생략하면 노드의 기본 커밋이 사용됩니다.
2. **`range`** (object, 선택 사항): 쿼리할 슬롯 범위를 정의합니다.
   * `firstSlot` (u64): 블록 생산 정보를 가져올 첫 번째 슬롯(포함).
   * `lastSlot` (u64, 선택 사항): 블록 생산 정보를 가져올 마지막 슬롯(포함). 생략하면 현재 슬롯까지의 현재 에포크의 블록 생산이 반환됩니다.
3. **`identity`** (string, 선택 사항): 검증인 식별자의 base58로 인코딩된 공개 키. 제공된 경우, 응답에는 이 특정 검증인에 대한 블록 생산 정보만 포함됩니다. 생략되면 지정된 범위(또는 현재 에포크)의 모든 검증인 정보가 반환됩니다.

**참고:** `identity` 또는 `range.firstSlot` 중 하나는 제공되어야 합니다. `identity`가 제공되지 않으면 `range` 매개변수가 필요합니다.

## 응답 구조

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

* `context` (object):
  * `slot` (u64): 정보가 검색된 슬롯.
* `value` (object):
  * `byIdentity` (object): 키가 검증인 식별자 문자열(base58로 인코딩된 공개 키)인 객체, 값은 다음을 포함하는 객체:
    * `leaderSlots` (u64): 쿼리된 범위/에포크에서 이 검증인에게 할당된 리더 슬롯의 수.
    * `blocksProduced` (u64): 쿼리된 범위/에포크에서 이 검증인이 생성한 블록의 수.
  * `range` (object):
    * `firstSlot` (u64): 쿼리된 범위의 첫 번째 슬롯.
    * `lastSlot` (u64): 쿼리된 범위의 마지막 슬롯.

## 개발자 팁

* **에포크 경계 이해하기**: `identity`를 `range` 없이 쿼리할 때, 반환되는 데이터는 노드에 의해 처리된 최신 슬롯까지의 현재 에포크 데이터입니다. 특정 검증인의 전체 과거 에포크에 대한 데이터가 필요한 경우, 해당 에포크의 `firstSlot`와 `lastSlot`를 확인해야 합니다.
* **노드 데이터 가용성**: 역사적인 블록 생산 데이터의 범위는 RPC 노드 간에 다를 수 있습니다. 매우 오래된 슬롯 범위는 모든 노드에서 사용할 수 없을 수 있습니다.
* **성능 모니터링**: `getBlockProduction`는 검증인 가동 시간과 블록 생산 성공률과 관련된 대시보드나 경고를 구축하는 데 중요한 역할을 합니다.
* **`getLeaderSchedule`와 결합**: 더 깊은 분석을 위해, `getBlockProduction` 데이터를 `getLeaderSchedule`의 출력과 연결하여 특정 리더 슬롯이 생성되었거나 놓쳤는지 확인할 수 있습니다.
* **식별자 vs. 모든 검증인**: `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. 현재 에포크의 특정 검증인에 대한 블록 생산 얻기

이 예제는 현재 에포크에서 특정 검증인 식별자의 블록 생산을 가져옵니다.

<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="/docs/ko/api-reference/rpc/http/getleaderschedule">
    생산 데이터와 연관시키기 위한 전체 리더 일정 가져오기
  </Card>

  <Card title="getVoteAccounts" href="/docs/ko/api-reference/rpc/http/getvoteaccounts">
    모든 투표 검증인에 대한 정보 가져오기
  </Card>
</CardGroup>
