Wiki di ZooBC
Integrazioni

Gateway

I nodi parlano HTTP semplice sulle proprie porte e sono occupati a mantenere la catena. Un gateway si pone davanti a loro per il pubblico. Detiene il certificato di un dominio, così i browser si connettono in HTTPS, e serve le pagine che le persone aprono: il wallet, l'explorer, la pagina di verifica dei file, i manuali e i download. I gateway sono elencati sulla catena, così i wallet possono trovarne un altro quando il loro non risponde.

Che cosa fa un gateway

Un gateway è un ruolo configurato dall'installer di ZooBC, un programma separato dal nodo. Termina il TLS (la cifratura dietro HTTPS) e passa le richieste all'API sotto /api/v1/ a due back end:

  • prima a un servizio di archivio, che detiene una cronologia profonda e consultabile (explorer e i nodi di archivio);
  • poi a un nodo, quando il servizio di archivio risponde con un 404 vuoto, cioè quando non ha quella route.

Le nuove transazioni finiscono quindi a un nodo completo, perché solo un nodo ha un pool di transazioni in sospeso. Le risposte sono dati della catena stessa; il gateway si limita a trasportarle. Aggiunge le proprie intestazioni cross-origin (CORS), che consentono GET, POST e OPTIONS e un'intestazione X-API-Key, con una cache di 600 secondi.

Un browser raggiunge il gateway in HTTPS; il gateway serve le pagine del wallet, dell'explorer e di verifica, interroga prima il servizio di archivio e ripiega su un nodo, il cui pool accoglie le nuove transazioni
Un browser raggiunge il gateway in HTTPS; il gateway serve le pagine del wallet, dell'explorer e di verifica, interroga prima il servizio di archivio e ripiega su un nodo, il cui pool accoglie le nuove transazioni

Un gateway non produce mai blocchi, cosa che fanno solo i nodi registrati, non detiene mai la chiave di nessuno e non cambia valute.

Registrare un gateway

Un proprietario elenca un gateway con RegisterGateway (tipo 36). Questa transazione registra:

  • la chiave propria del gateway, scritta ZBG_…;
  • il suo dominio: da 1 a 256 caratteri, solo lettere, cifre, punti e trattini;
  • il suo URL, che deve iniziare con https:// ed essere di al massimo 1.024 byte.

Blocca uno stake di 10 ZBC (1.000.000.000 di unità atomiche) dall'account del proprietario. L'importo è il gateway_registration_cost votato, che parte da 10 ZBC su ogni catena e si muove solo con i voti sui prezzi dei seggi.

Restare in elenco

Un gateway dimostra di essere attivo con transazioni GatewayHeartbeat (tipo 37). Ogni heartbeat ha un corpo di 132 byte: la chiave del gateway, l'altezza e l'hash di un blocco recente, e una firma della chiave del gateway sui primi 68 byte. Il blocco indicato deve trovarsi entro 20 blocchi dalla punta, quindi un heartbeat non può essere preparato in anticipo.

La catena consente un intervallo tra gli heartbeat di 240 blocchi più un periodo di tolleranza di 480: un gateway silenzioso per 720 blocchi (3 ore) viene reso inattivo, e il suo proprietario riottiene lo stake. Un proprietario può anche uscire in qualsiasi momento con UnregisterGateway (tipo 38), che a sua volta restituisce lo stake. Nulla viene bruciato: lo stake è un deposito, non un pagamento, e non c'è alcun abbonamento.

Gli heartbeat, ciascuno dei quali indica un blocco profondo al massimo 20, mantengono in elenco il gateway; dopo 720 blocchi di silenzio diventa inattivo e lo stake di 10 ZBC torna al proprietario
Gli heartbeat, ciascuno dei quali indica un blocco profondo al massimo 20, mantengono in elenco il gateway; dopo 720 blocchi di silenzio diventa inattivo e lo stake di 10 ZBC torna al proprietario

Chiunque può elencare i gateway su GET /api/v1/registry/gateways. La risposta della route ha una forma diversa a seconda che la fornisca il servizio di archivio o il nodo. Quando il suo gateway non risponde, il wallet web rilegge questo elenco, insieme a quelli dei relay e dei servizi di archivio, e passa a un altro. A ogni gateway possono anche essere collegati dei relay.

Il faucet di testnet

Su testnet, le cui monete non hanno valore, il gateway serve anche il faucet su /faucet/. Indicagli un indirizzo e ti invia ZBC di prova. Il pagamento si dimezza a ogni prelievo: fino a 100 ZBC alla prima richiesta, poi 50, 25, 12,5 e così via, finché una richiesta pagherebbe meno di 1 ZBC; da lì non arriva più nulla fino all'azzeramento settimanale. Ciò che è stato prelevato si conta per indirizzo o per indirizzo internet (IP), quindi molti account dietro una stessa connessione condividono un unico limite. Il faucet è l'unico punto che accetta un importo in ZBC decimali anziché in unità atomiche.

Paga qualsiasi indirizzo supportato, non solo quelli ZBC_…: funziona anche un indirizzo Bitcoin, Ethereum o di un'altra catena esterna, perché quelle chiavi possono controllare account ZooBC (chiavi e tipi di account). Le monete di prova non si possono scambiare con ZBC di mainnet, e nessuno le vende (devnet, testnet e mainnet).

Vedi anche