La construction du blockchain

Pour chaque nouveau bloc qu’il reçoit, chaque ordinateur d’un nœud complet exécute un protocole qui aboutit soit à rejeter ce bloc s’il a déjà été reçu ou s’il est invalide, soit à l’ajouter à l’extrémité de la chaîne locale après une ultime vérification de toutes les écritures qu’il contient, soit à le mettre en attente.

Rappelons que chaque bloc contient l’identificateur de son prédécesseur dans la chaîne de blocs de son mineur. Dans le cas le plus courant, ce prédécesseur est également le bloc terminal de la chaîne locale, à laquelle il viendra s’ajouter après une ultime vérification de sa validité. En cas de réussite, les transactions contenues dans ce nouveau bloc sont validées par ce nœud, notamment celle qui crédite le mineur qui a créé ce bloc d’un certain nombre de bitcoins. Le bloc en question est rediffusé aux nœuds voisins, et ainsi de proche en proche à l’ensemble du réseau. En cas d’échec, le bloc est conservé en attente, en s’incorporant à une branche secondaire de la chaîne de blocs.

Si le nœud reçoit un nouveau bloc qui contient une écriture déjà présente dans la chaîne locale, ce bloc est rejeté. Sur chaque nœud, c’est donc le premier bloc valide reçu qui sera inscrit dans sa chaîne de blocs. Les blocs construits par d’autres mineurs dans le même cycle de 10 minutes seront rejetés. C’est pourquoi les mineurs se livrent à une course de vitesse pour voir leurs blocs ajoutés à la chaîne et recevoir la rémunération correspondante.

Par suite du délai de propagation des blocs à travers le réseau, deux blocs différents créés dans le même cycle peuvent arriver dans un ordre différent selon les nœuds récepteurs, qui construisent alors des versions différentes du registre. On dit qu’il y a bifurcation (« fork »). La plupart du temps, une bifurcation est temporaire et est corrigée par le protocole de construction de la chaîne de blocs au cycle suivant.

Afin que tous les exemplaires de la chaîne de blocs soient identiques sur tous les nœuds, bien que construits indépendamment, ce protocole incorpore un mécanisme dit « de consensus », qui est un élément vital du système. La règle utilisée par Bitcoin est de retenir la chaîne qui a demandé le plus grand travail de construction des blocs qui la composent. À cette fin, l’en-tête de chaque bloc contient la difficulté du travail qui été effectué pour le construire. Le fait que la somme de contrôle du bloc respecte les contraintes imposées est la « preuve de travail » prouvant que ce travail a bien été effectué.

Si à la suite de l’ajout d’un bloc à une chaîne secondaire, celle-ci a demandé plus de travail que la chaîne principale actuelle, cette chaîne secondaire doit devenir la branche principale. Pour cela, le programme remonte à l’endroit où elle s’est détachée de la branche principale, revalide un par un les blocs et les écritures qu’ils contiennent, ajoute ce bloc à l’extrémité de la nouvelle chaîne en cours de construction si ces contrôles sont satisfaits, en abandonnant ce processus dès la première erreur.

Ce protocole très complexe est le véritable cœur du système, car il est le seul moyen de modifier la chaîne de blocs, et ses résultats sont irréversibles. Il assure également des fonctions telles que la résolution des cas de bifurcation et la reconstruction de la chaîne en cas d’arrêt de l’ordinateur ou du réseau.

À l’issue de cette deuxième phase, chacun des milliers d’exemplaires de la chaîne de blocs qui existent sur les nœuds complets a été prolongé par un bloc choisi par chaque nœud parmi les propositions des mineurs en appliquant la règle de consensus programmée. Si tous les nœuds complets mettent en œuvre les mêmes règles de validation des écritures et des blocs, ce bloc additionnel est le même pour tous les nœuds, et donc tous ces exemplaires de la chaîne de blocs restent identiques. Ce sont ainsi quelques milliers de nouvelles écritures qui sont enregistrées de façon définitive et deviennent accessibles sur quelques milliers de sites.