El ritmo de admisión
ZooBC admite nodos nuevos en su registro de nodos de uno en uno, con un temporizador que va despacio a propósito. La parte de la producción de bloques de un operador es su proporción de las plazas, así que el ritmo al que se pueden ganar plazas es el ritmo al que cualquiera puede ganar poder sobre la cadena. El protocolo fija ese ritmo, y cualquiera puede observarlo.
Por qué despacio
En Proof of Work, una parte de la producción de bloques puede comprarse tan rápido como el hardware; en Proof of Stake, tan rápido como las monedas. En ZooBC esa parte tiene que ser admitida, un nodo por ciclo de admisión, al ritmo que fija el protocolo. Por tanto, una toma de control repentina, por ejemplo para revertir un pago, es imposible por principio, no solo cara (de qué protege Proof of Participation).
La lentitud no tiene nada que ver con la velocidad de la cadena. Un nodo nuevo puede arrancar desde una instantánea reciente en lugar de todo el historial, nadie entrevista a los operadores, y la cadena produce un bloque cada 15 segundos tenga los nodos que tenga.
La fórmula
El retraso entre dos admisiones es:
delay = clamp(base ÷ counted seats, minimum, maximum)
En mainnet la base es de 600 días, el mínimo de 7 días y el máximo de 90 días. Testnet usa los mismos valores. El primer recién llegado puede ser admitido 7 días después del génesis. El temporizador lee las marcas de tiempo de los bloques y admite como máximo un nodo por ciclo, nunca en el bloque que lo puso en cola. Qué nodo admite lo decide la cola.
El retraso hasta la siguiente admisión se fija cuando se admite a un recién llegado, contando las plazas anteriores a ese recién llegado.
Qué plazas cuentan
- Las plazas génesis cuentan como máximo como 11 (un valor del génesis, 11 en todas las cadenas).
- Los recién llegados cuentan por completo.
- Las plazas suspendidas no cuentan en ninguno de los dos grupos.
El límite impide que un génesis grande abra el registro deprisa. Sin él, una cadena lanzada con 100 plazas génesis calcularía 600 ÷ 100 = 6 días, elevados al mínimo de 7 días, y admitiría a un recién llegado cada semana desde el principio. Con el límite el recuento empieza en 11, y el calendario es el mismo que en una cadena de 11 plazas. Dejar fuera las plazas suspendidas significa que solo las plazas que trabajan marcan el ritmo.
El calendario
Si la cola nunca se vacía y nadie se va, los recién llegados entran así:
| Recién llegado | Entra hacia |
|---|---|
| 1.º | el día 7 |
| 2.º | el día 61.5 |
| 7.º | el día 278 |
| 11.º | el día 408 |
Eso da 9 recién llegados el primer año, 25 al final del segundo, 54 al tercero y unos 155 al quinto. A partir de 86 plazas contadas, 600 ÷ 86 queda por debajo de 7 días, así que manda el mínimo: las admisiones pasan a ser semanales desde aproximadamente el recién llegado número 77, unos 3.5 años después del génesis. Un aspirante que ganara absolutamente todas las admisiones tendría su 12.ª plaza, suficiente para superar en número a las 11 plazas génesis, solo hacia el día 437.
Mientras decide el término de la base, el registro crece una fracción fija por unidad de tiempo, porque cada admisión añade una plaza y el retraso es la base dividida entre las plazas. Por tanto, duplicar el registro lleva aproximadamente base × ln 2, unos 416 días en mainnet, sea cual sea su tamaño.
Casos especiales
- Un registro pequeño. Mientras haya menos nodos activos que
min_registry_size(7 en mainnet), el retraso máximo se limita a 7 días. - Tras una parada larga, el temporizador admite un nodo y después recupera su cadencia normal.
- Devnet, la cadena de desarrollo, usa la misma fórmula con una base de 180 segundos, un mínimo de 60 segundos y un máximo de 300 segundos, así que sus admisiones llegan con minutos de diferencia.
Todas las entradas están en la cadena, así que cualquiera puede recalcular cuándo toca la siguiente admisión.