FAQ - Stream Geyser gRPC
Q. In quali regioni si trovano i vostri nodi?
Attualmente operiamo nodi nelle seguenti regioni:
- Francoforte (FRA)
- Amsterdam (AMS)
- Londra (LON)
- New York (NY)
- Tokyo (TY)
- Singapore (SGP)
- Sydney (SYD)
ERPC misura la latenza di rete effettiva in base ai percorsi di routing reali, selezionando automaticamente la regione con la latenza più bassa anziché affidarsi alla distanza in linea d’aria. Questo approccio non solo migliora la latenza per i singoli utenti, ma aumenta anche l’efficienza complessiva della rete e rafforza la resilienza globale di ERPC contro potenziali attacchi.
Se il tuo ambiente non seleziona automaticamente la regione ottimale, contattaci tramite la ERPC Web Dashboard.
ERPC Web Dashboard: https://dashboard.erpc.global/it
Q. La latenza mostra 9999ms e viene selezionata una regione non ottimale. Cosa devo fare?
Per la selezione della regione gRPC, ERPC invia sonde di latenza ICMP al tuo IP registrato dagli host proxy elencati di seguito. Consenti le richieste ICMP echo in entrata da tutti gli IP di origine elencati. Se sono bloccati da un firewall (ufw, cloud firewall, security group, ecc.), la misurazione può diventare
9999ms e potrebbe essere selezionata una regione non ottimale. Più IP in una regione sono host sonda separati; sono tutti necessari.| Regione sonda | IP di origine ICMP |
|---|---|
| 🇳🇱 Amsterdam | 82.21.43.34, 151.244.92.36 |
| 🇺🇸 New York | 151.243.244.5 |
| 🇩🇪 Frankfurt | 151.241.178.20, 151.241.178.34, 151.241.178.21 |
| 🇬🇧 London | 151.241.65.4 |
| 🇯🇵 Tokyo | 143.20.238.66 |
| 🇸🇬 Singapore | 151.245.186.2 |
| 🛰️ Far Point | 143.20.238.73 |
Q. Ho inserito il mio IP nell’allowlist, ma non riesco ancora a connettermi. Cosa devo controllare?
Usa l’endpoint HTTPS crittografato selezionato nella Dashboard. HTTPS usa la porta 443; HTTP sulla porta 80 resta l’opzione non crittografata a bassa latenza.
Entrambi i trasporti usano la stessa allowlist degli IP registrati. Usa l’endpoint selezionato nella Dashboard: HTTPS sulla 443 o HTTP sulla 80.
- Endpoint HTTPS: usa l’endpoint selezionato nella Dashboard sulla porta 443.
- Endpoint HTTP: usa l’endpoint selezionato nella Dashboard sulla porta 80.
- Usa l’URL mostrato nella Dashboard con
https://ohttp://.
L’autenticazione si basa sul tuo indirizzo IP registrato. Non aggiungere header
x-token, token o Authorization, a meno che una pagina di prodotto specifica non lo indichi esplicitamente.Q. Ho usato solo WebSocket finora. Posso usare gRPC? Avete degli esempi?
Sì. Puoi testare rapidamente e iniziare a sviluppare con gRPC usando SLV.
Per un endpoint condiviso che puoi testare senza token, esegui:
bash
slv check grpc --endpoint <YOUR_ENDPOINT> --token noneslv check grpc --endpoint <YOUR_ENDPOINT> --token noneConsulta la nostra Guida rapida gRPC per i dettagli.
Q. Posso registrare due indirizzi IP?
Puoi usare un endpoint per abbonamento. Se desideri usare due indirizzi IP, devi sottoscrivere due abbonamenti separati.
Q. Ci sono limiti sui filtri?
Geyser gRPC Shared applica protezioni di fair use affinché uno stream non consumi le risorse necessarie agli altri clienti ERPC. Con la regola Shared attuale, ogni mappa
blocks non vuota viene rifiutata, anche una richiesta di blocchi ristretta. Ogni filtro account deve includere account, owner o un filtro cuckoo supportato; memcmp o dataSize da soli non bastano.Rimuovi una forma rifiutata e sottoscrivi solo i dati necessari alla tua applicazione. Una sottoscrizione alle transazioni o i metadati dei blocchi possono soddisfare l’esigenza senza trasportare un blocco completo. Geyser gRPC Dedicated è adatto quando un carico legittimo supera il limite di forma o risorse di Shared; non rende validi parametri non validi né ripara un client lento.
Q. Come raccolgo un errore gRPC prima di riconnettermi?
Conserva il primo errore prima che un ciclo di riconnessione lo sostituisca. Registra stato e messaggio gRPC dai metadati iniziali e dai trailer, insieme a
x-erpc-error-code, x-erpc-error-reason e x-erpc-doc-url. Quando ERPC fornisce una pausa, registra anche x-erpc-retry-after-seconds e x-erpc-retry-at (secondi Unix).Un errore può essere mostrato come
ERPC [STREAM_GUARD_SLOW_READER]: .... Incolla l’errore mostrato o il suo codice nella ricerca FAQ. La spiegazione canonica è nelle FAQ gRPC di ERPC. Non presumere che un trailer venga consegnato quando una connessione termina in anticipo.Puoi cercare anche un sintomo: ricevitore lento, disconnesso, larghezza di banda, ritardo di consegna, backlog, pausa, retry, argomento non valido, risorsa esaurita, permesso negato, registrazione IP, troppi stream, blocchi completi o tutti gli account.
Q. Quali errori gRPC mettono in pausa la mia connessione e quando il mio client deve smettere di riconnettersi?
Una pausa è un periodo temporizzato che ERPC applica dopo determinati errori. Il client non deve riconnettersi mentre la pausa è in corso.
Cosa viene conteggiato. Questi errori vengono conteggiati e condividono un’unica serie di passi:
- Ogni richiesta Subscribe che ERPC rifiuta con
ERPC_GRPC_INVALID_ARGUMENT,STREAM_GUARD_SHAPE_BLOCKSoSTREAM_GUARD_SHAPE_ACCOUNTS_ALL, compresa la prima. Il primo errore conteggiato è l’avviso, che non avvia alcuna pausa. STREAM_GUARD_SLOW_READER. Tuttavia, se il ritardo di consegna nasce dal lato di ERPC, ERPC chiude lo stream senza che la chiusura venga conteggiata, e l’errore non riporta alcuna scadenza di retry.
Non vengono conteggiati: la riconnessione in sé, i quattro codici
STREAM_ADMISSION_* (STREAM_ADMISSION_LIMIT_REACHED, STREAM_ADMISSION_IP_NOT_ADMITTED, STREAM_ADMISSION_SOURCE_UNAVAILABLE e STREAM_ADMISSION_SNAPSHOT_UNAVAILABLE) e qualsiasi errore conteggiato che si verifichi mentre una pausa è in corso. Un errore conteggiato durante una pausa non prolunga la pausa né porta al passo successivo.I passi. Ogni errore conteggiato avanza di un passo in questo ordine, a partire dall’avviso:
- Avviso: nessuna pausa.
- Pausa di 60 secondi.
- Pausa di 300 secondi.
- Pausa di 1800 secondi.
- Pausa di 86400 secondi (24 ore). Questo è l’ultimo passo: qui ogni errore conteggiato avvia un’altra pausa di 86400 secondi.
Al passo dell’avviso, l’errore conteggiato successivo porta alla pausa di 60 secondi solo quando arriva entro 1 ora dall’avviso. Un errore conteggiato che arriva più di 1 ora dopo l’avviso è un altro avviso senza pausa, e la finestra di 1 ora parte allora da quel nuovo avviso.
Un errore conteggiato che arriva meno di 60 secondi dopo l’ultimo errore che è stato conteggiato viene conteggiato come parte di quell’errore e non fa avanzare i passi.
Quando i passi tornano all’avviso. Una volta che i passi hanno avviato una pausa, tornano all’avviso solo dopo 24 ore senza alcun errore conteggiato e senza alcuna pausa, misurate dalla fine dell’ultima pausa; il successivo errore conteggiato dopo quel momento è un avviso senza pausa. Fino ad allora, il prossimo errore conteggiato avvia immediatamente il passo successivo, senza avviso.
La pausa di egress.
STREAM_GUARD_EGRESS_BUDGET avvia una propria pausa fissa di 600 secondi. Non fa avanzare i passi.Dove si trova l’ora di fine.
- L’errore che avvia una pausa riporta
Retry after N seconds.e gli headerx-erpc-retry-after-secondsex-erpc-retry-at(secondi Unix). L’avviso non riporta alcuna scadenza di retry. - Quando una richiesta rifiutata conteggiata è quella che avvia una pausa, viene restituita come
STREAM_GUARD_SHAPE_REJECT_PENALTYconResourceExhausted (8)invece del proprio codice. - Durante una pausa per lettore lento o egress, una riconnessione riceve
STREAM_GUARD_PENALTY_ACTIVEcon il tempo rimanente. - Durante una pausa avviata da una richiesta rifiutata, una nuova connessione viene chiusa immediatamente, senza stato gRPC né codice ERPC. Una richiesta su una connessione ancora aperta può ricevere di nuovo come risposta
STREAM_GUARD_SHAPE_REJECT_PENALTYcon il tempo rimanente prima che quella connessione venga chiusa. Il client potrebbe non vedere mai più l’ora di fine, quindi deve salvarex-erpc-retry-atdal primo errore che lo riporta.
| Codice | Stato gRPC | Avvia o fa avanzare una pausa? | Cosa deve fare il client |
|---|---|---|---|
ERPC_GRPC_INVALID_ARGUMENT | InvalidArgument (3) | Sì, quando rifiuta una richiesta Subscribe. In quel caso è un errore conteggiato secondo i passi indicati sopra. | Interrompi il ciclo e non reinviare la stessa richiesta. La voce dedicata a questo codice, più sotto, indica cosa controllare. |
STREAM_GUARD_SHAPE_BLOCKS | PermissionDenied (7) | Sì. È un errore conteggiato secondo i passi indicati sopra. | Interrompi il ciclo e non reinviare la stessa richiesta. La voce dedicata a questo codice, più sotto, indica cosa controllare. |
STREAM_GUARD_SHAPE_ACCOUNTS_ALL | PermissionDenied (7) | Sì. È un errore conteggiato secondo i passi indicati sopra. | Interrompi il ciclo e non reinviare la stessa richiesta. La voce dedicata a questo codice, più sotto, indica cosa controllare. |
STREAM_GUARD_SLOW_READER | ResourceExhausted (8) | Sì. È un errore conteggiato secondo i passi indicati sopra. Tuttavia, se il ritardo di consegna nasce dal lato di ERPC, ERPC chiude lo stream senza che la chiusura venga conteggiata, e l’errore non riporta alcuna scadenza di retry. | Interrompi il ciclo. La voce dedicata a questo codice, più sotto, indica cosa controllare. Se ha avviato una pausa, non riconnetterti prima dell’ora indicata in x-erpc-retry-at. |
STREAM_GUARD_EGRESS_BUDGET | ResourceExhausted (8) | Sì. Avvia una pausa fissa di 600 secondi al di fuori dei passi indicati sopra. | Non riconnetterti prima dell’ora indicata in x-erpc-retry-at. La voce dedicata a questo codice, più sotto, indica cosa controllare. |
STREAM_GUARD_SHAPE_REJECT_PENALTY | ResourceExhausted (8) | Sì. È la richiesta rifiutata conteggiata che ha avviato una pausa. Può arrivare di nuovo con il tempo rimanente su una connessione ancora aperta. | Non riconnetterti prima dell’ora indicata in x-erpc-retry-at. Correggi la richiesta rifiutata e non reinviarla invariata. |
STREAM_GUARD_PENALTY_ACTIVE | ResourceExhausted (8) | No. Segnala una pausa per lettore lento o egress già in corso. | Non riconnetterti prima dell’ora indicata in x-erpc-retry-at. |
STREAM_ADMISSION_LIMIT_REACHED | ResourceExhausted (8) | No. Non ha una pausa temporizzata. | Chiudi gli stream inutilizzati, poi riprova. |
STREAM_ADMISSION_IP_NOT_ADMITTED | PermissionDenied (7) | No. Non ha una pausa temporizzata. | La voce dedicata a questo codice, più sotto, indica cosa controllare. |
STREAM_ADMISSION_SOURCE_UNAVAILABLE | Unavailable (14) | No. Non ha una pausa temporizzata. | Applica un normale backoff e riprova dopo un intervallo. |
STREAM_ADMISSION_SNAPSHOT_UNAVAILABLE | Unavailable (14) | No. Non ha una pausa temporizzata. | Applica un normale backoff e riprova dopo un intervallo. |
Cosa deve fare il client. Davanti a un errore conteggiato, interrompi il ciclo, non reinviare la stessa richiesta e correggila. Durante una pausa, non riconnetterti prima dell’ora indicata in
x-erpc-retry-at. Le richieste Subscribe rifiutate vengono conteggiate secondo le regole sopra, la riconnessione no.Q. Cosa significa STREAM_GUARD_SLOW_READER con ResourceExhausted (8) quando un ricevitore lento viene disconnesso?
ERPC ha osservato poco avanzamento di scrittura o ritardo di consegna per questo stream. Il solo ritardo di consegna non identifica la causa. Controlla perdita di rete, banda effettiva, capacità dell’host e se il consumer dell’applicazione riesce a stare al passo. Riduci i dati sottoscritti e sposta l’elaborazione fuori dal ciclo di ricezione in una coda limitata. Una coda limitata controlla l’uso di memoria, ma non può correggere un consumer costantemente lento. Se ERPC fornisce una scadenza di retry, attendila prima di riconnetterti. La domanda «Perché il mio stream gRPC resta a una velocità costante e rimane indietro?» qui sotto spiega la finestra di ricezione e come ampliarla nella libreria del tuo client.
Q. Perché il mio stream gRPC resta a una velocità costante e rimane indietro?
Una finestra di ricezione piccola nel tuo client, o in qualcosa che si trova tra il client ed ERPC, può causare le chiusure con
STREAM_GUARD_SLOW_READER e le pause che seguono. Questa risposta spiega cos’è una finestra di ricezione, come capire se limita il tuo stream e come ampliarla in base alla libreria. La domanda «Quali errori gRPC mettono in pausa la mia connessione e quando il mio client deve smettere di riconnettersi?» qui sopra indica i passi e la loro durata.Cos’è una finestra di ricezione. In HTTP/2, il ricevente comunica al mittente quanti dati possono essere inviati prima che il ricevente confermi; questa quantità è la finestra di ricezione (la finestra di controllo di flusso di HTTP/2). Un viaggio di andata e ritorno trasporta al massimo una finestra, quindi la velocità si ferma intorno alla finestra divisa per il tempo di andata e ritorno (il percorso fino all’endpoint e ritorno).
Gli altri limiti. Le finestre sono due, una per stream e una per connessione (tutti gli stream di una connessione la condividono), e la più piccola fissa il limite. Nella specifica HTTP/2, entrambe le finestre partono da 65535 byte. Il buffer di ricezione TCP (la memoria per i dati in arrivo) limita la velocità allo stesso modo. Un proxy, un load balancer, un gateway, una VPN o un sidecar intermedio ha le proprie finestre e i propri buffer. Una finestra o un buffer piccolo in quel punto limita lo stream anche quando le finestre del tuo client sono grandi.
Come si presenta. Un singolo stream si assesta su una velocità quasi uguale, qualunque sia l’attività della chain, e il suo ritardo di consegna cresce in modo costante. ERPC ha misurato da un luogo con un tempo di andata e ritorno di circa 6 ms verso l’endpoint Shared di Frankfurt, cambiando solo la finestra tra una prova e l’altra:
- Finestra di stream di 16 KiB: piatta intorno a 2.7 MB/s (16 KiB divisi per 6 ms); il ritardo di consegna è cresciuto di circa 0.6 secondi al secondo, arrivando a 26 secondi in 45 secondi.
- Entrambe a 16 MiB: il ritardo di consegna massimo è stato di 14 ms.
Se il ritardo di consegna nasce dal lato di ERPC, ERPC chiude lo stream senza che la chiusura venga conteggiata, e l’errore non riporta alcuna scadenza di retry.
Come verificarlo.
- Confronta la velocità e il ritardo di consegna dello stream con lo schema descritto sopra.
- Misura il tempo di andata e ritorno. Moltiplica la velocità dello stream per il tempo di andata e ritorno per stimare la finestra (2.7 MB/s per 6 ms fa circa 16 KB).
- Controlla se una delle due finestre del tuo client ha un valore piccolo, o se la crescita automatica (la libreria che amplia la finestra da sé) è disattivata.
- Controlla il buffer di ricezione TCP. Su Linux, esegui
sysctl net.ipv4.tcp_rmem net.core.rmem_maxe verifica se la tua applicazione impostaSO_RCVBUF, che disattiva il dimensionamento automatico. - Controlla le finestre e i buffer di tutto ciò che si trova nel mezzo.
- Se la velocità non ha un tetto e cresce solo il ritardo, è lenta l’elaborazione dopo la ricezione. La domanda «Cosa significa
STREAM_GUARD_SLOW_READERconResourceExhausted (8)quando un ricevitore lento viene disconnesso?» qui sopra spiega come limitare il ciclo di ricezione alla lettura e spostare il lavoro pesante in una coda limitata.
Impostazioni per libreria. Gli esempi impostano entrambe le finestre a 16 MiB, come nella misurazione di ERPC. Per una libreria non elencata, cerca le impostazioni della finestra iniziale di HTTP/2.
Rust,
yellowstone-grpc-client. Senza impostazioni di finestra, GeyserGrpcClient::build_from_shared usa 2 MiB per stream e 5 MiB per connessione. Con un tempo di andata e ritorno di 6 ms, questi valori predefiniti consentono più di 300 MB/s, quindi non limitano lo stream. Per impostare tu le finestre, usa i due metodi del builder e lascia http2_adaptive_window disattivato. Se è attivo, la finestra parte da 65535 byte e cresce da sola fino a 16 MiB, ignorando i tuoi valori.rust
// Entrambe le finestre fisse a 16 MiB; lascia http2_adaptive_window disattivato.
let client = GeyserGrpcClient::build_from_shared(endpoint)?
.tls_config(ClientTlsConfig::new().with_native_roots())?
.initial_stream_window_size(16 * 1024 * 1024)
.initial_connection_window_size(16 * 1024 * 1024)
.connect()
.await?;// Entrambe le finestre fisse a 16 MiB; lascia http2_adaptive_window disattivato.
let client = GeyserGrpcClient::build_from_shared(endpoint)?
.tls_config(ClientTlsConfig::new().with_native_roots())?
.initial_stream_window_size(16 * 1024 * 1024)
.initial_connection_window_size(16 * 1024 * 1024)
.connect()
.await?;TypeScript,
@triton-one/yellowstone-grpc 5.0.1 o versioni successive. Valori predefiniti: 4 MiB per stream, 8 MiB per connessione, crescita automatica attiva. La finestra parte da 64 KiB e cresce fino a 16 MiB, quindi i valori predefiniti raramente limitano lo stream. Per fissare le dimensioni, passa il terzo argomento con grpcHttp2AdaptiveWindow: false.typescript
// Finestra adattiva disattivata, quindi si usano queste dimensioni fisse.
const client = new Client(endpoint, undefined, {
grpcInitialStreamWindowSize: 16 * 1024 * 1024,
grpcInitialConnectionWindowSize: 16 * 1024 * 1024,
grpcHttp2AdaptiveWindow: false,
})// Finestra adattiva disattivata, quindi si usano queste dimensioni fisse.
const client = new Client(endpoint, undefined, {
grpcInitialStreamWindowSize: 16 * 1024 * 1024,
grpcInitialConnectionWindowSize: 16 * 1024 * 1024,
grpcHttp2AdaptiveWindow: false,
})TypeScript,
@triton-one/yellowstone-grpc 5.0.0 o versioni precedenti. Queste versioni usano @grpc/grpc-js, la cui finestra predefinita è di 65535 byte: circa 11 MB/s a 6 ms, circa 0.66 MB/s a 100 ms. Dalla versione 1.14, @grpc/grpc-js applica 'grpc-node.flow_control_window' a entrambe le finestre; la versione 1.13 lo applica solo alla finestra di stream, quindi la finestra di connessione resta a 65535 byte (circa 11 MB/s a 6 ms). Con una versione di @grpc/grpc-js precedente alla 1.14, è più rapido aggiornare a @triton-one/yellowstone-grpc 5.0.1 o versioni successive.typescript
// Richiede @grpc/grpc-js 1.14 o versioni successive per ampliare entrambe le finestre.
const client = new Client(endpoint, undefined, {
'grpc-node.flow_control_window': 16 * 1024 * 1024,
})// Richiede @grpc/grpc-js 1.14 o versioni successive per ampliare entrambe le finestre.
const client = new Client(endpoint, undefined, {
'grpc-node.flow_control_window': 16 * 1024 * 1024,
})Go,
google.golang.org/grpc. Per impostazione predefinita la libreria amplia da sé le finestre, fino a 16 MiB. grpc.WithInitialWindowSize e grpc.WithInitialConnWindowSize le fissano e disattivano la crescita automatica; i valori sotto i 64 KiB vengono ignorati. Imposta entrambe: con una sola, l’altra resta a 64 KiB.go
// Imposta entrambe; questo disattiva anche la crescita automatica della finestra.
conn, err := grpc.NewClient(target,
grpc.WithTransportCredentials(creds),
grpc.WithInitialWindowSize(16<<20),
grpc.WithInitialConnWindowSize(16<<20),
)// Imposta entrambe; questo disattiva anche la crescita automatica della finestra.
conn, err := grpc.NewClient(target,
grpc.WithTransportCredentials(creds),
grpc.WithInitialWindowSize(16<<20),
grpc.WithInitialConnWindowSize(16<<20),
)Python,
grpcio. grpc.http2.bdp_probe è attivo per impostazione predefinita, quindi le finestre crescono da sole; se il tuo codice passa ("grpc.http2.bdp_probe", 0), rimuovilo. grpc.http2.lookahead_bytes imposta la lettura anticipata per stream (predefinito 64 KB); valori più grandi possono aiutare con un tempo di andata e ritorno lungo.python
# Se le tue opzioni includono ("grpc.http2.bdp_probe", 0), rimuovi quella voce.
channel = grpc.secure_channel(target, creds, options=[
("grpc.http2.lookahead_bytes", 16 * 1024 * 1024),
])# Se le tue opzioni includono ("grpc.http2.bdp_probe", 0), rimuovi quella voce.
channel = grpc.secure_channel(target, creds, options=[
("grpc.http2.lookahead_bytes", 16 * 1024 * 1024),
])Ricevi più vicino. Con un tempo di andata e ritorno più breve la stessa finestra consegna di più, e il servizio VPS e i server Bare-Metal di ERPC portano il client vicino all’endpoint.
Dividi con attenzione. Standard consente 10 stream e Premium 50, per ogni IP di origine registrato. Ogni stream ha la propria finestra di stream, ma gli stream di una stessa connessione condividono un’unica finestra di connessione, quindi una finestra di connessione piccola limita comunque la velocità. Quando sostituisci uno stream, chiudi prima quello vecchio: gli stream aperti rientrano nel limite, e superarlo restituisce
STREAM_ADMISSION_LIMIT_REACHED (ha una propria domanda più sotto). Dividere non velocizza un’elaborazione lenta.Q. Cosa significa STREAM_GUARD_EGRESS_BUDGET con ResourceExhausted (8)?
Il traffico aggregato dell’IP ha superato l’allocazione Shared, quindi gli stream correlati possono chiudersi insieme. Riduci il volume di dati e gli stream paralleli non necessari, poi attendi la scadenza restituita. Questa pausa di egress dura 600 secondi e non fa avanzare la scala delle penalità, anche se può restare in vigore una pausa più lunga già esistente.
Q. Cosa significa STREAM_GUARD_PENALTY_ACTIVE con ResourceExhausted (8)?
Una precedente pausa per lettore lento o egress è ancora attiva, e questa risposta riporta il tempo rimanente. Conserva il primo errore ERPC, correggine la causa e non riconnetterti prima di
x-erpc-retry-at; non riconnetterti in anticipo per provarla. I tentativi di riconnessione non vengono conteggiati. La domanda «Quali errori gRPC mettono in pausa la mia connessione e quando il mio client deve smettere di riconnettersi?» qui sopra indica i passi e la loro durata.Q. Cosa significa STREAM_GUARD_SHAPE_BLOCKS con PermissionDenied (7)?
La regola Shared attuale rifiuta ogni mappa
blocks non vuota, anche con una richiesta ristretta. Rimuovi la mappa blocks. Usa transazioni e/o metadati dei blocchi quando soddisfano il requisito; nessuno dei due equivale a un blocco completo. Per i blocchi completi serve Geyser gRPC Dedicated; ciò non implica che esista un piano Shared per blocchi selettivi.Q. Cosa significa STREAM_GUARD_SHAPE_ACCOUNTS_ALL con PermissionDenied (7)?
Una voce di filtro account deve selezionare i dati con
account, owner o un filtro cuckoo supportato. memcmp e dataSize da soli non sono sufficienti. Limita la richiesta account a una di queste forme supportate oppure usa Geyser gRPC Dedicated quando serve lo stream completo degli account.Q. Cosa significa STREAM_GUARD_SHAPE_REJECT_PENALTY con ResourceExhausted (8)?
Questo codice viene restituito al posto di
ERPC_GRPC_INVALID_ARGUMENT, STREAM_GUARD_SHAPE_BLOCKS o STREAM_GUARD_SHAPE_ACCOUNTS_ALL quando è proprio quella richiesta rifiutata conteggiata ad avviare una pausa; la domanda «Quali errori gRPC mettono in pausa la mia connessione e quando il mio client deve smettere di riconnettersi?» qui sopra spiega quando succede. Riporta Retry after N seconds., x-erpc-retry-after-seconds e x-erpc-retry-at. Durante questa pausa, le nuove connessioni vengono chiuse immediatamente, senza stato gRPC né codice ERPC, quindi il client potrebbe non vedere mai più l’ora di fine. Salva x-erpc-retry-at dal primo errore che lo riporta. Le richieste Subscribe rifiutate vengono conteggiate secondo le regole sopra, la riconnessione no. Correggi la richiesta e non reinviarla invariata. Una chiusura anticipata può sembrare un errore di trasporto; conserva quindi il primo errore ERPC prima che il ciclo di riconnessione lo nasconda.Q. Cosa significa STREAM_ADMISSION_LIMIT_REACHED con ResourceExhausted (8)?
La capacità di ammissione è attualmente piena. Chiudi stream inutilizzati o duplicati, verifica l’allocazione per la connessione e riprova quando la capacità è disponibile. Questa risposta da sola non significa che sia attiva una penalità temporizzata.
Q. Cosa significa STREAM_ADMISSION_IP_NOT_ADMITTED con PermissionDenied (7)?
ERPC non ha potuto ammettere la connessione, anche dopo la scadenza di un periodo di grazia per la registrazione IP. Confronta l’IP di uscita effettivo con l’IP registrato e conferma lo stato di accesso corrente. Lascia propagare una modifica alla registrazione senza supporre un tempo fisso e contatta il supporto se la condizione persiste.
Q. Cosa significa STREAM_ADMISSION_SOURCE_UNAVAILABLE con Unavailable (14)?
ERPC non ha potuto determinare la fonte di questa connessione in quel momento. Applica un backoff e riprova più tardi. Se persiste, contatta il supporto con il primo errore e i suoi metadati; la risposta non dimostra un guasto nella rete o nel server del cliente.
Q. Cosa significa STREAM_ADMISSION_SNAPSHOT_UNAVAILABLE con Unavailable (14)?
ERPC non ha potuto verificare l’accesso in quel momento. Applica un backoff e riprova più tardi, quindi contatta il supporto se continua. Registrarsi di nuovo ripetutamente, ampliare i filtri o acquistare Geyser gRPC Dedicated non corregge questa risposta di disponibilità.
Q. Cosa significa ERPC_GRPC_INVALID_ARGUMENT con InvalidArgument (3)?
La richiesta contiene parametri, opzioni, tipi di campo, chiavi o combinazioni di filtri non validi. Correggi la richiesta prima di riprovare e non reinviare la stessa richiesta. Ogni richiesta Subscribe rifiutata con questo codice è un errore conteggiato secondo le regole di pausa della domanda «Quali errori gRPC mettono in pausa la mia connessione e quando il mio client deve smettere di riconnettersi?» qui sopra, regole condivise con
STREAM_GUARD_SHAPE_BLOCKS, STREAM_GUARD_SHAPE_ACCOUNTS_ALL e STREAM_GUARD_SLOW_READER. Quando una di queste richieste avvia una pausa, viene restituita come STREAM_GUARD_SHAPE_REJECT_PENALTY con ResourceExhausted (8). Geyser gRPC Dedicated non rende validi parametri non validi.Il messaggio di errore chiude il codice con
(reason: <token>), e lo stesso token viene restituito nell’header di risposta x-erpc-error-reason. Cerca il token qui sotto per vedere cosa modificare. Quando si applica un limite, il messaggio di errore lo indica.| Reason | Significato | Cosa modificare |
|---|---|---|
too_many_filters | La richiesta contiene più filtri con nome o data slice di quanti ne ammetta una richiesta. | Usa meno filtri con nome (o data slice) di questo tipo per richiesta. |
empty_filter | Un filtro non ha alcun indirizzo, e un filtro vuoto significa tutto. | Dai a ogni filtro almeno un indirizzo (accounts: un account o un owner; transazioni: un elenco di account). Shared gRPC non serve un filtro vuoto. |
too_many_addresses | Un campo di filtro elenca troppi indirizzi. | Usa meno indirizzi in un campo di filtro; distribuiscili su più filtri o restringi l’elenco. |
address_not_allowed | Un filtro indica un indirizzo che Shared gRPC non consente. | Rimuovi dal filtro quell’indirizzo ad alto volume. |
filter_name_too_long | Il nome di un filtro è troppo lungo. | Usa nomi di filtro più brevi (le chiavi della map). |
invalid_commitment | Il livello di commitment non è valido. | Usa processed, confirmed o finalized. |
invalid_address | Un filtro contiene un indirizzo non valido. | Ogni indirizzo deve essere un indirizzo Solana base58 valido (niente stringhe vuote, spazi o lunghezza errata). |
invalid_signature | Il valore della firma di transazione non è valido. | Usa una firma di transazione base58 valida. |
invalid_account_data_filter | Un filtro sui dati degli accounts non è valido. | Correggi i filtri memcmp, datasize e sui dati dei token accounts, e mantieni il loro numero entro il limite indicato nel messaggio. |
invalid_data_slice | I data slice non sono validi. | Ordina i data slice per offset ed evita che si sovrappongano. |
blocks_include_not_allowed | Le opzioni della sottoscrizione blocks non sono disponibili su Shared gRPC. | Ometti blocks e usa invece una sottoscrizione alle transazioni o a blocks_meta. |
invalid_token_accounts_mode | La modalità dei token accounts non è valida. | Usa ALL (0) o BALANCE_CHANGED (1). |
invalid_argument | Nessuno dei motivi precedenti si applica. | Controlla il filtro e i parametri della richiesta prima di riprovare. |
Q. Cosa significa ERPC_GRPC_REQUEST_FAILED quando gRPC restituisce un altro stato diverso da zero?
La richiesta è fallita con uno stato gRPC valido che determina il passo successivo. Correggi una richiesta con
OutOfRange (11) quando un intervallo storico non è valido; applica backoff per uno stato di disponibilità come Unavailable (14). Non classificare ogni stato diverso da zero come transitorio e non ritentare invariata ogni risposta.Q. Quale regione consigliate?
Non esiste un’unica regione che sia sempre la migliore. Solana è globale e il ruolo di leader ruota tra i validator, slot dopo slot. Le regioni con più validator e più stake ottengono leader slot più spesso, il che può aiutare le transazioni a essere incluse più velocemente. Il compromesso è che anche il traffico concorrente si concentra lì, quindi una regione meno affollata a volte può offrire risultati migliori a seconda della tua strategia.
Come punto di partenza pratico, scegli una regione densa di validator come Francoforte o la costa orientale degli Stati Uniti quando conta di più un flusso costante di leader slot, oppure posizionati vicino a un validator target specifico quando la priorità è l’esecuzione sul percorso più breve. Usa Validators Solutions per comprendere la distribuzione pubblica della rete Solana, poi usa la ERPC Leader Slot API e misurazioni reali per decidere se è appropriato un deployment su regione singola, doppia o globale.
Q. Ho bisogno di una latenza di ~400ms o migliore.
Per raggiungere una latenza entro circa 400ms, considera questi punti essenziali:
-
Comprensione realistica dei valori di ping: i valori di ping indicano condizioni ideali e non riflettono la latenza effettiva nelle comunicazioni in streaming, che tipicamente presentano una latenza pari a circa 5 volte quella del ping. Ad esempio, un ping di 100ms tra continenti si traduce realisticamente in circa 500ms di latenza. Pertanto, l’infrastruttura deve essere collocata nella stessa regione per raggiungere una latenza di ~400ms.
- Valori di ping tipici di riferimento:
- Stessa rete: ~0.1ms
- Private Network Interconnect (PNI): ~0.2ms
- Stesso data center: ~0.3ms
- Stessa città: ~1ms
- Paese vicino: ~5–10ms
- Intercontinentale: ~100–300ms
- Valori di ping tipici di riferimento:
-
Evitare la trappola della latenza media: i validator Solana sono dispersi geograficamente in tutto il mondo e lo schedule dei leader cambia casualmente a ogni epoch. Affidarsi alla latenza media per raggiungere ~400ms non è praticabile. Devi invece tracciare con precisione gli schedule dei validator nella tua regione specifica per identificare gli slot con la latenza più bassa. Per ottenere costantemente la latenza minima, è necessaria un’infrastruttura in tutte le regioni rilevanti. Nella stessa regione, l’acquisizione dei dati può avvenire in decine di millisecondi e la trasmissione in pochi millisecondi.
-
Tracciamento dello schedule dei leader: monitora lo schedule dei validator leader per la tua regione usando la ERPC Leader Slot API (
getLeaderSlots). Restituisce lo schedule dei prossimi leader, il peso dello stake per l’epoch corrente, la geolocalizzazione stimata dei validator e i valori di ping di riferimento, così puoi individuare gli slot a latenza più bassa su cui puntare prima che arrivino. I dati pubblici in stile mappa e le API RPC native sono utili per una visibilità ampia della rete, ma non sono abbastanza precisi per il timing di esecuzione. La Leader Slot API colma questa lacuna con la granularità necessaria per le decisioni di routing e trading.
Dati della rete Solana: Validators Solutions
Q. Come posso fare trading zero-block (zero-slot)?
Per riuscire a fare trading zero-block (zero-slot) servono strategie più sofisticate, come le seguenti:
-
Identificare le zone di opportunità: i validator Solana sono distribuiti globalmente ed è fisicamente impossibile ottenere la latenza ottimale per ogni slot. Pertanto, monitora gli schedule dei leader dei validator nella regione in cui si trova la tua infrastruttura e identifica le zone di opportunità più favorevoli. Anche distribuire l’infrastruttura su più regioni può essere vantaggioso. Ad esempio, Francoforte è una regione chiave grazie alla sua elevata densità di validator, che si traduce in una selezione dei leader più frequente e maggiori opportunità di trading.Usa la ERPC Leader Slot API (
getLeaderSlots) per consultare lo schedule dei prossimi leader, il peso dello stake per l’epoch corrente, i dati stimati di geolocalizzazione dei validator e i valori di ping di riferimento con una precisione di gran lunga superiore rispetto alle fonti di dati pubbliche in stile mappa o alle API RPC native. Questo ti permette di mappare le zone di opportunità prima che arrivino gli slot ed eseguire operazioni a latenza quasi zero. -
Implementare nodi dedicati: se fatichi a competere, considera l’implementazione di nodi dedicati. I nodi condivisi subiscono latenza a causa del traffico di altri utenti e quindi non sono consigliati. Inoltre, collocare il tuo nodo dedicato nella stessa rete della tua applicazione riduce significativamente la latenza di rete e ottimizza le prestazioni.
Q. Posso usare un endpoint specifico?
Per mantenere un ambiente a bassa latenza, il nostro sistema seleziona automaticamente il nodo disponibile più vicino. Se desideri usare un endpoint specifico, consigliamo di noleggiare un server situato il più vicino possibile a quell’endpoint.
Q. Ricevo un errore 401. Perché?
Per mantenere un ambiente a bassa latenza, applichiamo restrizioni IP. Se non hai un abbonamento o il tuo IP non è registrato, riceverai un errore 401.
Verifica che il tuo IP registrato corrisponda al tuo attuale IP di accesso.
Q. Ricevo un errore 429. Perché?
Hai raggiunto il limite di connessioni del tuo piano.
Se riscontri questo errore, considera l’upgrade del tuo piano. Se hai bisogno di più connessioni di quante ne offra il nostro piano premium, un nodo gRPC dedicato sarebbe più adatto.
Q. Perché gli endpoint dedicati sono più veloci?
Gli endpoint condivisi sono utilizzati da più clienti che condividono le stesse risorse. Quando il traffico cresce, la latenza tende ad aumentare. Le risorse del server hanno limiti fisici e la quantità di lavoro che possono gestire è finita. Quando troppe richieste arrivano contemporaneamente, devono essere elaborate in sequenza, il che si traduce in tempi di risposta più lenti.
Sebbene adottiamo varie misure per ottimizzare le prestazioni anche sugli endpoint condivisi, con gli endpoint dedicati sei l’unico utente della risorsa. Ciò significa che non risenti in alcun modo degli altri utenti, il che garantisce risposte costantemente stabili e veloci.
Inoltre, gli endpoint dedicati offrono opzioni di comunicazione senza TLS, come HTTP. Saltando l’handshake TLS (circa 20ms), la comunicazione diventa ancora più veloce rispetto a HTTPS.
Q. Il prezzo promozionale aumenterà dopo la sottoscrizione?
Finché il tuo abbonamento rimane attivo, il prezzo promozionale che hai bloccato al momento dell’iscrizione resta in vigore. Gli ambienti in grado di reggere il workload in tempo reale di Solana sono scarsi a livello globale e prevediamo di aumentare i prezzi di listino in linea con la crescente domanda di hardware e rete. Le configurazioni con specifiche più elevate e le regioni ad alta domanda si esauriscono più velocemente, quindi bloccare l’attuale prezzo promozionale è la scelta più conveniente nel lungo periodo.
Q. Voglio pagare in crypto
I pagamenti in crypto sono disponibili dalla ERPC Web Dashboard quando il paese del tuo indirizzo di fatturazione registrato è uno dei paesi membri dell’UE. Se tutte le carte di pagamento registrate sul tuo account sono state emesse fuori dall’UE, i pagamenti in crypto non sono disponibili. Puoi usare SOL, USDC o EURC per acquistare ERPC Credits.
Usa questi ERPC Credits per attivare o continuare i piani ERPC. Apri la dashboard, scegli il pagamento in crypto, invia il trasferimento dal tuo wallet e la dashboard verificherà la transazione e applicherà i crediti al tuo account.
Paesi supportati: Austria, Belgio, Bulgaria, Croazia, Cipro, Cechia, Danimarca, Estonia, Finlandia, Francia, Germania, Grecia, Ungheria, Irlanda, Italia, Lettonia, Lituania, Lussemburgo, Malta, Paesi Bassi, Polonia, Portogallo, Romania, Slovacchia, Slovenia, Spagna, Svezia.
Per i paesi non presenti nell’elenco, paga con carta di credito.
Q. Come posso ottenere la latenza più bassa possibile?
Consigliamo vivamente di combinare un nodo gRPC dedicato con il nostro server Bare-Metal.
Entrambi condividono la stessa rete, consentendo una comunicazione privata a distanza zero senza attraversare internet. Questa configurazione raggiunge una latenza estremamente bassa, tipicamente intorno a 0.1ms di ping.
Contattaci tramite la ERPC Web Dashboard per ulteriori dettagli.
Q. Com’è la latenza?
La latenza varia a seconda del metodo di misurazione e del tuo specifico ambiente di utilizzo. Piuttosto che concentrarti su valori numerici esatti, è fondamentale assicurarti che la latenza soddisfi i tuoi requisiti operativi effettivi.
Forniamo strumenti facili da usare in TypeScript e Rust per misurare la latenza.
Q. Questo RPC (gRPC, Shreds) è più veloce degli altri?
Puntiamo alla velocità in ogni livello di piano e siamo lieti che venga misurata a confronto diretto con qualsiasi altro provider. I risultati possono variare in base alla regione, all’uso di un endpoint condiviso o dedicato, al protocollo che usi (WebSockets, gRPC o Shreds) e al linguaggio di programmazione del tuo client.
Se il nostro servizio ti risulta più lento, facci sapere tramite la ERPC Web Dashboard le condizioni specifiche e i concorrenti con cui lo hai confrontato. Identificheremo la causa e miglioreremo ulteriormente la velocità.
Q. Quale piano offre le prestazioni più veloci?
In generale, il nostro piano di livello più alto offre le prestazioni più veloci grazie a CPU superiori, maggiori capacità di memoria e configurazioni hardware robuste.
Offriamo anche soluzioni personalizzate se hai bisogno di server ancora più potenti, ma i nostri piani standard sono progettati per offrire un rapporto prezzo/prestazioni ottimale.
Siamo convinti di offrire prestazioni di livello mondiale in ogni fascia di prezzo. Se trovi un provider più veloce nella stessa fascia di prezzo, faccelo sapere, così potremo indagare e migliorare.
Q. Riscontro una latenza elevata. Cosa posso fare?
La latenza dipende fortemente dalla tua vicinanza all’endpoint. Consigliamo di accedere da un server vicino all’endpoint fornito. Le connessioni più veloci si ottengono con il nostro server Bare-Metal e il servizio VPS.
Q. Qual è il più veloce: WebSockets, gRPC o Shreds?
Il feedback dei nostri clienti classifica costantemente la velocità come segue:
Shreds > gRPC > WebSockets
Condividi la tua esperienza se osservi risultati diversi.
Q. La latenza non è quella che mi aspettavo.
Le prestazioni variano a seconda del linguaggio di programmazione utilizzato. In generale, i linguaggi si classificano per velocità come segue:
Rust > Go > TypeScript (JavaScript) > Python
Per confronti dettagliati, vedi:
Per le massime prestazioni, consigliamo vivamente di usare Rust.








