Validators 信息 API 文档

什么是 Validators 信息(getValidatorsInformation)API?

getValidatorsInformation 是一个扩展 Solana RPC 方法,用于返回当前 epoch 中至少领导一个 slot 的 validator,并把 stake weight、网络端点元数据、估算的 leader 位置与参考延迟测量合并为每个 validator 一条记录。它不会返回网络上所有节点的列表,也不会返回 RPC 节点。持有 ERPC 使用额度(API token)的用户,可以用与标准 Solana RPC 相同的格式调用。
此 API 提供:
  • 当前 epoch 中领导 slot 的每个 validator 一条记录,slotCount 表示它领导的 slot 数量——与每个 slot 一条记录的 getLeaderSlots 不同
  • 每个 leader validator 的 stakeWeight
  • 估算的 leader region、city、country、坐标、ASN organization 与 timezone
  • ERPC 观测 region 到 leader 的参考 ping 测量(pingToLeaders

端点和请求体示例

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
所有参数均为可选;省略 params 或传入 params: [],将返回当前 epoch 中领导 slot 的全部 validator。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
要缩小结果范围,可传入包含 limitcountryregion 的对象。下面的示例请求德国境内最多 5 个 validator,其消耗也低于上面未筛选的请求。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
这三个参数均为可选。country 使用 ISO 3166-1 alpha-2 代码与 leaderCountry 匹配,不区分大小写。regionleaderRegion 做区分大小写的完全匹配——可先发送未筛选的请求,从响应中读取 leaderRegion,以了解目标 validator 的有效取值。limit 接受 1 到 2000,并会收敛为该 epoch 中 validator 的实际数量,因此超过实际数量的 limit 不会报错。

示例(HTTP)

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

响应示例(JSON)

result.total 表示本次请求返回的 validator 数量。下面的 data[] 数组从本 epoch 的 673 条记录中摘录了三条:第一条记录展示了来自 ERPC 全部七个观测 region 的 pingToLeaders,其余记录为便于阅读只保留了一个 region。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "success": true,
    "message": "Validator information retrieved successfully",
    "epoch": 1011,
    "total": 673,
    "totalValidators": 673,
    "data": [
      {
        "identity": "Fd7btgySsrjuo25CJCj7oE7VPMyezDhnx7pZkj2v69Nk",
        "gossipNodeId": 734,
        "slotCount": 16912,
        "stakeWeight": 16803592.923637684,
        "ipAddress": "141.95.45.24",
        "gossipPort": 8001,
        "tpuPort": null,
        "tpuQuicPort": 8022,
        "rpcAddress": null,
        "version": "4.1.1",
        "featureSet": "2220189554",
        "leaderRegion": "frankfurt",
        "leaderCity": "Frankfurt am Main",
        "leaderCountry": "DE",
        "leaderLat": 50.11552,
        "leaderLon": 8.68417,
        "leaderOrg": "AS16276 OVH SAS",
        "leaderTimezone": "Europe/Berlin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 1.374,
            "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": "London",
            "region": "london",
            "ms": 16.174,
            "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": "Ebara",
            "region": "tokyo",
            "ms": 234.25,
            "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": "Amsterdam",
            "region": "amsterdam",
            "ms": 14.072,
            "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": "Newark",
            "region": "ny",
            "ms": 87.983,
            "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": "Singapore",
            "region": "singapore",
            "ms": 221.655,
            "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": "Sydney",
            "region": "sydney",
            "ms": 270.79,
            "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": "HEL1USMZKAL2odpNBj2oCjffnFGaYwmbGmyewGv1e2TU",
        "gossipNodeId": 678,
        "slotCount": 15656,
        "stakeWeight": 16025294.32908543,
        "ipAddress": "207.241.184.11",
        "gossipPort": 8001,
        "tpuPort": null,
        "tpuQuicPort": 8002,
        "rpcAddress": null,
        "version": "4.1.0-rc.1",
        "featureSet": "3345198602",
        "leaderRegion": "london",
        "leaderCity": "London",
        "leaderCountry": "GB",
        "leaderLat": 51.50853,
        "leaderLon": -0.12574,
        "leaderOrg": "AS399460 Helius",
        "leaderTimezone": "Europe/London",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 11.246,
            "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": "JUPiTERrZqgf1jUyR7dSkhMx4Kn2qJyekWsg3LT1h4b",
        "gossipNodeId": 273524,
        "slotCount": 12920,
        "stakeWeight": 12539698.447203109,
        "ipAddress": "88.216.36.133",
        "gossipPort": 8000,
        "tpuPort": null,
        "tpuQuicPort": 9007,
        "rpcAddress": null,
        "version": "4.2.0-rc.0",
        "featureSet": "4119855713",
        "leaderRegion": "frankfurt",
        "leaderCity": "Frankfurt am Main",
        "leaderCountry": "DE",
        "leaderLat": 50.139,
        "leaderLon": 8.6725,
        "leaderOrg": "AS213896 UAB \"Cherry Servers\"",
        "leaderTimezone": "Europe/Berlin",
        "pingToLeaders": [
          {
            "city": "Frankfurt am Main",
            "region": "frankfurt",
            "ms": 0.061,
            "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.epoch所返回 leader 集合所属的 epoch。这是 leader schedule 中最新的 epoch。
result.totaldata 中的 validator 数量。计费依据的就是这个数量。
result.totalValidators应用 countryregionlimit 之前,该 epoch 中的 leader validator 数量。与 result.total 对比即可看出筛选缩小了多少范围。
result.data[]每个 validator 一条记录,按 slotCount 降序排列,其次按 identity 排序,因此设置 limit 时返回的是领导 slot 最多的 validator。
identityValidator identity 公钥。
gossipNodeId与该 validator 关联的 gossip 节点记录的标识符。未关联 gossip 节点时为 null,此时位置、端口与 ping 字段同样为空。没有关联 gossip 节点的 validator 会出现在未筛选的请求中,但无法满足 countryregion 筛选。
slotCount该 validator 在所报告 epoch 中领导的 slot 数量。每条记录对应一个 validator,而不是一个 slot。
stakeWeight该 validator identity 的激活质押量,单位为 SOL。没有关联 gossip 节点的 validator 返回 0
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddress该 validator 的 gossip 网络端点元数据。
version, featureSet该 validator 报告的 Solana 客户端版本与 feature set。
leaderRegion用于路由与分析的规范化运营 region 标签。它可能会把邻近的城市或服务商位置归为一组,也是 region 请求参数所匹配的值。
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezone该 validator 的估算地理位置与网络组织。
pingToLeaders[]从各个 ERPC 观测 region(frankfurtamsterdamnylondontokyosingaporesydney)到该 validator 的参考延迟,包含 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 格式。可用它判断读数的新鲜程度。各观测 region 相互独立地进行测量,因此同一个 pingToLeaders 数组中的各条记录,measuredAt 可能并不相同。measuredAt 较旧并不表示读数有问题:某轮测量未能跑完时,系统会保留已存的数值,而不会用编造的数值覆盖它,因此它依然反映过去确实进行过的一次测量。

可视化 Validator 覆盖

同一响应可以按 epoch 级别的覆盖分布来阅读,而不是按 slot 逐条查询。下面示例以 Frankfurt 作为观测点。
Validator region位置epoch 内 slot 数Stake weight来自 Frankfurt 的 ping运营含义
frankfurtFrankfurt am Main, DE16,91216,803,592.921.374 ms按 slot 数计算本 epoch 最大的 leader,且位于同一 metro。Frankfurt 的资源在整个 epoch 都在服务该 validator,而不只是在某一个 slot 窗口内。
londonLondon, GB15,65616,025,294.3311.246 ms第二大 leader。Frankfurt 的服务尚可,但 London 的资源会把这条路径降到接近同 metro 的延迟。
frankfurtFrankfurt am Main, DE12,92012,539,698.450.061 ms另一个同一 metro 的 leader,slot 数约为第一名的四分之三。同 region 的资源同样能很好地覆盖它。
getLeaderSlots 回答的是接下来的 slot 由哪些 validator 领导,因此适合当下的交易路由;本方法回答的是整个 epoch 中究竟有哪些 validator 领导、各自领导多少次,因此适合决定该 epoch 的资源应当部署在何处。

Solana 网络数据网站

Validators Solutions - Solana network data
网络分布的公开视图可以通过 Validators Solutions 查看,随后使用 getValidatorsInformation 获取每个 validator 的 slot 数量、stake、位置与实测延迟。

Token 使用量

该方法按实际返回的 validator 数量计费,以 10 个为一个计费单位:每 10 个 validator 收取 100 tokens,不足一个单位也按一个完整单位计算。因此返回 95 个 validator 时按 10 个单位计费,即 1,000 tokens。
由于计费依据的是实际返回的数量而不是请求的数量,用 countryregion 缩小范围会按比例减少消耗,没有匹配到任何 validator 的请求则不计费。超过该 epoch 中 validator 数量的 limit 会被收敛为实际数量,因此请求不会为不存在的 validator 付费。
leader 集合的规模会随 epoch 变化。在上面示例的 epoch 中为 673 个 validator,因此完整读取大约需要 6,800 tokens。

为什么 Validator 信息重要

  • 每个 validator 一条记录,可直接回答本 epoch 由谁领导、领导多少,无需在客户端聚合数十万条 slot 记录。
  • slotCount 表明某个 validator 在本 epoch 中出任 leader 的频率,因此通往高 slotCount validator 的短路径会反复带来收益。
  • countryregion 表明该 epoch 的 leader 资源实际位于何处。
  • Ping 结合 measuredAt 可以区分「路径慢」与「读数过时」。

背景

一个 Solana epoch 大约包含 432,000 个 slot。将这些 slot 的 leader 分配按 validator identity 归组之后,会收敛为大约 670 条 validator 记录。ERPC 维护 leader schedule、validator metadata、geolocation 与 latency 采集,并通过 RPC 接口提供结果。

战略使用场景

  • epoch 级容量规划:按当前 epoch 全部 leader validator 的集合来规划基础设施规模,而不是按滚动的 slot 窗口。
  • 区域候选名单:使用 countryregion 提取在目标位置领导 slot 的 validator。
  • 结合 slot 数与 stake 的优先级排序:组合 slotCountstakeWeight,在候选名单内对 validator 排序。
  • 跨 epoch 监控:比较不同 epoch 之间的 leaderRegion 分布,观察 leader 地理分布如何变化。

可用性

getValidatorsInformation 对所有 ERPC 用户可用。API token 与使用额度可在 ERPC Web 仪表盘发行或确认。

交易成功率与 SWQoS Endpoint

若要进一步提高交易成功率和执行速度,建议使用 SWQoS Endpoint。SWQoS(Stake-weighted Quality of Service)会优先处理拥有 stake connection 的 validator。Leader 大约将 80% 带宽分配给 priority traffic,20% 分配给 non-priority traffic,priority lane 约有 5 倍 throughput。该调度发生在 Priority fee 评估之前,因此进入 SWQoS priority lane 是实现真正低延迟性能的前提。