Documentazione della Validators Information API

Che cos'è la Validators Information (getValidatorsInformation) API?

getValidatorsInformation è un metodo RPC esteso di Solana che restituisce i validator che guidano almeno uno slot nell'epoch corrente, con peso dello stake, metadati degli endpoint di rete, posizione stimata del leader e misurazioni di latenza di riferimento riunite in una riga per validator. Non restituisce l'elenco di tutti i nodi della rete e non restituisce i nodi RPC. Se disponi di crediti di utilizzo ERPC (token API), puoi chiamarlo nello stesso formato di un metodo RPC standard di Solana.
Questa API fornisce:
  • Una riga per ogni validator che guida uno slot nell'epoch corrente, con slotCount che indica quanti slot guida — a differenza di getLeaderSlots, che restituisce una riga per slot
  • stakeWeight per ogni validator leader
  • Regione, città, paese, coordinate, organizzazione ASN e fuso orario stimati del leader
  • Misurazioni ping di riferimento dalle regioni di osservazione di ERPC tramite pingToLeaders

Esempio di endpoint e corpo della richiesta

text
https://edge.erpc.global?api-key=<YOUR_API_KEY>
Tutti i parametri sono opzionali; omettendo params, o passando params: [], vengono restituiti tutti i validator che guidano uno slot nell'epoch corrente.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": []
}
Per restringere il risultato, passa un oggetto con limit, country e region. Questo esempio richiede fino a 5 validator in Germania, e costa anche meno della richiesta non filtrata qui sopra.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getValidatorsInformation",
  "params": [{ "limit": 5, "country": "DE" }]
}
Tutti e tre i parametri sono opzionali. country viene confrontato con leaderCountry usando i codici ISO 3166-1 alpha-2, senza distinzione tra maiuscole e minuscole. region viene confrontato con leaderRegion in modo esatto e con distinzione tra maiuscole e minuscole — leggi leaderRegion da una risposta non filtrata per conoscere i valori validi per i validator che ti interessano. limit accetta valori da 1 a 2000 e viene riportato al numero effettivo di validator nell'epoch, quindi un limit superiore al conteggio reale non genera mai un errore.

Esempio (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":[]
  }'

Esempio di risposta (JSON)

result.total indica quanti validator sono stati restituiti da questa richiesta. L'array data[] qui sotto è abbreviato a tre delle 673 voci di questa epoch. La prima voce mostra pingToLeaders da tutte e sette le regioni di osservazione di ERPC; le voci restanti sono ridotte a una regione per leggibilità.
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"
          }
        ]
      }
    ]
  }
}

Campi della risposta

CampoSignificato
result.successIndica se la richiesta è andata a buon fine.
result.messageMessaggio di stato leggibile.
result.epochL'epoch a cui appartiene il set di leader restituito. È l'epoch più recente presente nello schedule dei leader.
result.totalNumero di validator in data. È la quantità su cui viene addebitata la chiamata.
result.totalValidatorsNumero di validator leader in quell'epoch prima dell'applicazione di country, region o limit. Confrontalo con result.total per vedere quanto un filtro ha ristretto il set.
result.data[]Una voce per validator, ordinata per slotCount decrescente e poi per identity, così un limit restituisce i validator che guidano il maggior numero di slot.
identityChiave pubblica di identità del validator.
gossipNodeIdIdentificatore del record del nodo gossip collegato a questo validator. È null quando nessun nodo gossip è collegato; in tal caso anche i campi di posizione, porta e ping sono vuoti. I validator senza un nodo gossip collegato vengono restituiti in una richiesta non filtrata, ma non possono corrispondere a un filtro country o region.
slotCountNumero di slot che questo validator guida nell'epoch riportata. Ogni voce riguarda un validator, non uno slot.
stakeWeightStake attivato dell'identità del validator, in SOL. I validator senza un nodo gossip collegato riportano 0.
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddressMetadati degli endpoint di rete gossip del validator.
version, featureSetVersione del client Solana e feature set riportati dal validator.
leaderRegionEtichetta normalizzata della regione operativa usata per routing e analisi. Può raggruppare città vicine o sedi di provider, ed è il valore con cui viene confrontato il parametro di richiesta region.
leaderCity, leaderCountry, leaderLat, leaderLon, leaderOrg, leaderTimezoneGeolocalizzazione stimata e organizzazione di rete del validator.
pingToLeaders[]Latenza di riferimento verso questo validator da ciascuna regione di osservazione di ERPC (frankfurt, amsterdam, ny, london, tokyo, singapore, sydney), con region, city, ms, icmpReplied, fromIp, country, coordinate, organizzazione ASN, codice postale, timezone e measuredAt.
pingToLeaders[].icmpRepliedIndica se il validator ha risposto alla misurazione. Quando è false, ms contiene un valore sentinella memorizzato anziché una latenza e non va letto come tale; tratta false come valore sconosciuto, non come distante o inutilizzabile, poiché alcuni validator che non rispondono a ICMP servono comunque TPU e QUIC normalmente, ed escluderli può eliminare un leader sano dal tuo percorso di invio. Controlla icmpReplied prima di considerare ms una latenza: determina se il numero è utilizzabile, non a quale validator inviare.
pingToLeaders[].measuredAtIndica quando la latenza è stata misurata l'ultima volta, in ISO-8601 UTC. Usalo per giudicare quanto è aggiornata una lettura. Ogni regione di osservazione misura in modo indipendente, quindi le voci nello stesso array pingToLeaders possono avere valori measuredAt diversi. Un measuredAt più vecchio non è una lettura errata: quando un ciclo di misurazione non viene completato, il valore memorizzato viene lasciato al suo posto anziché sovrascritto con uno fittizio, quindi riflette comunque una misurazione passata reale.

Visualizzare la copertura dei validator

La stessa risposta può essere letta come una mappa di copertura a livello di epoch invece che come una consultazione slot per slot. Questo esempio usa Francoforte come punto di osservazione.
Regione del validatorPosizioneSlot nell'epochPeso dello stakePing da FrancoforteLettura operativa
frankfurtFrankfurt am Main, DE16,91216,803,592.921.374 msIl leader più grande dell'epoch per numero di slot, nella stessa area metropolitana. La capacità di Francoforte serve questo validator per tutta l'epoch, non solo durante una finestra di slot.
londonLondon, GB15,65616,025,294.3311.246 msIl secondo leader più grande. Francoforte lo serve adeguatamente, ma la capacità di Londra porterebbe questo percorso a una latenza quasi metropolitana.
frankfurtFrankfurt am Main, DE12,92012,539,698.450.061 msUn altro leader nella stessa area metropolitana, con circa tre quarti degli slot della prima voce. La capacità nella stessa regione lo copre altrettanto bene.
getLeaderSlots risponde alla domanda su quali validator guidano i prossimi slot, quindi è adatto a instradare una transazione adesso; questo metodo risponde alla domanda su quali validator guidano l'epoch in generale e con quale frequenza, quindi è adatto a decidere dove posizionare la capacità per l'epoch.

Sito web dei dati della rete Solana

Validators Solutions - Dati della rete Solana
Usa Validators Solutions per la vista pubblica della distribuzione della rete, quindi usa getValidatorsInformation per il conteggio degli slot per validator, lo stake, la posizione e la latenza misurata.

Consumo di token

Questo metodo viene addebitato in base al numero di validator restituiti, in unità di 10: ogni 10 validator costano 100 token, e un'unità parziale conta come intera. Una risposta di 95 validator viene quindi addebitata come 10 unità, ovvero 1,000 token.
Poiché l'addebito segue ciò che viene restituito e non ciò che viene richiesto, restringere il set con country o region costa proporzionalmente meno, e una richiesta che non corrisponde ad alcun validator non costa nulla. Un limit superiore al numero di validator nell'epoch viene riportato al conteggio reale, quindi una richiesta non paga mai per validator inesistenti.
La dimensione del set di leader cambia da un'epoch all'altra. Nell'epoch mostrata sopra era di 673 validator, il che porta una lettura completa a circa 6,800 token.

Perché le informazioni sui validator sono importanti

  • Una riga per validator risponde alla domanda su chi guida questa epoch e quanto, senza aggregare centinaia di migliaia di righe di slot lato client.
  • slotCount mostra con quale frequenza un validator è leader in questa epoch, quindi un percorso breve verso un validator con slotCount elevato ripaga ripetutamente.
  • country e region mostrano dove si trova effettivamente la capacità dei leader dell'epoch.
  • Il ping combinato con measuredAt distingue un percorso lento da una lettura obsoleta.

Contesto

Un'epoch di Solana è composta da circa 432,000 slot. Una volta che le assegnazioni dei leader per quegli slot vengono raggruppate per identità del validator, si riducono a circa 670 righe di validator. ERPC mantiene lo schedule dei leader, i metadati dei validator, la geolocalizzazione e la raccolta delle latenze, ed espone il risultato tramite l'interfaccia RPC.

Casi d'uso strategici

  • Pianificazione della capacità a livello di epoch: dimensiona l'infrastruttura sull'intero set di validator che guidano l'epoch corrente, non su una finestra mobile di slot.
  • Shortlist regionali: usa country e region per estrarre i validator che guidano slot in una località target.
  • Prioritizzazione basata su conteggio degli slot e stake: combina slotCount e stakeWeight per classificare i validator all'interno di una shortlist.
  • Monitoraggio tra epoch: confronta la distribuzione di leaderRegion tra le epoch per vedere come si sposta la geografia dei leader.

Disponibilità

getValidatorsInformation è disponibile per tutti gli utenti ERPC. I token API e i crediti di utilizzo possono essere emessi o verificati sulla ERPC Web Dashboard.

Tasso di successo delle transazioni e SWQoS Endpoint

Per migliorare ulteriormente il tasso di successo delle transazioni e la velocità di esecuzione, consigliamo di utilizzare lo SWQoS Endpoint. SWQoS (Stake-weighted Quality of Service) dà priorità ai validator con connessioni di stake. I leader allocano circa l'80% della banda al traffico prioritario e il 20% al traffico non prioritario, con la corsia prioritaria che offre un throughput circa 5 volte superiore. Questa pianificazione avviene prima della valutazione della Priority fee, il che significa che entrare nella corsia prioritaria di SWQoS è il prerequisito per prestazioni a bassa latenza reali.