À chaque tour de consensus, il faut ajouter un nouveau bloc, mais le livre blanc indique que ce tour n’est pas un processus unique terminé d’un seul coup : il se déroule en plusieurs itérations, et chaque itération se décompose en trois étapes. Le livre blanc, à la section 3.2, appelle ces trois étapes : Proposal, Validation et Ratification.

Première étape : Proposal. L’algorithme DS choisit aléatoirement un provisioner comme producteur de bloc, chargé de générer des blocs candidats, puis de les diffuser sur tout le réseau. Si aucun bloc candidat n’est produit ou reçu dans le délai de temporisation prescrit, cette étape renvoie NIL et passe directement à l’étape suivante — mais puisque l’on n’a pas de bloc candidat entre les mains, que vote-t-on ensuite ? La réponse : ne pas émettre un vote vide, mais voter NoCandidate, ce qui signifie « aucun bloc candidat n’est vérifiable ».$DUSK

Deuxième étape : Validation. L’algorithme DS sélectionne aléatoirement un ensemble de comités de vote, afin de vérifier le bloc candidat issu de l’étape précédente. Si le bloc candidat est valide, on vote Valid ; s’il est invalide, on vote Invalid ; et s’il n’y a aucun bloc candidat, on vote NoCandidate. Le comité de vote doit atteindre une majorité absolue des 2/3 pour obtenir un quorum. Si le quorum n’est pas atteint dans le délai, le système renvoie NoQuorum. La sortie de cette étape est un ValidationResult, qui comprend le type de vote ayant permis d’atteindre le quorum ainsi que la signature agrégée de tous les votants.@Dusk

Troisième étape : Ratification. On sélectionne ensuite un nouvel ensemble de comités de vote, qui confirme le résultat de Validation. Si, à l’étape précédente, un quorum de Valid a été atteint, ils confirment ce résultat ; si l’étape précédente est NoQuorum ou en échec, ils votent NoQuorum. Cette étape garantit que le résultat de la validation ne dépend pas d’une minorité, mais est reconnu par davantage de provisioners.

Si la Ratification renvoie Success, le bloc candidat est alors accepté officiellement comme nouveau bloc, et le tour se termine. Si la sortie est Fail ou unknown, on passe à la prochaine itération : on redésigne le producteur de blocs et on relance un vote. Le livre blanc précise que le nombre maximal d’itérations est déterminé par un paramètre global ; l’actuel est 50. Si 16 itérations consécutives échouent, le protocole entre en mode d’urgence (angle 10).

La logique centrale du design en trois étapes est l’équilibrage — le producteur de bloc ne peut que générer des blocs candidats, pas voter ; le comité de validation ne peut que vérifier, pas confirmer ; et le comité de ratification ne peut que confirmer le résultat de la validation, pas effectuer une nouvelle vérification. Aucun rôle ne peut, à lui seul, décider du destin d’un bloc.#dusk