バリデータ情報 API ドキュメント

バリデータ情報 (getValidatorsInformation) API とは

getValidatorsInformation は、現在のエポックでリーダースロットを 1 つ以上持つバリデータを、ステーク量、ネットワークエンドポイント情報、推定リーダー位置、参考レイテンシ計測とあわせて、バリデータ 1 台につき 1 行で返す Solana 拡張 RPC メソッドです。ネットワーク上の全ノードの一覧を返すわけではなく、RPC ノードも返しません。ERPC の利用クレジット(API トークン)をお持ちの方は、通常の Solana RPC と同じ形式で呼び出せます。
取得できる主な情報:
  • 現在のエポックでスロットをリードするバリデータ 1 台につき 1 行。slotCount が担当するスロット数を示します — スロット 1 つにつき 1 行を返す getLeaderSlots とは異なります
  • 各リーダーバリデータの stakeWeight
  • 推定リーダーリージョン、都市、国、緯度経度、ASN 組織、タイムゾーン
  • ERPC の観測リージョンからリーダーへの参考 ping 計測(pingToLeaders

エンドポイントとリクエストボディ例

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
パラメータはすべて任意です。params を省略するか params: [] を渡すと、現在のエポックでスロットをリードするすべてのバリデータが返ります。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
結果を絞り込むには、limitcountryregion を持つオブジェクトを渡します。次の例はドイツ国内のバリデータを最大 5 台まで要求するもので、上のフィルタなしのリクエストより費用も下がります。
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
3 つのパラメータはいずれも任意です。country は ISO 3166-1 alpha-2 の国コードで leaderCountry と照合し、大文字小文字は区別しません。regionleaderRegion と完全一致で照合し、大文字小文字を区別します — 対象のバリデータで使える値は、フィルタなしのレスポンスの 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":[]
  }'

レスポンス例(JSON)

result.total は、このリクエストで返したバリデータ数です。以下の data[] 配列は、このエポックの 673 件のうち 3 件に省略しています。最初のエントリは ERPC の観測リージョン 7 か所すべてからの pingToLeaders を示し、残りのエントリは読みやすさのため 1 リージョンに絞っています。
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返されたリーダー集合が属するエポック。リーダースケジュールに存在する最新のエポックです。
result.totaldata に含まれるバリデータ数。価格は要求した数ではなく、この数から計算されます。
result.totalValidatorscountryregionlimit を適用する前の、そのエポックのリーダーバリデータ数。result.total と比べると、フィルタでどれだけ絞られたかが分かります。
result.data[]バリデータ 1 台につき 1 エントリ。slotCount の降順、同数なら identity 順に並ぶため、limit を指定するとリーダースロットの多いバリデータから返ります。
identityバリデータの identity public key。
gossipNodeIdこのバリデータに紐づく gossip ノードレコードの識別子。紐づく gossip ノードがない場合は null で、そのときは位置・ポート・ping のフィールドも空になります。gossip ノードが紐づいていないバリデータは、フィルタなしのリクエストでは返りますが、countryregion のフィルタには一致しません。
slotCountこのエポックでこのバリデータが担当するリーダースロット数。各エントリはスロット単位ではなくバリデータ単位です。
stakeWeightこのバリデータ identity のアクティブステーク量(SOL 単位)。gossip ノードが紐づいていないバリデータは 0 を返します。
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddressバリデータの gossip ネットワークエンドポイント情報。
version, featureSetバリデータが報告する Solana クライアントバージョンと feature set。
leaderRegionルーティングや分析に使う正規化済みリージョン名。近い都市やプロバイダ拠点をまとめる場合があり、リクエストパラメータ region が照合する値です。
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezoneバリデータの推定地理情報とネットワーク組織。
pingToLeaders[]ERPC の各測定元からこのバリデータへの参考レイテンシ。region、city、ms、icmpReplied、fromIp、国、緯度経度、ASN 組織、郵便番号、タイムゾーン、measuredAt を含みます。region は frankfurtamsterdamnylondontokyosingaporesydney のいずれかです。
pingToLeaders[].icmpRepliedバリデータが ICMP の計測に応答したかどうか。false のとき ms はレイテンシではなく保存されたセンチネル値です。false は応答が無かったことを示すだけで、「遠い」「避けるべき」という意味ではありません。ICMP には応答しないものの TPU/QUIC では正常に機能しているバリデータもあり、この値だけで送信対象を絞ると、健全なリーダーを送信経路から落としてしまうことがあります。ms を読む前に icmpReplied を確認してください。
pingToLeaders[].measuredAtレイテンシを最後に計測した時刻(UTC・ISO-8601)。その計測値がどれだけ新しいかの判断に使います。計測は観測リージョンごとに独立して行われるため、同じ pingToLeaders 配列の中でも measuredAt はエントリごとに異なることがあります。完了しなかった更新は、実測していない値で上書きせず前回の実測値をそのまま残すため、古い measuredAt も、実際に計測が行われた時刻です。

バリデータのカバレッジを視覚的に見る

同じレスポンスは、スロットごとの参照ではなく、エポック単位のカバレッジマップとして見ることもできます。以下はフランクフルトを観測地点にした例です。
バリデータリージョン位置エポック内スロット数ステーク量Frankfurt からの ping読み取り方
frankfurtFrankfurt am Main, DE16,91216,803,592.921.374 msエポックでスロット数が最も多いリーダーで、同一メトロ。Frankfurt の設備は 1 つのスロットウィンドウだけでなく、エポック全体を通してこのバリデータに効きます。
londonLondon, GB15,65616,025,294.3311.246 ms2 番目にスロット数の多いリーダー。Frankfurt からでも十分届くが、London の拠点ならこの経路をほぼメトロ内並みのレイテンシに下げられる。
frankfurtFrankfurt am Main, DE12,92012,539,698.450.061 msトップの約 4 分の 3 のスロット数を持つ、もう 1 つの同一メトロのリーダー。同一リージョンの拠点で同じようにカバーできる。
getLeaderSlots は「次のスロットを誰がリードするか」に答えるため、いま送るトランザクションのルーティングに向いています。本メソッドは「そのエポックでリードするのは誰で、どれだけの頻度か」に答えるため、そのエポックのあいだ設備をどこに置くかの判断に向いています。

Solana ネットワークデータサイト

Validators Solutions - Solana ネットワークデータ
ネットワーク分布の公開情報は Validators Solutions で確認し、バリデータ単位のスロット数、ステーク量、位置、実測レイテンシには getValidatorsInformation を使います。

トークン使用量

このメソッドは、返したバリデータ数に応じて 10 台単位で課金されます。バリデータ 10 台につき 100 トークンで、端数は 1 単位として数えます。したがってバリデータ 95 台のレスポンスは 10 単位、つまり 1,000 トークンとして課金されます。
課金は要求した内容ではなく実際に返した内容に従うため、countryregion で絞り込むとその分だけ費用も下がり、1 台も一致しないリクエストは課金されません。エポックのバリデータ数を超える limit は実際の数にクランプされるため、存在しないバリデータの分を支払うことはありません。
リーダー集合の規模はエポックごとに変わります。上の例のエポックでは 673 台だったため、全台の取得はおおよそ 6,800 トークンになります。

なぜバリデータ情報が重要か

  • バリデータ 1 台につき 1 行なので、数十万件のスロット行をクライアント側で集計しなくても、このエポックで誰がどれだけリードするのかが分かります。
  • slotCount はこのエポックでそのバリデータがリーダーになる頻度を示すため、slotCount の大きいバリデータへの短い経路は繰り返し効いてきます。
  • countryregion から、そのエポックのリーダー能力が実際にどこにあるのかが分かります。
  • ping と measuredAt を組み合わせると、遅い経路と古い計測値を切り分けられます。

背景

Solana の 1 エポックは約 432,000 スロットです。それらのスロットのリーダー割り当てをバリデータ identity ごとにまとめると、およそ 670 行のバリデータに集約されます。ERPC ではリーダースケジュール、バリデータメタデータ、地理情報、レイテンシ計測を整備し、その結果を RPC 経由で提供しています。

戦略的活用例

  • エポック単位のキャパシティプランニング: 直近のスロットウィンドウではなく、現在のエポックでリードするバリデータ全体に対して設備規模を決める。
  • リージョン別の候補抽出: countryregion で、対象地域でスロットをリードしているバリデータを絞り込む。
  • スロット数とステーク量を考慮した優先順位付け: slotCountstakeWeight を組み合わせて、候補内のバリデータを順位付けする。
  • エポック間のモニタリング: エポック間で leaderRegion の分布を比較し、リーダーの地理的な偏りがどう動くかを見る。

利用条件

getValidatorsInformation は ERPC の全ユーザーが利用可能です。API トークン(利用クレジット)は ERPC Web ダッシュボードで発行・確認できます。

トランザクション成功率と SWQoS エンドポイント

トランザクションの成功率と実行速度をさらに高めるには、SWQoS エンドポイントの利用をおすすめします。SWQoS(Stake-weighted Quality of Service)は、ステーク接続を持つバリデータを優先する仕組みです。リーダーは帯域の約 80% を優先帯域、約 20% を非優先帯域に割り当て、優先帯域は非優先の約 5 倍の throughput を持ちます。このスケジューリングは Priority fee の評価より前に適用されるため、まず SWQoS の優先レーンに乗ることが低レイテンシ処理の前提になります。