Bloques y tiempo
ZooBC añade un bloque a su cadena aproximadamente cada 15 segundos, en todas las redes. El protocolo mide el tiempo en bloques: cuando una regla dice «un día», significa 5760 bloques. Conocer esa conversión hace fáciles de leer la mayoría de las cifras de esta wiki.
Un bloque cada 15 segundos
El intervalo de 15 segundos es un parámetro del génesis de cada cadena (min_block_interval), el mismo en devnet, testnet y mainnet. Después de cada bloque, un sorteo designa en orden a los nodos que pueden producir el siguiente (sorteo). El nodo sorteado en primer lugar tiene la primera ronda, que apunta a 15 segundos después del bloque anterior. Si llega tarde o está desconectado, el nodo sorteado para la ronda siguiente puede producir el bloque 15 segundos más tarde, y así sucesivamente, de modo que un productor ausente retrasa un bloque en lugar de detener la cadena (rondas, tiempos y ventanas).
Un bloque que llega menos de 13 segundos después de su bloque padre se rechaza por «producirse demasiado rápido», así que ningún productor puede acelerar la cadena.
Los bloques vacíos también cuentan
Los bloques siguen llegando tanto si alguien envía transacciones como si no. Un bloque sin transacciones sigue haciendo trabajo:
- lleva recibos, las pruebas firmadas de que los nodos se retransmitieron datos entre sí, que alimentan la puntuación de participación;
- a partir de la versión 0.5.8 lleva las monedas nuevas programadas para su momento, la coinbase, exactamente igual que un bloque lleno.
La liberación de ZBC nuevos sigue al reloj, no al número de bloques: la coinbase de un bloque es lo que el calendario de 15 años libera entre la marca de tiempo del bloque anterior y la suya (suministro y emisión). Una racha de bloques lentos no acuña menos a lo largo de un día, y una ráfaga de bloques rápidos no acuña más.
Duraciones contadas en bloques
Como el intervalo es fijo, el protocolo escribe las duraciones como números de bloques. Estas son las conversiones habituales, con algunas de las duraciones que aparecen a lo largo de esta wiki (valores de mainnet):
| Bloques | Tiempo | Dónde aparece |
|---|---|---|
| 120 | 30 minutos | retraso antes de que surta efecto una rotación de la clave de nodo (claves de un nodo) |
| 240 | 1 hora | una época de pruebas de almacenamiento (almacenamiento descentralizado) |
| 720 | 3 horas | el límite de reversión (finalidad y reversión) |
| 2880 | 12 horas | la unidad del reloj de la puntuación mientras haya menos de 2880 nodos (turnos perdidos, suspensión y expulsión) |
| 5760 | 1 día | la ventana de asistencia de un nodo en cola (cola) |
| 11 520 | 2 días | espera por defecto antes de que un nodo que se actualiza solo instale una versión (versiones y actualizaciones) |
| 40 320 | 1 semana | el periodo de enfriamiento a la salida del stake de un nodo (salir del registro) |
| 172 800 | 30 días | un ciclo de instantánea, que es también el periodo del alquiler de cuenta y de los votos de precio (alquiler de cuenta y la poda, votos de precio) |
Unos pocos límites se cuentan en segundos, porque comparan marcas de tiempo. Una transacción, por ejemplo, puede incluirse por defecto hasta una hora después de su propia marca de tiempo (caducidad y marcas de tiempo).
La spine: un bloque al día
Junto a la cadena principal, cada nodo mantiene la spine, una cadena compañera lenta de puntos de control que no lleva transacciones (cadena spine). Produce un bloque al día en testnet y en mainnet (cada 86 400 segundos) y uno cada hora en devnet. Cada bloque de la spine lo cofirman los nodos registrados y nombra un bloque de la cadena principal a 760 bloques de profundidad (3 horas y 10 minutos), lo que da a la cadena principal un suelo que ninguna reorganización puede cruzar (finalidad y reversión).
Los tiempos de devnet
Devnet, la red de desarrollo, mantiene el bloque de 15 segundos pero acorta muchas de las duraciones anteriores, como el límite de reversión (60 bloques) y el ciclo de instantánea (240 bloques), para que sus efectos se vean en minutos u horas. Testnet y mainnet usan los mismos valores. La comparación completa está en devnet, testnet y mainnet.