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
slotCountche indica quanti slot guida — a differenza digetLeaderSlots, che restituisce una riga per slot stakeWeightper 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>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": []
}{
"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" }]
}{
"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":[]
}'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"
}
]
}
]
}
}{
"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
| Campo | Significato |
|---|---|
result.success | Indica se la richiesta è andata a buon fine. |
result.message | Messaggio di stato leggibile. |
result.epoch | L'epoch a cui appartiene il set di leader restituito. È l'epoch più recente presente nello schedule dei leader. |
result.total | Numero di validator in data. È la quantità su cui viene addebitata la chiamata. |
result.totalValidators | Numero 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. |
identity | Chiave pubblica di identità del validator. |
gossipNodeId | Identificatore 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. |
slotCount | Numero di slot che questo validator guida nell'epoch riportata. Ogni voce riguarda un validator, non uno slot. |
stakeWeight | Stake attivato dell'identità del validator, in SOL. I validator senza un nodo gossip collegato riportano 0. |
ipAddress, gossipPort, tpuPort, tpuQuicPort, rpcAddress | Metadati degli endpoint di rete gossip del validator. |
version, featureSet | Versione del client Solana e feature set riportati dal validator. |
leaderRegion | Etichetta 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, leaderTimezone | Geolocalizzazione 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[].icmpReplied | Indica 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[].measuredAt | Indica 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 validator | Posizione | Slot nell'epoch | Peso dello stake | Ping da Francoforte | Lettura operativa |
|---|---|---|---|---|---|
| frankfurt | Frankfurt am Main, DE | 16,912 | 16,803,592.92 | 1.374 ms | Il 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. |
| london | London, GB | 15,656 | 16,025,294.33 | 11.246 ms | Il secondo leader più grande. Francoforte lo serve adeguatamente, ma la capacità di Londra porterebbe questo percorso a una latenza quasi metropolitana. |
| frankfurt | Frankfurt am Main, DE | 12,920 | 12,539,698.45 | 0.061 ms | Un 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
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.
slotCountmostra con quale frequenza un validator è leader in questa epoch, quindi un percorso breve verso un validator conslotCountelevato ripaga ripetutamente.countryeregionmostrano dove si trova effettivamente la capacità dei leader dell'epoch.- Il ping combinato con
measuredAtdistingue 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
countryeregionper estrarre i validator che guidano slot in una località target. - Prioritizzazione basata su conteggio degli slot e stake: combina
slotCountestakeWeightper classificare i validator all'interno di una shortlist. - Monitoraggio tra epoch: confronta la distribuzione di
leaderRegiontra 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.- ERPC Web Dashboard: 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.







