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
| Mot | Ce que ça veut dire |
|---|---|
| Consensus | l’accord de tous les participants sur une même version du registre |
| Fourche | deux chaînes valides qui partagent un début puis se séparent |
| Travail d’une chaîne | le nombre de blocs fois le travail d’un bloc |
| Chaîne valide | une chaîne dont chaque lien, chaque empreinte et chaque preuve se vérifient |
| Bloc orphelin | un 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
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îne | Blocs | Difficulté | Travail | Verdict |
|---|---|---|---|---|
| X | 5 | 2 | 5 fois 256, soit 1280 | Valide, mais moins de travail |
| Y | 3 | 3 | 3 fois 4096, soit 12288 | Valide, la plus de travail : elle gagne |
| Z | 9 | 1 | 9 fois 16, soit 144 | Plus 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
docker exec jupyter python3 steps/fork.pyAffiché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.