Il punteggio di partecipazione
Il punteggio di partecipazione è la misura con cui ZooBC valuta quanto bene un nodo registrato svolge il suo lavoro. Va da 0 a 100 %, e ogni nodo parte dal 20 %. Sale quando i blocchi del nodo contengono le ricevute che ha guadagnato inoltrando dati, e scende finché il nodo è mancante dopo un turno saltato. Il punteggio decide la possibilità del nodo nella lotteria coinbase che distribuisce i nuovi ZBC, e un nodo il cui punteggio arriva a zero perde il suo seggio. Non cambia chi produce i blocchi.
La scala
Internamente il punteggio è un intero da 0 a 10^13, mostrato come 0-100 %. Ogni nodo parte dal valore predefinito di 2 × 10^12, cioè il 20 %, seggi genesi compresi. Un nodo nella coda non ha punteggio; l'ammissione scrive il valore predefinito. Il punteggio viene calcolato da ogni nodo a partire dalla catena stessa. Non è una valutazione data dagli utenti, e non è lo stake.
Come sale: le ricevute nei blocchi del nodo
L'inoltro fa guadagnare ricevute, non punteggio. Il punteggio si muove quando arriva il turno del nodo: nel blocco che produce, il nodo pubblica un campione delle ricevute guadagnate, e ogni validatore le verifica. Il numero di ricevute mostrate viene confrontato con un pivot:
pivot = floor(min(|S| − 1, P) / 2)
dove S è l'insieme di estrazione (i nodi attivi non sospesi) e P è il numero di peer prioritari, 12 su mainnet. Con 11 nodi selezionabili il pivot vale 5; da 13 nodi selezionabili in su vale 6. In altre parole, il pivot è circa la metà di quello che il produttore avrebbe potuto mostrare.
Mostrare più ricevute del pivot alza il punteggio del produttore; mostrarne meno lo abbassa. L'entità della variazione è inoltre proporzionata al numero di nodi attivi. Il risultato resta sempre tra 0 e 100 %. Un nodo i cui blocchi contengono poche ricevute tende quindi a scendere, anche se non salta mai un turno.
La salita è lenta di proposito: sotto i 2.880 nodi, un nodo che produce tutti i suoi blocchi con le relative ricevute impiega 30 giorni per andare da 0 a 100 %, in media circa 1,67 punti per unità di 12 ore.
Come scende: lo stato di mancante
Da qualsiasi turno saltato fino al suo prossimo blocco, un nodo è mancante e perde 5 punti per unità (12 ore sotto i 2.880 nodi), tre volte più in fretta di quanto salga un nodo perfetto. Sotto i 2.880 nodi un nodo silenzioso scende dal 20 % a zero in 2 giorni, dal 100 % in 10. Vedi turni mancati, sospensione ed espulsione.
Alcune cose non muovono affatto il punteggio. Una prova di archiviazione fallita non costa punteggio: un detentore messo in minoranza perde solo la ricompensa di archiviazione di quell'epoca (vedi pool di archiviazione decentralizzata). Nessun punteggio cambia prima dell'altezza 40, mentre la catena si avvia. E non esiste alcuna registrazione oraria di presenza né alcun voto: il punteggio deriva solo da ciò che i blocchi contengono e dai turni che i nodi saltano.
Che cosa decide il punteggio
Il reddito. Le nuove monete e le commissioni di ogni blocco vengono distribuite dalla lotteria coinbase. Il pool di ricompensa del blocco (la sua coinbase, le sue commissioni e una fetta del pool di longevità) viene diviso in quote uguali, una per estrazione. Ogni estrazione sceglie un nodo con una probabilità proporzionale al suo punteggio, da un generatore inizializzato con il seed del blocco precedente e il tag zbc-coinbase, così ogni nodo calcola gli stessi vincitori. Un nodo può vincere più estrazioni dello stesso blocco, e anche un nodo con un punteggio basso può vincere. C'è un'estrazione per ogni secondo dell'intervallo tra i due blocchi precedenti, al massimo 600, e mai più estrazioni che possessori di biglietti (un pool grande può aumentarne il numero, entro gli stessi limiti). I possessori di biglietti sono i nodi registrati maturi che non sono né mancanti né sospesi. Se nessuno di loro ha punteggio, il pool viene diviso in parti uguali.
Il seggio. Un nodo il cui punteggio arriva a zero viene espulso, a meno che non resterebbero meno di tre nodi attivi.
Nient'altro. Il punteggio non è un input dell'estrazione dei produttori, e non entra nel peso dei blocchi nella scelta del fork.
Perché potere e reddito restano separati
Tenere il punteggio fuori dall'estrazione è una scelta deliberata. Un nodo con un punteggio alto non ottiene alcun potere in più sulla catena: non produce più blocchi, non sceglie più seed e non ha più occasioni per escludere transazioni. Il potere sulla produzione dei blocchi resta uniforme per seggio, mentre il reddito segue il lavoro misurato. Lo stake non ha alcun ruolo in nessuno dei due: serve solo a far entrare un nodo in coda.
Ogni numero del punteggio, come il 20 % iniziale e le velocità di salita e di discesa, è un parametro genesi della catena.