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

# getBlock 사용 방법

> getBlock 사용 사례, 코드 예제, 요청 매개변수, 응답 구조 및 팁을 알아보세요.

[`getBlock`](https://www.helius.dev/docs/api-reference/rpc/http/getblock) RPC 메서드를 사용하면 Solana 원장에 있는 확인된 블록에 대한 자세한 정보를 검색할 수 있습니다. 이는 블록 탐색기, 거래 내역 분석 및 특정 시점에 체인의 상태를 이해하는 데 필수적입니다.

<Warning>
  **더 나은 성능을 위해 배치를 피하세요**

  보관 방법 배치는 대기 시간을 크게 증가시킵니다. 10개 이상의 요청을 포함하는 배치는 허용되지 않습니다.
</Warning>

## 일반적인 사용 사례

* **블록 내용 검사:** 특정 [블록](https://www.helius.dev/blog/solana-slots-blocks-and-epochs)에 포함된 모든 거래를 봅니다.
* **블록 해시 검색:** 주어진 슬롯에 대한 블록 해시, 부모의 블록 해시 및 부모 슬롯을 가져옵니다.
* **블록 높이 및 시간 확인:** 블록의 높이(순서 번호)와 예상 생성 시간을 확인합니다.
* **거래 세부 정보 분석:** 적절한 매개변수를 사용하여 수수료, 상태, 사전/사후 잔액 및 내부 명령과 같은 메타데이터를 포함한 전체 거래 데이터를 얻을 수 있습니다.
* **보상 가져오기:** 블록의 보상 정보를 포함할 수 있습니다.

## 매개변수

1. `slot` (필수, 숫자): 쿼리할 블록의 슬롯 번호 (u64).

2. `config` (선택 사항, 객체): 다음 필드를 가진 구성 객체:
   * `commitment` (선택 사항, 문자열): 사용할 [커밋먼트 수준](https://www.helius.dev/blog/solana-commitment-levels)을 지정합니다. 이 메서드에 대해 `processed`는 지원되지 않습니다. 기본값은 `finalized`입니다.
   * `encoding` (선택 사항, 문자열): 거래 데이터의 인코딩을 지정합니다. 기본값은 `json`입니다. `transactionDetails`가 `full` 또는 `accounts`인 경우, 그렇지 않으면 `base64`입니다.
     * `json`: JSON 형식으로 거래 및 계정 데이터를 반환합니다 (`jsonParsed`을 권장하며 더 이상 사용되지 않음).
     * `jsonParsed`: 구문 분석된 JSON으로 거래 및 계정 데이터를 반환합니다. 이 방법은 모든 거래 계정 키를 포함하므로 권장됩니다 (주소 조회 테이블의 경우에도 포함).
     * `base58` (느림)
     * `base64`
     * `base64+zstd`
   * `transactionDetails` (선택 사항, 문자열): 반환할 거래 세부 정보 수준을 지정합니다. 기본값은 `full`입니다.
     * `full`: 거래 메타데이터를 포함한 전체 거래 세부 정보를 반환합니다.
     * `accounts`: 각 거래에 설명된 계정 목록을 반환하지만, 전체 거래 데이터나 메타데이터는 반환하지 않습니다.
     * `signatures`: 거래 서명만 반환합니다.
     * `none`: 거래 세부 정보를 반환하지 않습니다.
   * `rewards` (선택 사항, 불리언): 응답에 보상 배열을 포함할지 여부를 나타냅니다. 기본값은 `false`입니다.
   * `maxSupportedTransactionVersion` (선택 사항, 숫자): 반환할 최대 거래 버전을 지정합니다. 블록에 더 높은 버전의 거래가 포함된 경우 오류가 반환됩니다. 생략된 경우 레거시 거래만 반환되고, 버전이 있는 거래가 있는 블록은 오류를 발생시킵니다. 주소 조회 테이블을 사용하는 버전된 거래를 포함하려면 `0`로 설정합니다.

## 응답

지정된 블록이 확인되고 발견되면 `result` 필드는 블록에 대한 정보를 포함하는 객체가 됩니다. 블록이 발견되지 않거나 확인되지 않으면 `result`는 `null`입니다.

블록 객체의 주요 필드는 다음과 같습니다:

* `blockhash` (문자열): 이 블록에 대한 base-58로 인코딩된 블록 해시.
* `previousBlockhash` (문자열): 이전 블록의 base-58로 인코딩된 블록 해시. (원장 정리로 인해) 부모가 사용 불가능한 경우, 이것은 시스템 프로그램 ID일 수 있습니다.
* `parentSlot` (숫자): 부모 블록의 슬롯 번호.
* `transactions` (배열): 블록에 포함된 거래 객체 배열. 이러한 객체의 구조는 `encoding` 및 `transactionDetails` 매개변수에 따라 다릅니다.
  * 각 거래 객체는 일반적으로 `meta` (수수료, 상태, 로그, 사전/사후 잔액과 같은 메타데이터) 및 `transaction` (메시지 및 서명을 포함한 실제 거래 데이터)를 포함합니다.
* `rewards` (옵션, 배열): `rewards: true`가 지정된 경우 존재하는 보상 객체 배열. 각 객체는 `pubkey`, `lamports`, `postBalance`, `rewardType` 및 잠재적으로 `commission`를 상세히 설명합니다.
* `blockTime` (숫자 | null): Unix 타임스탬프(시작 시점 이후 초)로서 블록의 예상 생성 시간입니다. 사용할 수 없는 경우 `null`입니다.
* `blockHeight` (숫자 | null): 이 블록의 높이(슬롯 0에서 발생한 체인의 이전 블록 수)입니다. 사용할 수 없는 경우 `null`입니다.

응답 내의 거래 및 메타 객체의 완전하고 자세한 구조에 대해서는 공식 Solana RPC 문서를 참조하세요.

## 예제: 블록 정보 가져오기

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": "getBlock",
    "params": [
      250000000, 
      {
        "encoding": "jsonParsed",
        "transactionDetails": "full",
        "rewards": true,
        "maxSupportedTransactionVersion": 0
      }
    ]
  }'
  ```

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

  async function getBlockDetails() {
    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 {
      const block = await connection.getBlock(slotToQuery, {
        encoding: "jsonParsed",
        transactionDetails: "full",
        rewards: true,
        maxSupportedTransactionVersion: 0 
      });

      if (block) {
        console.log('Block Details:');
        console.log(`   Slot: ${slotToQuery}`);
        console.log(`   Blockhash: ${block.blockhash}`);
        console.log(`   Previous Blockhash: ${block.previousBlockhash}`);
        console.log(`   Parent Slot: ${block.parentSlot}`);
        console.log(`   Block Height: ${block.blockHeight !== null ? block.blockHeight : 'N/A'}`);
        console.log(`   Block Time: ${block.blockTime ? new Date(block.blockTime * 1000).toISOString() : 'N/A'}`);
        console.log(`   Transactions Count: ${block.transactions.length}`);
        // console.log('   Transactions:', JSON.stringify(block.transactions, null, 2)); // Full transaction details
        // console.log('   Rewards:', JSON.stringify(block.rewards, null, 2)); // Reward details
      } else {
        console.log(`Block at slot ${slotToQuery} not found or not confirmed.`);
      }
    } catch (error) {
      console.error(`Error fetching block ${slotToQuery}:`, error);
    }
  }

  getBlockDetails();
  ```

  ```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(377261141);

  let block = await rpc
    .getBlock(
      slot_number,
      {
        commitment: "finalized",
        encoding: "json",
        transactionDetails: "full",
        maxSupportedTransactionVersion: 0,
        rewards: false,
      },
    )
    .send();

  console.log("block:", block);
  ```

  ```rust Rust theme={"system"}
  use anyhow::Result;
  use solana_client::nonblocking::rpc_client::RpcClient;
  use solana_sdk::commitment_config::CommitmentConfig;
  use solana_transaction_status_client_types::{TransactionDetails, UiTransactionEncoding};

  #[tokio::main]
  async fn main() -> Result<()> {
      let client = RpcClient::new_with_commitment(
          String::from("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
          CommitmentConfig::confirmed(),
      );

      let slot_number = 377261141;

      let config = solana_client::rpc_config::RpcBlockConfig {
          encoding: UiTransactionEncoding::Base58.into(),
          transaction_details: TransactionDetails::Full.into(),
          rewards: None,
          commitment: CommitmentConfig::finalized().into(),
          max_supported_transaction_version: Some(0),
      };
      let block = client.get_block_with_config(slot_number, config).await?;

      println!("Block: {:#?}", block);

      Ok(())
  }
  ```
</CodeGroup>

## 개발자 팁

* **슬롯 대 블록 높이:** `getBlock`는 반드시 블록 높이가 아닌 `slot` 번호를 입력으로 받는다는 점을 기억하세요. 슬롯은 순차적이지만, 일부 슬롯은 리더에 의해 건너뛰어질 수 있습니다. 응답의 `blockHeight` 필드는 이 블록 이전의 실제 블록 수를 나타냅니다.
* **`maxSupportedTransactionVersion`는 중요:** 버전된 거래를 포함하는 블록을 검사하려면 (현재 표준이며 주소 조회 테이블을 사용하는) `maxSupportedTransactionVersion: 0`를 설정해야 합니다 (또는 새로운 표준이 나타나면 더 높은 버전). 이를 잊으면 현대 블록에 대해 오류가 발생합니다.
* **`transactionDetails` 선택:**
  * 풀 분석에 필요한 데이터 양을 반환하지만 가장 많은 데이터를 반환합니다.
  * 블록의 거래 목록만 필요한 경우 유용합니다.
  * 모든 명령 데이터를 가져오지 않고도 어떤 계정이 관련되었는지 보려면 중간 지점이 될 수 있습니다.
  * 드물지만 `blockhash`나 `rewards`와 같은 블록 수준 메타데이터만 필요한 경우 사용할 수 있습니다.
* **인코딩을 위한 `jsonParsed` 권장:** 거래 세부 정보를 요청할 때, `jsonParsed`는 가장 개발자 친화적인 출력을 제공하며 `json` (더 이상 사용되지 않음)에서는 해결되지 않는 주소 조회 테이블의 계정을 올바르게 해결합니다.
* **블록 가용성 없음:** `null` 결과는 해당 슬롯의 블록을 찾을 수 없음을 의미합니다. 이는 슬롯이 건너뛰어졌거나, 당신이 지정한 `commitment` 수준으로 블록이 확인되지 않았거나, RPC 노드가 해당 슬롯의 기록 블록을 원장에서 제거했기 때문일 수 있습니다 (오래된 슬롯에서 일반적임).
* **보상 정보:** 블록 검증자(및 보상 유형에 따라 스테이커)에게 보상의 분배를 보기 위해서는 `rewards: true`을 설정해야 합니다. 이는 응답 크기를 증가시킵니다.
* **블록 구조 이해:** Solana의 아키텍처에서 블록이 어떻게 맞물리는지에 대한 더 깊은 이해를 위해, [Solana의 슬롯, 블록 및 에포크 이해하기](https://www.helius.dev/blog/solana-slots-blocks-and-epochs)를 참조하세요.
