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

# getLeaderSchedule 사용 방법

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

[`getLeaderSchedule`](https://www.helius.dev/docs/api-reference/rpc/http/getleaderschedule) RPC 메서드는 특정 epoch에 대한 검증자에게 블록 생성 리더십 할당을 반환합니다. 리더 일정을 이해하면 네트워크 분석, 특정 시간에 블록을 생성할 검증자를 예측하거나 특정 리더와 상호작용하는 도구에 유용할 수 있습니다.

## 일반적인 사용 사례

* **네트워크 모니터링:** epoch 내 검증자 간의 리더 슬롯 분포를 관찰합니다.
* **거래 라우팅(고급):** 일부 고급 애플리케이션은 현재 또는 다음 리더에게 거래를 라우팅하려 할 수 있지만, 이는 일반적으로 네트워크와 RPC 노드에서 처리됩니다.
* **검증자 성능 분석:** 리더 일정과 실제 블록 생성을 연관시켜 검증자의 가동 시간과 성능을 평가합니다.
* **에폭 진행 이해:** epoch 동안 블록을 생성할 책임이 있는 검증자를 확인합니다.

## 요청 매개변수

이 메서드는 최대 두 개의 선택적 매개변수를 받을 수 있습니다:

1. **`slot`** (u64, 선택 사항): 슬롯 번호입니다. 제공된 경우, 이 슬롯을 포함하는 epoch에 대한 리더 일정이 가져옵니다. `null`가 제공되지 않거나 생략된 경우, 현재 epoch에 대한 리더 일정이 가져옵니다.
2. **`config`** (객체, 선택 사항): 포함할 수 있는 구성 객체입니다:
   * **`commitment`** (문자열, 선택 사항): [커밋 수준](https://www.helius.dev/blog/solana-commitment-levels)을 지정합니다. 제공되지 않은 경우 노드의 기본 커밋이 사용됩니다.
   * **`identity`** (문자열, 선택 사항): 검증자의 base-58로 인코딩된 공개 키입니다. 제공된 경우, 반환된 일정은 이 특정 검증자에게 할당된 슬롯만 포함합니다.

## 응답 구조

JSON-RPC 응답의 `result` 필드는 다음과 같습니다:

* `null`: 요청한 `slot`에 해당하는 epoch(슬롯이 제공되지 않은 경우 현재 epoch)이 발견되지 않거나 리더 일정이 사용 불가능한 경우(예: 미래, 계산되지 않은 epoch).
* **객체**: 일정이 발견된 경우. 이 객체는 다음과 같은 맵입니다:
  * 각각의 **키**는 검증자의 base-58로 인코딩된 공개 키(아이덴티티)입니다.
  * 해당 **값**은 숫자 배열입니다. 각 숫자는 해당 검증자가 리더인 epoch 시작에 상대적인 슬롯 인덱스입니다.

예를 들어, epoch가 슬롯 `1000`에서 시작하고 검증자가 일정에 `[0, 1, 5]`을 가진 경우, 해당 검증자는 슬롯 `1000`, `1001`, `1005`의 리더입니다.

## 예제

### 1. 현재 Epoch에 대한 리더 일정 가져오기

이 예제는 현재 epoch의 전체 리더 일정을 가져옵니다.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API 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": "getLeaderSchedule"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchCurrentLeaderSchedule() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const leaderSchedule = await connection.getLeaderSchedule(); // Fetches for current epoch by default
      if (leaderSchedule) {
        console.log('Leader Schedule for Current Epoch:');
        for (const [validatorIdentity, slots] of Object.entries(leaderSchedule)) {
          console.log(`  Validator: ${validatorIdentity}`);
          console.log(`    Slots (relative to epoch start): ${slots.join(', ')}`);
        }
      } else {
        console.log('Leader schedule for the current epoch not found or not yet available.');
      }
      // console.log(JSON.stringify(leaderSchedule, null, 2));
    } catch (error) {
      console.error('Error fetching leader schedule:', error);
    }
  }

  fetchCurrentLeaderSchedule();
  ```
</CodeGroup>

### 2. 특정 Epoch의 특정 검증자에 대한 리더 일정 가져오기(슬롯별)

이 예제는 슬롯 `200000`을 포함하는 epoch에 대한 주어진 검증자 아이덴티티의 리더 일정을 가져옵니다.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace VALIDATOR_PUBKEY with an actual validator identity 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": "getLeaderSchedule",
      "params": [
        200000,
        { "identity": "VALIDATOR_PUBKEY" }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  // Replace VALIDATOR_PUBKEY with an actual validator identity public key
  const { Connection, PublicKey } = require('@solana/web3.js');

  async function fetchValidatorEpochSchedule() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const targetSlot = 200000;
    const validatorIdentity = 'VALIDATOR_PUBKEY'; // e.g., 'Vote111111111111111111111111111111111111111'

    try {
      const leaderSchedule = await connection.getLeaderSchedule(targetSlot, { identity: validatorIdentity });
      if (leaderSchedule && leaderSchedule[validatorIdentity]) {
        console.log(`Leader Schedule for Validator ${validatorIdentity} in epoch of slot ${targetSlot}:`);
        console.log(`  Slots (relative to epoch start): ${leaderSchedule[validatorIdentity].join(', ')}`);
      } else {
        console.log(`No leader slots found for validator ${validatorIdentity} in epoch of slot ${targetSlot}, or schedule not available.`);
      }
      // console.log(JSON.stringify(leaderSchedule, null, 2));
    } catch (error) {
      console.error('Error fetching validator leader schedule:', error);
    }
  }

  fetchValidatorEpochSchedule();
  ```
</CodeGroup>

## 개발자 팁

* **Epoch 경계:** 리더 일정은 전체 epoch 동안 고정됩니다. `getEpochInfo`를 사용하여 epoch의 시작 및 종료 슬롯을 찾을 수 있습니다.
* **미래 Epochs:** 네트워크가 아직 계산하지 않은 경우, 먼 미래 epoch에 대한 일정을 요청하면 `null`가 반환될 수 있습니다.
* **상대적 슬롯 인덱스:** 응답의 슬롯 번호는 *요청된* epoch의 첫 슬롯에 상대적이며, 블록체인의 절대 슬롯 번호가 아닙니다.
* **대용량 응답:** 아이덴티티 필터가 없는 전체 epoch 일정의 경우, 응답은 모든 검증자와 할당된 슬롯을 나열하여 클 수 있습니다.

이 가이드는 Solana 네트워크의 주어진 epoch에 대한 블록 생산자 할당을 조회하기 위해 `getLeaderSchedule`를 사용하는 데 필요한 정보를 제공합니다.

## 관련 메서드

<CardGroup cols={2}>
  <Card title="getEpochInfo" href="/docs/ko/api-reference/rpc/http/getepochinfo">
    슬롯 경계를 포함한 현재 epoch 정보 얻기
  </Card>

  <Card title="getSlotLeaders" href="/docs/ko/api-reference/rpc/http/getslotleaders">
    특정 범위의 슬롯에 대한 리더 얻기
  </Card>
</CardGroup>
