Wiki de ZooBC
Proof of Participation

Rondas, tiempos y ventanas

ZooBC apunta a un bloque cada 15 segundos. Después de cada bloque, el tiempo se divide en rondas de 15 segundos, y el sorteo designa a un productor por ronda. La marca de tiempo de un bloque lo sitúa en una ronda, y solo un nodo sorteado para esa ronda o para la anterior puede producirlo. La regla da a la cadena un ritmo constante y garantiza que un productor ausente retrase el siguiente bloque 15 segundos, nunca más.

Rondas y objetivos

Sea P la marca de tiempo del bloque anterior. La ronda r tiene su objetivo en P + 15 × r: la ronda 1 a los 15 segundos del bloque anterior, la ronda 2 a los 30 segundos, la ronda 3 a los 45 segundos, y así sucesivamente. El productor de la ronda 1 apunta a estampar su bloque en su objetivo. Si guarda silencio, el productor de la ronda 2 produce el bloque, apuntando a los 30 segundos; y así sucesivamente a lo largo de la lista.

Nunca se salta ninguna altura. Cuando un productor está ausente, el siguiente bloque simplemente llega 15 segundos más tarde, a la misma altura, del siguiente productor de la lista. Cada nodo sorteado antes del productor efectivo suma un turno perdido (véase turnos perdidos, suspensión y expulsión).

Una línea de tiempo después del bloque anterior: la ronda 1, a +15 s, guarda silencio y suma un fallo; la ronda 2, a +30 s, produce el bloque; la ronda 3 no hace falta.
Una línea de tiempo después del bloque anterior: la ronda 1, a +15 s, guarda silencio y suma un fallo; la ronda 2, a +30 s, produce el bloque; la ronda 3 no hace falta.

Dos rondas para cada productor

Un productor sorteado en la ronda i puede producir un bloque de la ronda i o de la ronda i + 1. Así, un nodo de la ronda 1 que llega tarde todavía puede entregar durante la ronda 2, mientras que el nodo de la ronda 2 también tiene derecho. En todo momento hay dos nodos sorteados con derecho a producir, y la cadena nunca depende de un solo nodo. Tampoco espera a que nadie sea suspendido: la suspensión requiere cuatro turnos perdidos seguidos y solo saca a un nodo de los sorteos futuros.

Las rondas 1, 2 y 3 como franjas alrededor de +15 s, +30 s y +45 s; el nodo de la ronda 1 todavía puede entregar durante la ronda 2, y el suplente de la ronda 2 estampa a +30 s.
Las rondas 1, 2 y 3 como franjas alrededor de +15 s, +30 s y +45 s; el nodo de la ronda 1 todavía puede entregar durante la ronda 2, y el suplente de la ronda 2 estampa a +30 s.

En qué ronda cae una marca de tiempo

La ronda de un bloque estampado en el instante T es:

round(T) = 1 + floor((T − P − 15 + 7) / 15)     (and never less than 1)

Cada ronda tiene además una ventana de aceptación de 14 segundos, desde 7 segundos antes de su objetivo hasta algo menos de 7 segundos después. En segundos enteros:

RondaObjetivoSegundos que cuenta la fórmulaVentana de aceptación (objetivo ± 7 s)
1P + 15hasta P + 22de P + 8 a P + 21
2P + 30de P + 23 a P + 37de P + 23 a P + 36
3P + 45de P + 38 a P + 52de P + 38 a P + 51
4P + 60de P + 53 a P + 67de P + 53 a P + 66

El último segundo que la fórmula asigna a cada ronda (P + 22, P + 37, P + 52, ...) queda un segundo después de la ventana de esa ronda. Los validadores comprueban la marca de tiempo de un bloque contra la ventana de su ronda con 2 segundos de tolerancia, así que esos segundos de junta también se aceptan.

La ronda importa dos veces. Decide quién puede producir el bloque, y limita el peso del bloque en la elección de bifurcación: un bloque nunca pesa como si fuera mejor que la ronda en la que cae su marca, así que un productor sorteado en la ronda 2 que estampa en la ronda 3 no pesa más que un bloque de la ronda 3.

Un eje de tiempo desde el bloque padre P con las rondas 1 a 4 como franjas contiguas; una marca en P + 50 cae en la ronda 3, así que su peso cuenta al menos 3 sorteos.
Un eje de tiempo desde el bloque padre P con las rondas 1 a 4 como franjas contiguas; una marca en P + 50 cae en la ronda 3, así que su peso cuenta al menos 3 sorteos.

Reglas de reloj que aplica cada nodo

  • Un bloque estampado menos de 13 segundos después de su bloque padre se rechaza por producirse demasiado rápido (el intervalo de 15 segundos menos 2 segundos de tolerancia). Por tanto, es imposible estampar un bloque al instante, en cuanto se nota un hueco.
  • Un bloque estampado más de 7200 segundos (2 horas) por delante del reloj propio de un nodo es rechazado por ese nodo hasta que su reloj lo alcance.
  • Tras una parada de más de una hora (el límite de recuperación de 3600 segundos), un bloque se sigue aceptando cuando viene del productor que el sorteo espera, de modo que una cadena detenida puede volver a arrancar.

Intervienen dos ventanas. Un productor sorteado en la ronda i debe estampar su bloque dentro de la ventana de creación de esa ronda, desde 7 segundos antes del objetivo de la ronda hasta 27 segundos después, lo que llega hasta la ronda siguiente. Los validadores exigen además que la marca caiga en la ventana de aceptación de la ronda en la que cae, con los 2 segundos de tolerancia.

Política de tiempos local

Dos tiempos son política propia de cada nodo, no reglas de consenso. El productor sorteado en primer lugar envía su bloque en P + 15; los demás envían el suyo al final de la ventana de su ronda menos 5 segundos (y nunca antes de P + 15). Y aproximadamente una vez por segundo, cada nodo aplica, entre los bloques candidatos que tiene, el de posición más baja cuya ventana esté abierta.

Como comparación, Bitcoin apunta a un bloque cada diez minutos. El ritmo de 15 segundos de ZooBC es el mismo en todas las cadenas ZooBC: un día son 5760 bloques (véase bloques y tiempo).

Véase también