Chapitre 08 : Le minage
Le minage
Le minage est un élément déterminant, c’est grâce à lui que l’on a une blockchain qui est immuable, c’est lui qui fait qu’il est quasiment impossible pour quiconque de modifier l’historique des transactions. En contrepartie de ce travail primordial, à chaque nouveau bloc, des nouveaux bitcoins peuvent être créés et récupérer par le mineur (en plus des frais des différentes transactions inclus dans le block).
Ce n’est clairement pas facile à comprendre, car je ne vois pas d’analogie avec ce qui fait notre quotidien. Cela fonctionne un peu comme une compétition avec comme objectif qu’il y ait un nouveau block crée à peu près toutes les 10 minutes. Un peu comme les transactions, la personne qui a trouvé un bloc “valable” va publier ce bloc, l’ensemble des nœuds va vérifier que le bloc publié correspond bien aux critères attendus et si oui, va le propager aux autres nœuds et il sera ainsi ajouté à la blockchain.
Essayons de schématiser les choses, un block contient les champs suivants :
- Le numéro de version du protocole.
- Le hash du block précédent.
- Arbre de Merkle (Un hachage de la racine de l’arbre Merkle des transactions de ce bloc, un résumé en fait).
- L’heure approximative de création du block.
- Cible de difficulté.
- Nonce.
Le jeu ressemble à cela pour un mineur :
- Je collecte l’ensemble des transactions que j’ai reçues depuis le dernier block (memory pool / transaction pool).
- Je produis un entête de block avec l’arbre de merkle des transactions et j’y ajoute les transactions.
- Je mets par exemple 0 dans
nonce
. - Je calcule le hash de tout ça.
En fonction de la “puissance du réseau”, si je veux que mon block soit accepté, il faut que mon hash commence par un
certain nombre de 0. Imaginons que la cible de difficulté soit de 9, alors il faut que le hash de mon nombre commence
par neuf “0”. Si ce n’est pas le cas, je modifie mon bloc, je remplace le “0” dans nonce
par “1” et je recalcule mon
hash… est-ce qu’il commence par neuf “0” ? Non ? on continue jusqu’à ce que cela soit le cas ou que quelqu’un
d’autre ait trouvé la bonne valeur de nonce
!
Et l’ensemble des mineurs font cela dans leur coin en continu… le premier qui trouve la valeur de nonce qui fait que le hash de son block respecte la cible de difficulté va publier son bloc. Chaque nœud va faire ses vérifications le nouveau block sera ajouté à la blockchain stockée sur chaque nœud.
Ce principe s’appelle la preuve de travail.
Pourquoi tout ça ?
Vous le savez, le Bitcoin est décentralisé ce qui signifie qu’il n’y a pas une entité en charge de dire la vérité. Vous ne pouvez et de toute façon, vous ne devez faire confiance à personne.
Imaginez que vous soyez un nœud, vous venez d’être installé… vous allez vous connecter à d’autres nœuds pour récupérer la blockchain, les dernières transactions et les derniers blocs… que se passe-t-il si un nœud se met à vous envoyer des données falsifiées qui vous font croire que par exemple une adresse X a 150000 Bitcoins. Si vous ne vérifiez pas, vous pourriez accepter une transaction qui vous a donné ses 150000 Bitcoins!
C’est à cela que sert la preuve de travail !
Gardez à l’esprit l’incroyable puissance de calcul nécessaire à créer chaque bloc… ce qui fait que si vous prenez le dernier bloc bitcoin ajouté et la chaine qui est dessous de ce bloc (grâce au parent hash), vous avez des calculs impossibles à refaire pour un ou même plusieurs acteurs.
Gardez aussi à l’esprit que le nœud va suivre une règle assez simple, il accepte la chaine la plus complexe (en termes de calcul).
Alors votre nœud démarre, le “mauvais nœud” va vous envoyer des blocks qu’il a lui-même calculé et qui correspondent à la vérite qu’il veut vous faire croire… Imaginons qu’ils vous aient envoyé 450 000 nœuds, il a du calculé les nonces lui-même… il est donc très certainement en dessous de ce que l’ensemble du réseau bitcoin. Votre nœud va à un moment demander des blocks à d’autres nœuds (sur une autre plage réseau), s’il tombe sur un nœud honnête, il va recevoir par exemple d’autres blocks et comme il est honnête, les blocks envoyés seront complètement différents et surtout beaucoup plus “compliqués”.
Le nœud va donc tout simplement supprimer les blocks du méchant et prendre les blocks du gentil, pas parce qu’il est gentil, mais parce que la règle est de suivre la chaine la plus complexe. Toute l’architecture repose sur le fait que chaque nœud, peut vérifier chaque transaction, chaque signature, chaque bloc par lui-même et la preuve de travail lui permet de vérifier qu’il y a bien une vérité issue d’un consensus global.
La création de bitcoins
Bitcoin a une politique monétaire fixe et déflationniste. Cela signifie que l’on sait quasiment quand chaque Bitcoin est ou sera créée et qu’il n’y aura jamais plus de 21 millions de Bitcoins. À 21 millions, plus aucun bitcoin ne sera créé et les mineurs ne gagneront plus que l’argent des frais de transaction.
La règle est assez simple, à peu près tous les 4 ans, le nombre de bitcoins créé par bloc est divisé par deux et on a commencé avec des blocks qui généraient 50 bitcoins chacun.
Ajustement de la difficulté
Nous avons vu que la difficulté était ajustable… mais pourquoi ? Bitcoin est décentralisé, personne ne commande, mais l’objectif reste de faire un bloc toutes les 10 minutes… Mais comment être sûr que cela prenne 10 minutes alors que vous ne connaissez pas la puissance de calcul des mineurs à l’avance ?
Quand Bitcoin, a commencé, il y avait une puissance de X TH/S, aujourd’hui, on est à Y TH/S… et pourtant Bitcoin a pour mission de ne créer un bloc que toutes les 10 minutes. C’est ici qu’intervient la cible de difficulté. Elle permet d’ajuster “automatiquement” la difficulté en fonction du temps qu’il a fallu pour réaliser les précédents blocs.
En fait, tous les 2 016 blocks, les nœuds redéfinissent la cible de difficultés en comparant le temps qui a été mis à faire ses blocs par rapport aux 20 160 minutes que cela aurait dû prendre. Pour faire simple, si le réseau trouve des blocs plus rapidement que toutes les 10 minutes, la difficulté augmente (la cible diminue). Si la découverte de blocs est plus lente que prévu, la difficulté diminue (la cible augmente).
La cible étant le nombre de 0 que doit avoir le calcul du hash du bloc, plus vous avez besoin de 0, moins il y a de solution possible ! Le marché peut donc pousser des mineurs à venir ou à fermer… Bitcoin lui s’adapte à la puissance utilisée.