Il ritmo di ammissione
ZooBC ammette nuovi nodi nel suo registro dei nodi uno alla volta, con un timer che procede lentamente di proposito. La quota di produzione dei blocchi di un operatore è la sua quota dei seggi, quindi il ritmo con cui si possono conquistare seggi è il ritmo con cui chiunque può acquisire potere sulla catena. Il protocollo fissa questo ritmo, e chiunque può osservarlo.
Perché lentamente
Con il Proof of Work, una quota della produzione dei blocchi si può comprare tanto in fretta quanto l'hardware; con il Proof of Stake, tanto in fretta quanto le monete. In ZooBC quella quota deve essere ammessa, un nodo per ciclo di ammissione, a una velocità fissata dal protocollo. Una presa di controllo improvvisa, per esempio per annullare un pagamento, è quindi impossibile in linea di principio, non solo costosa (da cosa si difende il Proof of Participation).
La lentezza non ha nulla a che vedere con la velocità della catena. Un nuovo nodo può partire da uno snapshot recente invece che dall'intera cronologia, nessuno sottopone gli operatori a colloqui, e la catena produce un blocco ogni 15 secondi qualunque sia il numero dei suoi nodi.
La formula
Il ritardo tra due ammissioni è:
delay = clamp(base ÷ counted seats, minimum, maximum)
Su mainnet la base è di 600 giorni, il minimo di 7 giorni e il massimo di 90 giorni. Testnet usa gli stessi valori. Il primo nuovo arrivato può essere ammesso 7 giorni dopo la genesi. Il timer legge i timestamp dei blocchi e ammette al massimo un nodo per ciclo, mai nel blocco che lo ha messo in coda. Quale nodo ammettere lo decide la coda.
Il ritardo fino all'ammissione successiva viene fissato quando un nuovo arrivato viene ammesso, contando i seggi precedenti a quel nuovo arrivato.
Quali seggi contano
- I seggi genesi contano al massimo come 11 (un valore genesi, 11 su ogni catena).
- I nuovi arrivati contano per intero.
- I seggi sospesi non contano in nessuno dei due gruppi.
Il tetto impedisce che una genesi numerosa apra in fretta il registro. Senza di esso, una catena avviata con 100 seggi genesi calcolerebbe 600 ÷ 100 = 6 giorni, portati al minimo di 7, e ammetterebbe un nuovo arrivato ogni settimana fin dall'inizio. Con il tetto il conteggio parte da 11, e il calendario è lo stesso di una catena con 11 seggi. Escludere i seggi sospesi fa sì che solo i seggi che lavorano fissino il ritmo.
Il calendario
Se la coda non si svuota mai e nessuno esce, i nuovi arrivati entrano così:
| Nuovo arrivato | Entra circa il |
|---|---|
| 1º | giorno 7 |
| 2º | giorno 61,5 |
| 7º | giorno 278 |
| 11º | giorno 408 |
Questo dà 9 nuovi arrivati nel primo anno, 25 entro la fine dell'anno 2, 54 entro l'anno 3 e circa 155 entro l'anno 5. Da 86 seggi conteggiati, 600 ÷ 86 è meno di 7 giorni, quindi subentra il minimo: le ammissioni diventano settimanali più o meno dal 77º nuovo arrivato, circa 3,5 anni dopo la genesi. Un candidato che vincesse ogni singola ammissione otterrebbe il suo 12º seggio, abbastanza per superare in numero gli 11 seggi genesi, solo intorno al giorno 437.
Finché decide il termine di base, il registro cresce di una frazione fissa per unità di tempo, perché ogni ammissione aggiunge un seggio e il ritardo è la base divisa per i seggi. Raddoppiare il registro richiede quindi circa base × ln 2, circa 416 giorni su mainnet, qualunque sia la sua dimensione.
Casi particolari
- Un registro piccolo. Finché i nodi attivi sono meno di
min_registry_size(7 su mainnet), il ritardo massimo è limitato a 7 giorni. - Dopo uno stallo prolungato, il timer ammette un nodo e poi riprende la sua cadenza normale.
- Devnet, la catena di sviluppo, usa la stessa formula con una base di 180 secondi, un minimo di 60 secondi e un massimo di 300 secondi, quindi le sue ammissioni sono distanziate di pochi minuti.
Ogni input è sulla catena, quindi chiunque può ricalcolare quando è prevista la prossima ammissione.