La Preuve de Travail, ou comment Bitcoin empêche la triche

14 avril 2021

Résumé

Dans cet épisode, je t'explique ce qu'est la chaîne de blocs (blockchain) et pourquoi elle consomme de l'énergie au travers de la Preuve de Travail (Proof of Work).

La Preuve de Travail est essentiellement un mécanisme anti-triche qui permet d'ordonner les transactions Bitcoin de manière irréfutable. Cela empêche les acteurs malveillants de dépenser deux fois des bitcoins car l'histoire nous montre qu'ils ont déjà été dépensés.

En plus de jouer le rôle de mécanisme anti-triche, la Preuve de Travail sert également de forteresse d'énergie contre les assaillants du réseau Bitcoin 🛡.

Je te laisse en découvrir plus dans l'épisode, bonne écoute! 🎧

Ligne du temps

  • 00:34 - Retour sur ce qu'est un bitcoin
  • 01:42 - Pourquoi la Preuve de Travail
  • 03:05 - La chaîne de blocs (blockchain) expliquée
  • 08:10 - Pourquoi un battement toutes les 10 minutes ?
  • 10:51 - La Preuve de Travail comme solution
  • 12:06 - Comment organiser des chasses aux trésors ? 🏴‍☠️
  • 14:43 - Pourquoi les frais de minage ?
  • 15:42 - La dépense d'énergie et la planète
  • 16:46 - Pourquoi l'énergie rend le jeu équitable
  • 17:30 - Pourquoi l'énergie protège le réseau
  • 18:54 - Outro

Questions de Maman 💡

Ma Maman m'a posé quelques questions après avoir écouté l'épisode.

Comment le réservoir de transactions se constitue-t-il et comment y puise-t-on celles qu'on veut écrire ?

À chaque fois que ton wallet veut communiquer une transaction au réseau, il va envoyer le reçu à un noeud auquel il est connecté. Si tu n'as pas connecté de noeud à ton wallet (ce qui est probablement le cas, tu le saurais si tu l'avais fait), alors il va parler au noeud de ceux qui ont créé le wallet.

Tu as donc accès au réseau Bitcoin via ce tiers de confiance. C'est acceptable pour des transactions usuelles avec des amis, mais si tu étais un marchand, tu voudras probablement avoir ton propre noeud pour vérifier par toi-même que les reçus sont bien arrivés.

Le réservoir est simplement constitué par le noeud lui-même qui, à force de recevoir des transactions, les enregistre petit à petit. Il a son propre réservoir et le noeud qui mine y puise (via du code automatisé) les transactions qui lui donnent le plus de frais.

Comment limite-t-on le nombre de transactions à 7/sec ?

En bref, c'est écrit dans le code.

En moins bref, les blocs ont une taille limitée et donc la quantité que tu peux écrire de transactions par bloc est également limitée. Sachant qu'une transaction a une taille x et un bloc une taille maximale y, on trouve qu'il y a environ 7 transactions par seconde si on fait les calculs plus précis.

Comment définit-on le nombre magique à chercher ?

Bonne question!

Alors là, on entre un peu plus dans les détails. Quand tu calcules le hash d'un bloc, tu obtiens du texte en sortie. Par exemple:

hash(bloc23) => 131dmdskasd

Si tu ajoutes à ton bloc23 un chiffre appelé le nonce, tu vas avoir un nouveau hash. Exemple avec un nonce de 1:

hash(bloc23 + 1) => 45mfmfafldad

Si tu changes ton nonce, tu vas avoir un nouveau résultat de hachage:

hash(bloc23 + 21314) => 000131d1s

Le résultat du hachage est complètement aléatoire, pas possible de savoir ce qu'il vaudra avant de l'avoir calculé. C'est comme un feu d'artifice, tu sais pas trop ce que ça va donner avant qu'il ait explosé 🎆.

Par contre des fois, le résultat aura des zéros au début, comme dans "000131d1s". Ça peut arriver mais c'est assez rare. Plus tu demandes de zéros devant plus c'est rare. Question de hasard, c'est comme demander de faire 4 fois 6 d'affilée avec des dés.

Le nombre magique est un nonce qui, ajouté à un bloc, donne un hash avec suffisamment de zéros en en-tête. Par exemple si on veut 6 zéros, il faudra essayer plein de nonce jusqu'à ce que tu trouves:

hash(bloc23 + 77131812410410) => 000000d13

Lorque tu as un nonce valide, tu as gagné et tu partages l'info au réseau.

La quantité de zéros en en-tête va être ajustée automatiquement par l'algorithme pour maintenir un temps moyen entre réussite de 10 minutes.

Comment on calcule le hash? C'est un standard mathématique que je te laisse explorer ici si tu es curieuse.

Comment écrire un reçu ?

Là il faut aller lire les lignes du code source pour comprendre comment les maths sont utilisées. Je l'ai fait une fois mais ça me demanderait de ressortir le bouquin de programmation 🤓 Si tu es curieuse, j'ai lu Programming Bitcoin de Jimmy Song.

De manière pratique, le wallet va tout prendre en main à ta place et l'écrire en fonction des montants que tu veux envoyer.

Qui définit un nombre de satoshis à recevoir pour un minage et comment le fait-il ?

À nouveau, c'est le wallet. Il va te proposer un frais par défaut en fonction des algorithmes que les développeurs auront implémenté. Dans la plupart des bons wallets, tu peux ajuster les frais à ta convenance. Plus cher, ça va aller plus vite dans un bloc, moins cher et il faudra attendre plus longtemps.

La meilleure technique, attention technique de pro, c'est d'aller jeter un oeil direct dans le réservoir de transactions ici.

https://mempool.space/graphs

Tu verras combien les usagers sont en train de payer en ce momemt et accessoirement, c'est très joli.

Tu dis que tu ne mines pas mais que tu vérifies les transactions : comment le fais-tu ?

J'ai acheté un Raspberry Pi sur lequel j'ai installé Raspiblitz qui est une implémentation pour faire un noeud à la maison. Grosso modo ça te prend 30"-1h à bidouiller et après tu as le noeud chez toi.

Oui c'est un peu plus avancé ici mais j'ai bien confiance que tout ça va se simplifier dans le temps!

Ne manque aucun épisode, abonne-toi 🚀