Wiki ZooBC
Proof of Participation

Tours, cadence et fenêtres

ZooBC vise un bloc toutes les 15 secondes. Après chaque bloc, le temps est découpé en tours de 15 secondes, et le tirage désigne un producteur par tour. L’horodatage d’un bloc le place dans un tour, et seul un nœud tiré pour ce tour ou pour le tour précédent peut le produire. Cette règle donne à la chaîne un rythme régulier et garantit qu’un producteur absent retarde le bloc suivant de 15 secondes, jamais davantage.

Tours et cibles

Soit P l’horodatage du bloc précédent. Le tour r a sa cible à P + 15 × r : le tour 1 à 15 secondes après le bloc précédent, le tour 2 à 30 secondes, le tour 3 à 45 secondes, et ainsi de suite. Le producteur du tour 1 vise à horodater son bloc à sa cible. S’il reste silencieux, le producteur du tour 2 produit le bloc en visant 30 secondes ; et ainsi de suite en descendant la liste.

Les hauteurs ne sont jamais sautées. Quand un producteur est absent, le bloc suivant arrive simplement 15 secondes plus tard, à la même hauteur, du producteur suivant dans l’ordre. Chaque nœud tiré avant le producteur effectif compte un tour manqué (voir les tours manqués).

Une frise chronologique après le bloc précédent : le tour 1, à +15 s, reste silencieux et compte un tour manqué ; le tour 2, à +30 s, produit le bloc ; le tour 3 n’est pas nécessaire.
Une frise chronologique après le bloc précédent : le tour 1, à +15 s, reste silencieux et compte un tour manqué ; le tour 2, à +30 s, produit le bloc ; le tour 3 n’est pas nécessaire.

Deux tours pour chaque producteur

Un producteur tiré au tour i peut produire un bloc du tour i ou du tour i + 1. Un nœud du tour 1 en retard peut donc encore livrer pendant le tour 2, alors que le nœud du tour 2 y a droit lui aussi. À tout moment, deux nœuds tirés ont le droit de produire, et la chaîne n’attend jamais un seul nœud. Elle n’attend pas non plus qu’un nœud soit suspendu : une suspension exige quatre tours manqués d’affilée et ne fait que retirer un nœud des tirages futurs.

Les tours 1, 2 et 3 sous forme de bandes autour de +15 s, +30 s et +45 s ; le nœud du tour 1 peut encore livrer pendant le tour 2, et le remplaçant du tour 2 horodate à +30 s.
Les tours 1, 2 et 3 sous forme de bandes autour de +15 s, +30 s et +45 s ; le nœud du tour 1 peut encore livrer pendant le tour 2, et le remplaçant du tour 2 horodate à +30 s.

Dans quel tour tombe un horodatage

Le tour d’un bloc horodaté à l’instant T est :

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

Chaque tour a aussi une fenêtre d’acceptation de 14 secondes, de 7 secondes avant sa cible à un peu moins de 7 secondes après. En secondes entières :

TourCibleSecondes comptées par la formuleFenêtre d’acceptation (cible ± 7 s)
1P + 15jusqu’à P + 22P + 8 à P + 21
2P + 30P + 23 à P + 37P + 23 à P + 36
3P + 45P + 38 à P + 52P + 38 à P + 51
4P + 60P + 53 à P + 67P + 53 à P + 66

La dernière seconde que la formule attribue à chaque tour (P + 22, P + 37, P + 52…) se situe une seconde au-delà de la fenêtre de ce tour. Les validateurs vérifient l’horodatage d’un bloc par rapport à la fenêtre de son tour avec 2 secondes de tolérance, si bien que ces secondes de jointure sont elles aussi acceptées.

Le tour compte à deux titres. Il décide qui peut produire le bloc, et il plafonne le poids du bloc dans le choix de branche : un bloc n’est jamais pesé comme meilleur que le tour dans lequel tombe son horodatage, de sorte qu’un producteur tiré au tour 2 qui horodate dans le tour 3 ne pèse pas plus qu’un bloc du tour 3.

Un axe du temps à partir du parent P, avec les tours 1 à 4 en bandes adjacentes ; un horodatage à P + 50 tombe dans le tour 3, son poids compte donc au moins 3 tirages.
Un axe du temps à partir du parent P, avec les tours 1 à 4 en bandes adjacentes ; un horodatage à P + 50 tombe dans le tour 3, son poids compte donc au moins 3 tirages.

Règles d’horloge appliquées par chaque nœud

  • Un bloc horodaté moins de 13 secondes après son parent est refusé comme produit trop vite (l’intervalle de 15 secondes moins 2 secondes de tolérance). Il est donc impossible d’horodater un bloc immédiatement, dès qu’un vide est constaté.
  • Un bloc horodaté plus de 7 200 secondes (2 heures) en avance sur l’horloge d’un nœud est refusé par ce nœud jusqu’à ce que son horloge le rattrape.
  • Après un arrêt de plus d’une heure (la limite de récupération de 3 600 secondes), un bloc est encore accepté lorsqu’il vient du producteur attendu par le tirage, de sorte qu’une chaîne à l’arrêt peut repartir.

Deux fenêtres interviennent. Un producteur tiré au tour i doit horodater son bloc dans la fenêtre de création de ce tour, de 7 secondes avant la cible du tour à 27 secondes après, ce qui empiète sur le tour suivant. Les validateurs exigent aussi que l’horodatage se situe dans la fenêtre d’acceptation du tour dans lequel il tombe, avec les 2 secondes de tolérance.

Politique locale de minutage

Deux minutages relèvent de la politique propre à chaque nœud, et non des règles de consensus. Le producteur tiré en premier envoie son bloc à P + 15 ; les autres envoient le leur à la fin de la fenêtre de leur tour moins 5 secondes (et jamais avant P + 15). Et environ une fois par seconde, chaque nœud applique, parmi les blocs candidats qu’il détient, celui de plus basse position dont la fenêtre est ouverte.

À titre de comparaison, Bitcoin vise un bloc toutes les dix minutes. Le rythme de 15 secondes de ZooBC est le même sur toutes les chaînes ZooBC : une journée compte 5 760 blocs (voir blocs et temps).

Voir aussi