Leader Slot 信息 API 文档

什么是 Leader Slot 信息(getLeaderSlots)API?

getLeaderSlots 是一个扩展的 Solana RPC 方法,用于返回即将到来的 leader slot 记录,包括 validator identity、质押权重、网络端点元数据、估算的 leader 位置以及参考延迟测量。持有 ERPC 使用额度(API token)的用户,可以用与标准 Solana RPC 方法相同的格式调用。
此 API 提供:
  • 从指定 slot 开始的 leader validator 调度
  • 每个 leader validator 的 stakeWeight
  • 估算的 leader 区域、城市、国家、坐标、ASN 组织与时区
  • 通过 pingToLeaders 提供从 ERPC 各观测区域到 leader 的参考 ping 测量

端点和请求体示例

endpoint
https://edge.erpc.global?api-key=<YOUR_API_KEY>
在 params 中指定起始 slot 编号。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getLeaderSlots",
  "params": [436946064]
}

示例(HTTP)

bash
curl 'https://edge.erpc.global?api-key=<YOUR_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"getLeaderSlots",
    "params":[436946064]
  }'

响应示例(JSON)

当前响应会将记录放在 result.data[] 中。result.total 表示返回的记录数量。下面的 data[] 数组从本次请求的 100 条记录中摘录了三条:第一条记录展示了来自 ERPC 全部七个观测区域的 pingToLeaders,其余记录为便于阅读只保留了一个区域。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "success": true,
    "message": "Leader schedule records retrieved successfully",
    "total": 100,
    "data": [
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946064",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-03T06:20:48.000Z"
          },
          {
            "city": "Newark",
            "region": "ny",
            "ms": 74.981,
            "icmpReplied": true,
            "fromIp": "64.130.37.222",
            "country": "US",
            "lat": 40.73566,
            "lon": -74.17237,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "07102",
            "timezone": "America/New_York",
            "measuredAt": "2026-08-03T06:22:21.000Z"
          },
          {
            "city": "London",
            "region": "london",
            "ms": 10.978,
            "icmpReplied": true,
            "fromIp": "67.209.52.250",
            "country": "GB",
            "lat": 51.50853,
            "lon": -0.12574,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "WC2N",
            "timezone": "Europe/London",
            "measuredAt": "2026-08-03T06:23:06.000Z"
          },
          {
            "city": "Singapore",
            "region": "singapore",
            "ms": 166.379,
            "icmpReplied": true,
            "fromIp": "202.8.11.52",
            "country": "SG",
            "lat": 1.2959,
            "lon": 103.7907,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "139963",
            "timezone": "Asia/Singapore",
            "measuredAt": "2026-08-03T06:24:52.000Z"
          },
          {
            "city": "Amsterdam",
            "region": "amsterdam",
            "ms": 12.827,
            "icmpReplied": true,
            "fromIp": "84.32.103.245",
            "country": "NL",
            "lat": 52.37403,
            "lon": 4.88969,
            "org": "AS59642 UAB Cherry Servers",
            "postal": "1012",
            "timezone": "Europe/Amsterdam",
            "measuredAt": "2026-08-03T06:21:33.000Z"
          },
          {
            "city": "Ebara",
            "region": "tokyo",
            "ms": 212.499,
            "icmpReplied": true,
            "fromIp": "198.13.133.88",
            "country": "JP",
            "lat": 35.617,
            "lon": 139.7486,
            "org": "AS20326 TeraSwitch Networks Inc.",
            "postal": "140-0002",
            "timezone": "Asia/Tokyo",
            "measuredAt": "2026-08-03T06:24:01.000Z"
          },
          {
            "city": "Sydney",
            "region": "sydney",
            "ms": 274.379,
            "icmpReplied": true,
            "fromIp": "82.26.116.36",
            "country": "AU",
            "lat": -33.86785,
            "lon": 151.20732,
            "org": "AS29802 HIVELOCITY, Inc.",
            "postal": "1001",
            "timezone": "Australia/Sydney",
            "measuredAt": "2026-08-03T06:25:50.000Z"
          }
        ]
      },
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946065",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-03T06:20:48.000Z"
          }
        ]
      },
      {
        "identity": "BXAxLMMMUNYfC1z166VjWHR3WjTmqzLxB837o5ghmRtH",
        "epoch": 1011,
        "slot": "436946066",
        "stakeWeight": 819031.365477103,
        "ipAddress": "202.8.10.164",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 5010,
        "rpcAddress": null,
        "version": "4.1.2",
        "featureSet": "3345198602",
        "leaderRegion": "dublin",
        "leaderCity": "Crumlin",
        "leaderCountry": "IE",
        "leaderLat": 53.32154,
        "leaderLon": -6.31439,
        "leaderOrg": "AS20326 TeraSwitch Networks Inc.",
        "leaderTimezone": "Europe/Dublin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 18.438,
            "icmpReplied": true,
            "fromIp": "185.191.118.11",
            "country": "DE",
            "lat": 50.139,
            "lon": 8.6725,
            "org": "AS213896 UAB Cherry Servers",
            "postal": "60320",
            "timezone": "Europe/Berlin",
            "measuredAt": "2026-08-03T06:20:48.000Z"
          }
        ]
      }
    ]
  }
}

响应字段

字段含义
result.success请求是否成功。
result.message可读的状态消息。
result.total返回的 leader slot 记录数量。该 API 目前每次请求返回 100 条记录。
result.data[]从所请求的 slot 开始按顺序排列的 leader slot 记录。
identityLeader validator 的 identity 公钥。
epoch该 slot 所属的 Solana epoch。
slotSlot 编号。以字符串形式返回,因此客户端不应假定它是 JSON 数字。
stakeWeight委托给该 leader validator 的质押量。质押量越大,通常该 validator 在较长时间内出现在 leader 调度中的次数越多。
leaderRegion用于路由与分析的规范化运营区域标签。它可能会把邻近的城市或服务商位置归为一组。
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezone该 leader validator 的估算地理位置与网络组织。
pingToLeaders[]从 ERPC 各观测区域(frankfurt、amsterdam、ny、london、tokyo、singapore、sydney)到该 leader 的参考延迟,包含 region、city、ms、icmpReplied、fromIp、country、坐标、ASN organization、邮政编码、timezone 与 measuredAt。
pingToLeaders[].icmpReplied该 validator 是否回应了本次 ICMP 测量。为 false 时,ms 中是预置的哨兵值而不是延迟实测值,不应按延迟解读。请把 false 理解为「未知」,而不是「距离远」或「不可用」:有些 validator 不回应 ICMP,但 TPU 与 QUIC 仍然正常工作,据此过滤会把健康的 leader 从你的发送路径中剔除。在把 ms 当作延迟使用之前,先检查 icmpReplied:该字段决定这个数字是否可用,而不是决定该向哪个 validator 发送。
pingToLeaders[].measuredAt最近一次测量该延迟的时间,采用 ISO-8601 UTC 格式。可用它判断读数的新鲜程度。各观测区域相互独立地进行测量,因此同一个 pingToLeaders 数组中的各条记录,measuredAt 可能并不相同。measuredAt 较旧并不表示读数有问题:某轮测量未能跑完时,系统会保留已存的数值,而不会用编造的数值覆盖它,因此它依然反映过去确实进行过的一次测量。

可视化 Leader Slot

同一响应可以按 slot 时间线来阅读。下面示例以 Frankfurt 作为观测点。
Slot 范围Leader 区域Leader 位置质押权重来自 Frankfurt 的 ping运营含义
436946064-436946066dublinCrumlin, IE819,031.3718.438 ms一个 leader 连续持有三个 slot。Frankfurt 以 18.4 ms 服务它,但 London(11.0 ms)和 Amsterdam(12.8 ms)更近——在这个窗口中,London 或 Amsterdam 的资源优于 Frankfurt。
436946068frankfurtFrankfurt am Main, DE166,438.250.062 ms同城的 leader。此 slot 明显有利于 Frankfurt 的资源。
这种视图很有用,因为 Solana 是全球性的。传统 HFT 的主要目标往往是靠近某一个撮合引擎,而 Solana 的 leader 会在全球各地的 validator 之间轮换。最快的区域会随着 leader 调度的变化而变化。

Solana 网络数据网站

Validators Solutions - Solana 网络数据
公开的 validator 与网络分布可以通过 Validators Solutions 查看。先用它了解 Solana 网络的整体情况,再使用 getLeaderSlots 获取运营路由所需的 slot 级调度、质押权重、validator 位置与实测延迟数据。

Token 使用量

该 API 从指定 slot 开始返回 100 条 leader slot 记录。每次请求消耗 420 tokens。
如果需要的不是每个 slot 一条记录,而是整个 epoch 中每个 validator 一条记录,请使用 Validators Information API,它按实际返回的 validator 数量计费。

为什么 Leader Slot 信息重要

  • 如果 leader 在地理或网络路径上很远,直接发送交易会变得低效。
  • 质押权重有助于估计某个 validator 在较长时间内出现在 leader 调度中的频率。
  • 在全球范围的 leader 切换期间,区域切换策略比单一的全球平均延迟更重要。
  • 结合 slot 调度、质押权重、leader 位置和实测 ping 数据,可以优化路由和 validator 部署。

背景

一个 Solana epoch 大约包含 432,000 个 slot。持续收集 leader 调度、validator 元数据、地理位置与延迟测量数据需要专用的数据管线。ERPC 维护这些数据,并通过 RPC 接口以可立即使用的 leader slot 地图形式提供。

战略使用场景

  • 检测优化:优先处理附近、低延迟的 leader 窗口。
  • 多区域部署:在 FRA、AMS、NY、TY、SGP 等关键区域部署资源,以缩短切换空档。
  • 考虑质押的规划:使用 stakeWeight 了解在较长时间窗口内哪些 leader 出现得更频繁。
  • 可视化与分析:按区域监控 leader 比例、质押分布与延迟分布。

可用性

getLeaderSlots 对所有 ERPC 用户可用。API token 与使用额度可在 ERPC Web Dashboard 上发行或确认。

交易成功率与 SWQoS 端点

若要进一步提高交易成功率和执行速度,建议使用 SWQoS 端点。SWQoS(Stake-weighted Quality of Service)会优先处理拥有质押连接的 validator。Leader 会将大约 80% 的带宽分配给优先流量,20% 分配给非优先流量,优先通道的吞吐量约为 5 倍。该调度发生在 Priority fee 评估之前,因此进入 SWQoS 优先通道是实现真正低延迟性能的前提。