Le chiavi di un nodo
Un operatore di un nodo ZooBC usa due chiavi. La chiave del nodo è l'identità della macchina: vive sul nodo e firma ciò che il nodo fa tutto il giorno. La chiave del proprietario è un normale account nel wallet dell'operatore: controlla il seggio e lo stake. Tenerle separate significa che un'intrusione nel server non consegna il wallet dell'operatore.
La chiave del nodo
La chiave del nodo è una chiave Ed25519 di 32 byte, scritta con il prefisso ZNK_. È conservata nel file di configurazione del nodo, node.conf, e firma:
- i blocchi che il nodo produce, e la prova dietro il seed di ogni blocco (seed del blocco (VRF));
- le ricevute per i blocchi e le transazioni che riceve dai suoi peer (ricevute e topologia della rete);
- i messaggi ai suoi peer, compreso l'handshake che apre ogni connessione;
- le sue firme sulla catena spine;
- attestazioni e voti, come i voti sui prezzi e i veti sulle release;
- le prove di detenere frammenti dell'archiviazione decentralizzata (pool di archiviazione decentralizzata).
Poiché node.conf contiene la chiave privata, il nodo si rifiuta di partire se altri utenti della macchina possono leggere il file; quando il file appartiene al nodo, è il nodo stesso a impostarne i permessi a 0600.
L'account proprio del nodo
Gli stessi 32 byte scritti con il prefisso ZBC_ sono un normale account: l'account proprio del nodo. Da qui partono le transazioni di servizio del nodo, come prove di archiviazione, attestazioni e voti, con una commissione esattamente pari a 0 (commissioni). Ogni seggio genesi parte con 10 ZBC su questo account.
I due testi della stessa chiave hanno in comune i primi 51 caratteri dopo il prefisso e differiscono solo negli ultimi cinque, perché il checksum di 3 byte finale copre anche il prefisso. Sostituire a mano ZNK con ZBC rompe quindi il checksum, e il testo modificato viene rifiutato (account e indirizzi).
La chiave del proprietario
La chiave del proprietario è un normale account ZBC_ nel wallet dell'operatore. Firma le transazioni del registro:
- NodeRegistration (tipo 2), che registra il nodo e ne blocca lo stake;
- un aumento dello stake;
- NodeRegistrationUpdate (tipo 258), che sposta il seggio su una nuova chiave del nodo;
- RemoveNodeRegistration (tipo 514), che rimuove il nodo;
- ClaimNodeRegistration (tipo 770), che rivendica lo stake.
Lo stake proviene da questo account, e le vincite del nodo alla lotteria vengono pagate su di esso. Un nodo non detiene mai la chiave del suo proprietario.
Legate insieme: la prova di proprietà
Una registrazione richiede entrambe le chiavi. La chiave del nodo firma un breve messaggio che indica l'account del proprietario e un blocco recente, e la chiave del proprietario firma la transazione che lo contiene. Nessuna delle due chiavi da sola può registrare la coppia, e nessuno può registrare il nodo di qualcun altro sotto il proprio account. La stessa prova è richiesta per aumentare lo stake e per rivendicarlo. La sua struttura esatta è in registrare un nodo.
Gli operatori creano entrambe le chiavi da sé. Nulla viene rilasciato da altri, e nessun altro ne detiene una copia.
Spostare il seggio su una nuova chiave del nodo
Se una chiave del nodo viene esposta, o la macchina viene sostituita, il proprietario può spostare il seggio su una nuova chiave del nodo senza registrarsi di nuovo. NodeRegistrationUpdate contiene la nuova chiave di 32 byte, con una prova di proprietà firmata dalla nuova chiave. Il nodo conserva il suo id, il suo punteggio, il suo stato in coda e la sua ammissione. Il cambio ha effetto 120 blocchi (30 minuti) dopo il blocco che lo include.
Anche la chiave del nodo può spostare lo stake
Custodisci la chiave del nodo con la stessa cura di una chiave di wallet. Chi la detiene può rivendicare lo stake del seggio su un account che controlla, con ClaimNodeRegistration. La rivendicazione del proprietario stesso viene trattata come una rimozione, con lo stesso periodo di attesa di 7 giorni. Quella di chiunque altro viene annunciata ed eseguita 40.320 blocchi (7 giorni) dopo, a meno che il proprietario non rimuova prima il nodo, quindi un proprietario che tiene d'occhio la catena ha una settimana per reagire (uscire dal registro). È anche la strada prevista per un proprietario che ha perso l'accesso all'account del proprietario: la rivendicazione arriva allora da un altro account, quindi anch'essa viene eseguita 7 giorni dopo.
Altre chiavi
Le chiavi native possono essere derivate da una frase di recupero lungo m/44'/883'/n', e la stessa chiave di 32 byte può essere scritta anche come chiave di relay (ZBR_) o di gateway (ZBG_) (chiavi e tipi di account). Le quattro chiavi di ruolo del protocollo (autorità di release, autorità delle pagine, tesoreria e market maker) sono chiavi separate su dispositivi separati (ZooBC Foundation); a un operatore non ne serve nessuna.