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>https://edge.erpc.global?api-key=<YOUR_API_KEY>所有参数均为可选;省略
params 或传入 params: [],将返回当前 epoch 中领导 slot 的全部 validator。json
{
"jsonrpc": "2.0",
"id": 1,
"method": "getValidatorsInformation",
"params": []
}{
"jsonrpc": "2.0",
"id": 1,
"method": "getValidatorsInformation",
"params": []
}要缩小结果范围,可传入包含
limit、country 与 region 的对象。下面的示例请求德国境内最多 5 个 validator,其消耗也低于上面未筛选的请求。json
{
"jsonrpc": "2.0",
"id": 1,
"method": "getValidatorsInformation",
"params": [{ "limit": 5, "country": "DE" }]
}{
"jsonrpc": "2.0",
"id": 1,
"method": "getValidatorsInformation",
"params": [{ "limit": 5, "country": "DE" }]
}这三个参数均为可选。
country 使用 ISO 3166-1 alpha-2 代码与 leaderCountry 匹配,不区分大小写。region 与 leaderRegion 做区分大小写的完全匹配——可先发送未筛选的请求,从响应中读取 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":[]
}'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"
}
]
}
]
}
}{
"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.total | data 中的 validator 数量。计费依据的就是这个数量。 |
result.totalValidators | 应用 country、region 或 limit 之前,该 epoch 中的 leader validator 数量。与 result.total 对比即可看出筛选缩小了多少范围。 |
result.data[] | 每个 validator 一条记录,按 slotCount 降序排列,其次按 identity 排序,因此设置 limit 时返回的是领导 slot 最多的 validator。 |
identity | Validator identity 公钥。 |
gossipNodeId | 与该 validator 关联的 gossip 节点记录的标识符。未关联 gossip 节点时为 null,此时位置、端口与 ping 字段同样为空。没有关联 gossip 节点的 validator 会出现在未筛选的请求中,但无法满足 country 或 region 筛选。 |
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(frankfurt、amsterdam、ny、london、tokyo、singapore、sydney)到该 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 | 运营含义 |
|---|---|---|---|---|---|
| frankfurt | Frankfurt am Main, DE | 16,912 | 16,803,592.92 | 1.374 ms | 按 slot 数计算本 epoch 最大的 leader,且位于同一 metro。Frankfurt 的资源在整个 epoch 都在服务该 validator,而不只是在某一个 slot 窗口内。 |
| london | London, GB | 15,656 | 16,025,294.33 | 11.246 ms | 第二大 leader。Frankfurt 的服务尚可,但 London 的资源会把这条路径降到接近同 metro 的延迟。 |
| frankfurt | Frankfurt am Main, DE | 12,920 | 12,539,698.45 | 0.061 ms | 另一个同一 metro 的 leader,slot 数约为第一名的四分之三。同 region 的资源同样能很好地覆盖它。 |
getLeaderSlots 回答的是接下来的 slot 由哪些 validator 领导,因此适合当下的交易路由;本方法回答的是整个 epoch 中究竟有哪些 validator 领导、各自领导多少次,因此适合决定该 epoch 的资源应当部署在何处。
Solana 网络数据网站
网络分布的公开视图可以通过 Validators Solutions 查看,随后使用
getValidatorsInformation 获取每个 validator 的 slot 数量、stake、位置与实测延迟。Token 使用量
该方法按实际返回的 validator 数量计费,以 10 个为一个计费单位:每 10 个 validator 收取 100 tokens,不足一个单位也按一个完整单位计算。因此返回 95 个 validator 时按 10 个单位计费,即 1,000 tokens。
由于计费依据的是实际返回的数量而不是请求的数量,用
country 或 region 缩小范围会按比例减少消耗,没有匹配到任何 validator 的请求则不计费。超过该 epoch 中 validator 数量的 limit 会被收敛为实际数量,因此请求不会为不存在的 validator 付费。leader 集合的规模会随 epoch 变化。在上面示例的 epoch 中为 673 个 validator,因此完整读取大约需要 6,800 tokens。
为什么 Validator 信息重要
- 每个 validator 一条记录,可直接回答本 epoch 由谁领导、领导多少,无需在客户端聚合数十万条 slot 记录。
slotCount表明某个 validator 在本 epoch 中出任 leader 的频率,因此通往高slotCountvalidator 的短路径会反复带来收益。country与region表明该 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 窗口。
- 区域候选名单:使用
country与region提取在目标位置领导 slot 的 validator。 - 结合 slot 数与 stake 的优先级排序:组合
slotCount与stakeWeight,在候选名单内对 validator 排序。 - 跨 epoch 监控:比较不同 epoch 之间的
leaderRegion分布,观察 leader 地理分布如何变化。
可用性
getValidatorsInformation 对所有 ERPC 用户可用。API token 与使用额度可在 ERPC Web 仪表盘发行或确认。- ERPC Web 仪表盘: 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 是实现真正低延迟性能的前提。







