L'explorer e i nodi di archivio
L'explorer di ZooBC permette a chiunque di sfogliare blocchi, transazioni, account e nodi, cercare vecchi messaggi delle transazioni e leggere statistiche giornaliere. La maggior parte di questi dati non proviene da un nodo ordinario ma da un servizio di archivio: un programma separato che gira accanto a un nodo registrato e conserva un indice consultabile della cronologia della catena.
Che cosa conserva un nodo ordinario
Un nodo ordinario conserva lo stato attuale (saldi, record, il registro) e una finestra recente di blocchi: da uno a due periodi di snapshot, cioè da 30 a 60 giorni su mainnet. È sufficiente per convalidare la catena e per aiutare nuovi nodi a entrare a partire da uno snapshot (snapshot e fast sync). I blocchi, le transazioni e le ricevute più vecchi vengono eliminati (pruning della cronologia), il che mantiene leggeri i nodi. Un operatore che vuole conservare localmente la cronologia eliminata può impostare keep_all_history in node.conf.
La conseguenza è che un nodo da solo non può rispondere a «ogni transazione dal blocco 0», né a una ricerca a testo libero nei messaggi.
Il servizio di archivio
Il servizio di archivio, zoobc-archival-api, colma questa lacuna. Un nodo il cui operatore imposta archival_node = true lo avvia e lo supervisiona. Il servizio legge il database SQLite del nodo stesso e mantiene un indice di blocchi e transazioni in un archivio MySQL, così può rispondere su cronologia, linee temporali degli account, statistiche e ricerche. Oltre a forme d'archivio delle route ordinarie, serve route proprie:
| Route | A che cosa risponde | |
|---|---|---|
/search/transactions | ricerca nelle transazioni, compresi i loro messaggi | |
/stats/… | statistiche della rete | |
/spine/blocks | i blocchi della [[spine-chain | catena spine]] |
/network/map | una mappa della rete | |
/archive/stats | statistiche sull'archivio stesso |
Un dettaglio conta per gli sviluppatori che confrontano le risposte: il servizio di archivio scrive i valori esadecimali in maiuscolo, mentre il nodo li scrive in minuscolo.
Dichiararlo sulla catena
Il proprietario di un nodo registrato dichiara un servizio di archivio con RegisterArchival (tipo 46). La chiave del nodo indicata deve appartenere a un nodo registrato di proprietà del mittente. Non viene bloccato alcuno stake, e UnregisterArchival (tipo 47) ritira la voce. Chiunque può elencare i servizi dichiarati su GET /api/v1/registry/archivals, e il wallet web legge quell'elenco quando il suo gateway non risponde.
L'explorer
L'explorer è una pagina web servita dai gateway. È costruito sulle route d'archivio: blocchi, transazioni, account, nodi, la spine, statistiche e ricerca. Un gateway invia ogni lettura dell'API prima al suo servizio di archivio e ripiega su un nodo per le route che il servizio di archivio non ha. L'explorer mostra anche la versione del software di ogni nodo, così operatori e osservatori possono vedere chi si è aggiornato (release e aggiornamenti).
Sono tutti dati pubblici della catena: serve una chiave per agire sulla catena, mai per guardarla (API del nodo).
Non l'unico modo per leggere il passato
Un servizio di archivio è una comodità, non la memoria della catena.
L'archiviazione decentralizzata, non ogni nodo, conserva ogni snapshot dal blocco 0, così che chiunque possa ripercorrere la catena spine fino allo snapshot di un dato momento e ricostruire lo stato com'era, senza affidarsi ad alcun nodo di archivio (archivio e la lettura del passato).
Che cosa non fanno i servizi di archivio: non producono blocchi, cosa che fanno solo i nodi registrati, e non esiste alcun database centrale della ZooBC Foundation a cui i nodi riferiscano. I relay trasportano chiamate tra wallet, non transazioni (relay).