Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Consensus et fourches d’une chaîne

Après cette leçon: Je peux choisir la chaîne valide parmi plusieurs en comparant leur travail.

Leçon de 55 min1 commandeLab blockchain : une chaîne jouet en Python à lire, casser, miner et signer

Comment choisir la bonne chaîne parmi plusieurs ?

Le consensus est la manière dont des participants qui ne se font pas confiance s’accordent sur une même chaîne. Quand deux chaînes valides existent, tout le monde suit celle qui représente le plus de travail.

Vous allez comparer des chaînes, écarter les fausses, et dire laquelle gagne.

À la fin de cette leçon

Remarque

Je peux choisir la chaîne valide parmi plusieurs en comparant leur travail.

Mots-clés

MotCe que ça veut dire
Consensusl’accord de tous les participants sur une même version du registre
Fourchedeux chaînes valides qui partagent un début puis se séparent
Travail d’une chaînele nombre de blocs fois le travail d’un bloc
Chaîne valideune chaîne dont chaque lien, chaque empreinte et chaque preuve se vérifient
Bloc orphelinun bloc d’une branche abandonnée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une fourche : deux blocs trouvés au même moment

Dans un vrai réseau, deux mineurs peuvent trouver chacun un bloc suivant au même moment. Deux chaînes existent alors : elles ont le même début, puis chacune a son dernier bloc.

Les deux sont valides. Il faut une règle commune pour savoir laquelle garder.

La règle : suivre le plus de travail

Chaque participant écarte d’abord toute chaîne qui n’est pas valide. Parmi les autres, il garde celle dont le travail est le plus grand.

Le travail d’une chaîne est le nombre de blocs multiplié par ce que coûte un bloc : 16 puissance la difficulté. Ce n’est pas toujours la plus longue.

Comparer le travail de deux chaînes

Code: python
def travail(blocs, difficulte):
    # chaque bloc a coûté environ 16 puissance la difficulté d'essais
    return blocs * 16 ** difficulte


x = travail(5, 2)
y = travail(3, 3)
print(x)
print(y)
if y > x:
    print("la chaîne Y gagne")
else:
    print("la chaîne X gagne")

Exemple travaillé : la plus courte peut gagner

ChaîneBlocsDifficultéTravailVerdict
X525 fois 256, soit 1280Valide, mais moins de travail
Y333 fois 4096, soit 12288Valide, la plus de travail : elle gagne
Z919 fois 16, soit 144Plus longue, mais très peu de travail

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le labo crée une fourche et tranche

Le script fork.py du labo part de deux blocs communs. Il en ajoute un de plus d’un côté, deux de l’autre. Attention : il écrit des mots anglais, comme « work » (travail), « wins » (gagne) et « valid ».

Il affiche si les deux chaînes sont valides, leurs blocs, leur travail et celle qui gagne.

Créer une fourche et choisir

Commande
docker exec jupyter python3 steps/fork.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Que devient la branche abandonnée ?

Les deux chaînes sont valides. L’une compte 3 blocs et 768 de travail, l’autre 4 blocs et 1024. La seconde gagne, et la première est abandonnée.

Le bloc de la branche abandonnée est orphelin. Ses transactions repartent attendre d’entrer dans un nouveau bloc, sauf si elles sont déjà dans la chaîne gagnante.

Erreur fréquente

Attention

On croit que la chaîne gagnante est la plus longue. C’est le plus de travail qui compte, et seulement parmi les chaînes valides. Une chaîne longue mais invalide, ou facile à fabriquer, ne gagne pas.

Changer le passé coûte très cher

Pour imposer sa chaîne, il faut produire plus de travail que tous les autres ensemble, et refaire tous les blocs depuis la modification. C’est le prix de la preuve de travail.

Plus un bloc est ancien, plus il est profond sous les autres, et moins on peut le changer.

À propos de ce labo et de sa source: Lab blockchain : une chaîne jouet en Python à lire, casser, miner et signer

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.