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

# 如何使用 getEpochSchedule

> 了解 getEpochSchedule 的使用案例、代码示例、请求参数、响应结构和提示。

[RPC 方法](https://www.helius.dev/docs/api-reference/rpc/http/getepochschedule)从集群的创世配置返回[epoch](https://www.helius.dev/blog/solana-slots-blocks-and-epochs)调度信息。此数据定义了epoch的结构，包括其长度以及如何相对于epoch的开始确定领导者调度。

理解 epoch 计划对于需要与网络事件对齐、预测 epoch 边界或理解领导者轮换机制的应用程序至关重要。

## 常见用例

* **预测 Epoch 边界：** 确定一个 epoch 中的插槽数量，以估算当前 epoch 何时结束以及下一个何时开始。
* **领导者调度计算：** 了解 `leaderScheduleSlotOffset` 以了解为即将到来的 epoch 提前多长时间生成领导者调度。
* **分析网络初始化：** 观察 `warmup`, `firstNormalEpoch` 和 `firstNormalSlot` 以了解集群 epoch 长度的初始增温阶段（如果适用）。
* **构建网络监控工具：** 使用此信息准确显示 epoch 的时序和进展。

## 请求参数

此方法不接受任何参数。

## 响应结构

JSON-RPC 响应的 `result` 字段将是一个包含以下字段的对象：

* **`slotsPerEpoch`** (u64)：每个 epoch 中的最大插槽数量（如果有增温期，则在增温期后）。
* **`leaderScheduleSlotOffset`** (u64)：生成该 epoch 的领导者调度的 epoch 开始前的插槽数量。
* **`warmup`** (boolean)：布尔值，指示集群是否有增温期，其中 epoch 开始时较短并逐渐增加长度。
* **`firstNormalEpoch`** (u64)：具有完整 `slotsPerEpoch` 长度的第一个 epoch 编号。如果 `warmup` 为真，则此项相关。
* **`firstNormalSlot`** (u64)：`firstNormalEpoch` 中第一个插槽的插槽索引。如果 `warmup` 为真，则此项相关。

## 示例

### 1. 获取集群的 Epoch 计划

此示例获取 epoch 计划。

<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": "getEpochSchedule"
    }'
  ```

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

  async function getClusterEpochSchedule() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const epochSchedule = await connection.getEpochSchedule();
      console.log(JSON.stringify(epochSchedule, null, 2));
    } catch (error) {
      console.error('Error fetching epoch schedule:', error);
    }
  }

  getClusterEpochSchedule();
  ```
</CodeGroup>

## 开发者提示

* **静态信息：** epoch 计划由集群的创世配置确定，通常不会改变，除非有重大网络升级或具有不同参数的新集群启动。
* **Mainnet 与 Testnet/Devnet：** epoch 计划，特别是 `slotsPerEpoch` 和 warmup 参数，在 Mainnet Beta、Testnet 和 Devnet 之间可能有很大差异。始终查询您感兴趣的特定集群。
* **热身期：** 如果 `warmup` 为 `true`，则在 `firstNormalEpoch` 之前的 epoch 将有比 `slotsPerEpoch` 更少的插槽。热身 epoch 长度的精确计算是 `2^N * MINIMUM_SLOTS_PER_EPOCH` ，其中 N 是 epoch 编号（从 0 开始），直到达到 `firstNormalEpoch`。`MINIMUM_SLOTS_PER_EPOCH` 通常是 32。

本指南提供使用 `getEpochSchedule` RPC 方法所需的信息，以了解 Solana 集群中 epoch 的基本时间和结构。
