Документация по Validators Information API

Что такое Validators Information API (getValidatorsInformation)?

getValidatorsInformation — это расширенный метод Solana RPC, который возвращает валидаторов, ведущих в текущей эпохе хотя бы один слот, с весом стейка, сетевыми endpoint metadata, предполагаемой локацией leader и справочными измерениями latency, сведёнными в одну строку на валидатора. Он не возвращает список всех узлов сети и не возвращает RPC-узлы. Если у вас есть usage credits ERPC (API tokens), вы можете вызывать его в том же формате, что и стандартный Solana RPC method.
API предоставляет:
  • по одной строке на валидатора, ведущего слот в текущей эпохе, где slotCount показывает, сколько слотов он ведёт, — в отличие от getLeaderSlots, который возвращает по одной строке на слот
  • stakeWeight для каждого leader validator
  • предполагаемые leader region, city, country, coordinates, ASN organization и timezone
  • справочные ping-измерения из observation regions ERPC через pingToLeaders

Пример endpoint и request body

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
Все параметры необязательны; если опустить params или передать params: [], вернутся все валидаторы, ведущие слот в текущей эпохе.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
Чтобы сузить выборку, передайте объект с limit, country и region. В этом примере запрашивается до 5 валидаторов в Германии, что также стоит дешевле, чем неотфильтрованный запрос выше.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
Все три параметра необязательны. country сопоставляется с leaderCountry по кодам ISO 3166-1 alpha-2 без учёта регистра. region сопоставляется с leaderRegion точно и с учётом регистра — посмотрите leaderRegion в неотфильтрованном ответе, чтобы узнать допустимые значения для нужных вам валидаторов. limit принимает значения от 1 до 2000 и приводится к фактическому числу валидаторов в эпохе, поэтому 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":[]
  }'

Пример response (JSON)

result.total показывает, сколько валидаторов вернул этот запрос. Массив data[] ниже сокращён до трёх из 673 записей этой эпохи. Первая запись показывает pingToLeaders из всех семи observation regions ERPC; остальные записи для читаемости урезаны до одного региона.
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"
          }
        ]
      }
    ]
  }
}

Поля response

ПолеЗначение
result.successУспешно ли выполнен запрос.
result.messageЧеловекочитаемый статус запроса.
result.epochЭпоха, к которой относится возвращённый набор лидеров. Это самая свежая эпоха в расписании лидеров.
result.totalКоличество валидаторов в data. Именно по этому числу тарифицируется вызов.
result.totalValidatorsКоличество лидирующих валидаторов в этой эпохе до применения country, region или limit. Сравните с result.total, чтобы увидеть, насколько фильтр сузил выборку.
result.data[]По одной записи на валидатора, по убыванию slotCount, затем по identity, поэтому limit возвращает валидаторов с наибольшим числом слотов.
identityПубличный ключ identity валидатора.
gossipNodeIdИдентификатор gossip-записи, связанной с этим валидатором. Равен null, если gossip-узел не связан; в этом случае поля расположения, портов и ping также пусты. Валидаторы без связанного gossip-узла возвращаются в неотфильтрованном запросе, но не могут совпасть с фильтром country или region.
slotCountКоличество слотов, которые этот валидатор ведёт в указанной эпохе. Каждая запись описывает валидатора, а не слот.
stakeWeightАктивированный стейк identity валидатора в SOL. Валидаторы без связанного gossip-узла возвращают 0.
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddressМетаданные сетевого gossip-endpoint валидатора.
version, featureSetВерсия клиента Solana и feature set, о которых сообщает валидатор.
leaderRegionНормализованная метка операционного региона для routing и анализа. Может объединять близкие города или локации провайдеров; именно с ней сопоставляется параметр запроса region.
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezoneПредполагаемые геолокация и сетевая организация валидатора.
pingToLeaders[]Справочная latency до этого валидатора из каждой observation region ERPC (frankfurt, amsterdam, ny, london, tokyo, singapore, sydney), включая region, city, ms, icmpReplied, fromIp, country, координаты, ASN organization, почтовый индекс, timezone и measuredAt.
pingToLeaders[].icmpRepliedОтветил ли валидатор на измерение по ICMP. Если значение false, в ms стоит сохранённый sentinel, а не latency, и читать его как latency нельзя. Считайте false признаком «неизвестно», а не «далеко» или «непригоден»: часть валидаторов не отвечает на ICMP, но при этом штатно обслуживает TPU и QUIC, и их отсев может убрать здорового лидера из вашего пути отправки. Проверьте icmpReplied, прежде чем считать ms задержкой: это поле решает, пригодно ли число, а не то, какому валидатору отправлять.
pingToLeaders[].measuredAtВремя последнего измерения latency в UTC, ISO-8601. По нему судят, насколько свежо значение. Каждая observation region измеряет независимо, поэтому записи в одном и том же массиве pingToLeaders могут иметь разные measuredAt. Более старый measuredAt не означает испорченное значение: если прогон измерения не доходит до конца, сохранённое значение остаётся на месте и не перезаписывается выдуманным, так что оно по-прежнему отражает реально выполненное измерение.

Визуализация покрытия валидаторами

Тот же response можно читать как карту покрытия на уровне эпохи, а не как послотовый поиск. В примере ниже точкой наблюдения является Frankfurt.
Регион валидатораЛокацияСлотов в эпохеStake weightPing из FrankfurtОперационный вывод
frankfurtFrankfurt am Main, DE16,91216,803,592.921.374 msКрупнейший leader эпохи по числу слотов, в том же metro. Мощности во Frankfurt обслуживают этого валидатора всю эпоху, а не только в одном слотовом окне.
londonLondon, GB15,65616,025,294.3311.246 msВторой по величине leader. Frankfurt обслуживает его приемлемо, но мощности в London снизили бы latency этого пути почти до уровня одного metro.
frankfurtFrankfurt am Main, DE12,92012,539,698.450.061 msЕщё один leader в том же metro, примерно с тремя четвертями слотов первой записи. Мощности той же region покрывают его так же хорошо.
getLeaderSlots отвечает на вопрос, какие валидаторы ведут ближайшие слоты, и поэтому подходит для маршрутизации транзакции прямо сейчас; этот метод отвечает на вопрос, какие валидаторы вообще ведут эпоху и как часто, и поэтому подходит для решения, где на эту эпоху должны находиться мощности.

Сайт данных сети Solana

Validators Solutions - Solana network data
Используйте Validators Solutions для публичного обзора распределения сети, а getValidatorsInformation — для числа слотов, стейка, локации и измеренной latency по каждому валидатору.

Использование tokens

Этот метод тарифицируется по числу возвращённых валидаторов единицами по 10: каждые 10 валидаторов стоят 100 токенов, а неполная единица считается полной. Ответ на 95 валидаторов поэтому оплачивается как 10 единиц, то есть 1 000 токенов.
Поскольку начисление следует за тем, что возвращено, а не за тем, что запрошено, выборка, суженная через country или region, стоит пропорционально меньше, а запрос, под который не подошёл ни один валидатор, не стоит ничего. limit больше числа валидаторов в эпохе приводится к реальному числу, поэтому запрос никогда не платит за несуществующих валидаторов.
Размер набора лидеров меняется от эпохи к эпохе. В показанной выше эпохе это было 673 валидатора, поэтому полное чтение обходится примерно в 6 800 токенов.

Почему информация о валидаторах важна

  • Одна строка на валидатора отвечает, кто ведёт эту эпоху и сколько, без агрегации сотен тысяч слотовых строк на клиенте.
  • slotCount показывает, как часто валидатор является лидером в этой эпохе, поэтому короткий путь до валидатора с высоким slotCount окупается многократно.
  • country и region показывают, где на самом деле сосредоточены лидерские мощности эпохи.
  • Ping вместе с measuredAt отделяет медленный путь от устаревшего измерения.

Контекст

Одна Solana epoch состоит примерно из 432 000 slots. Если сгруппировать назначения лидеров для этих слотов по identity валидатора, они сворачиваются примерно в 670 строк валидаторов. ERPC поддерживает leader schedule, validator metadata, geolocation и сбор latency и предоставляет результат через RPC-интерфейс.

Стратегические сценарии

  • Планирование мощностей на уровне эпохи: рассчитывайте инфраструктуру по полному набору валидаторов, ведущих текущую эпоху, а не по скользящему слотовому окну.
  • Региональные шорт-листы: используйте country и region, чтобы получить валидаторов, ведущих слоты в нужной локации.
  • Приоритизация по числу слотов и стейку: сочетайте slotCount и stakeWeight, чтобы ранжировать валидаторов внутри шорт-листа.
  • Мониторинг между эпохами: сравнивайте распределение leaderRegion между эпохами, чтобы видеть, как смещается география лидеров.

Доступность

getValidatorsInformation доступен всем пользователям ERPC. API tokens и usage credits можно выпустить или проверить в ERPC Web Dashboard.

Успешность транзакций и SWQoS Endpoint

Чтобы дополнительно повысить успешность транзакций и скорость исполнения, мы рекомендуем использовать SWQoS Endpoint. SWQoS (Stake-weighted Quality of Service) приоритизирует validators со stake connections. Leaders выделяют примерно 80% bandwidth для priority traffic и 20% для non-priority traffic; priority lane дает около 5x throughput. Эта scheduling происходит до оценки Priority fee, поэтому попадание в SWQoS priority lane является предпосылкой настоящей low-latency performance.