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

Preuve de travail et minage

Après cette leçon: Je peux expliquer pourquoi miner un bloc coûte du travail alors que le vérifier est rapide.

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

Pourquoi le minage demande-t-il tant de travail ?

La preuve de travail est une règle : pour ajouter un bloc, il faut trouver un nombre, le nonce, qui donne à l’empreinte un début imposé. Il n’existe aucun raccourci, on essaie encore et encore.

Chercher coûte cher, vérifier ne coûte presque rien. Cet écart rend très coûteux de refaire un vieux bloc.

À la fin de cette leçon

Remarque

Je peux expliquer pourquoi miner un bloc coûte du travail alors que le vérifier est rapide.

Mots-clés

MotCe que ça veut dire
Nonceun nombre que l’on change à chaque essai pour modifier l’empreinte
Difficultéle nombre de zéros imposés au début de l’empreinte
Minageessayer des nonces jusqu’à trouver une empreinte qui respecte la difficulté
Preuve de travaille nonce gagnant : il prouve qu’on a fait beaucoup d’essais
Essaiun calcul d’empreinte avec un nonce donné

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

Un nonce se change jusqu’à réussir

La règle dit : l’empreinte du bloc doit commencer par un certain nombre de zéros. Comme on ne peut pas choisir une empreinte, on change une valeur du bloc : le nonce.

On essaie 0, puis 1, puis 2, et ainsi de suite. À chaque essai, on recalcule l’empreinte. On s’arrête dès qu’elle commence par assez de zéros.

Chercher un nonce en Python

Code: python
import hashlib

donnees = "Camille paie Hugo 5"
difficulte = 2
nonce = 0
# on recalcule l'empreinte jusqu'à obtenir assez de zéros
while not hashlib.sha256((donnees + str(nonce)).encode()).hexdigest().startswith("0" * difficulte):
    nonce = nonce + 1
print("nonce trouvé :", nonce)

Pourquoi le résultat est toujours le même

Le programme affiche nonce trouvé : 240. Les données sont les mêmes à chaque fois, donc la première réussite est toujours 240.

Avec la difficulté 1, le même texte donne 11. Avec 3, il donne 1830. Changez la difficulté et relancez pour le voir.

Le labo mine un bloc à quatre difficultés

Le script mine.py du labo mine un bloc avec la difficulté 1, 2, 3 puis 4. Attention : il écrit des mots anglais, comme « difficulty », « nonce » et « tries », qui veut dire essais.

Chaque ligne donne le nonce trouvé, le nombre d’essais, et le début de l’empreinte.

Miner le même bloc à quatre difficultés

Commande
docker exec jupyter python3 steps/mine.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.

Exemple travaillé : chaque zéro coûte seize fois plus

DifficultéEssais du laboEssais attendus en moyennePourquoi
11516Un chiffre sur 16 est un zéro
2835256Deux zéros : 16 fois 16 chances de moins
379924096Trois zéros : 16 fois 16 fois 16
410902865536Quatre zéros : un essai sur 65536 réussit

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

Calculer 16 puissance 4

Commande
docker exec jupyter python3 -c "print(16 ** 4)"

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.

Erreur fréquente

Attention

On croit qu’un zéro de plus double le travail. En réalité, chaque zéro le multiplie par 16, car il y a seize chiffres hexadécimaux. Passer de la difficulté 3 à 4 fait donc passer de 4096 à 65536 essais en moyenne.

Vérifier une preuve de travail est instantané

Pour contrôler un nonce, il suffit d’un seul calcul d’empreinte. On prend le bloc et son nonce, puis on regarde si l’empreinte commence par les zéros.

Trouver demande des milliers d’essais, vérifier en demande un. C’est ce déséquilibre qui rend utile la preuve de travail.

Pourquoi refaire un vieux bloc coûte cher

Si l’on change le bloc 1, son empreinte change. Le bloc 2 doit donc être miné de nouveau, puis le bloc 3, jusqu’au dernier.

Chaque bloc refait coûte le même nombre d’essais que la première fois. Plus le bloc est ancien, plus il y a de travail à rejouer.

À 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.