En détail : Mining et consensus.

Le minage (mining) est le processus par lequel des nouveaux bitcoins sont créés mais c’est aussi le processus qui sécurise le système et empêche la création de fausses transactions ou qu’un même bitcoin soit dépensé deux fois. L’idée ici étant de récompenser les mineurs qui sécurisent le système en leur octroyant de la monnaie (en plus des frais inclus dans chaque transaction).

Note : le nombre total de bitcoins que l’on peut créer est limité. Il ne pourra y en avoir que 21 millions et cette limite sera atteinte en 2140. À ce moment, les mineurs seront motivés à continuer leur travail grâce aux frais de transactions. Ceci en fait une monnaie déflationniste dans le sens où un bitcoin devrait avoir plus de pouvoir d’achat dans le temps car de plus en plus de richesses seront créées sans qu’il n’y ait de nouveaux bitcoins en contrepartie.

Concrètement le métier des mineurs est de valider les nouvelles transactions et de les ajouter dans le blockchain. Toutes les 10 minutes, toutes les transactions qui ont été créées depuis l’ajout du dernier bloc de transactions, sont regroupées dans un nouveau bloc qui doit être “validé” par les mineurs. Cette validation consiste en une compétition entre tous les mineurs afin qu’ils résolvent un problème mathématique basé sur le contenu du nouveau bloc à valider (appelé bloc candidat). La solution de ce problème appelé “preuve de travail” est ajouté dans le bloc afin de prouver qu’il y a eu un effort conséquent réalisé sur celui-ci.

Cet aspect est fondamental car c’est ce qui permet à Bitcoin de se passer d’une autorité centrale et afin de bien le comprendre, nous allons détailler son fonctionnement.

La problématique clé à traiter est la suivante : comment mettre d’accord un réseau d’inconnus sur une vérité universelle en sachant que, dans un réseau d’inconnus, on ne peut faire confiance à personne. Pour ce faire, le créateur de Bitcoin, Satoshi Nakamoto, a imaginé un mécanisme décentralisé appelé “consensus émergent”.

Comme nous l’avons vu, si vous voulez transférer des bitcoins à une adresse, vous devez créer une transaction et l’envoyer au premier nœud du réseau que vous trouvez qui se chargera de la propager à l’ensemble du réseau.

Certains des nœuds du réseau bitcoin sont spécialisés dans le minage. Ils attendent la création de nouveaux blocs et, à ce moment là, ils commencent la compétition afin de rempoter les nouveaux bitcoins qui seront créés par la personne qui résoudra le plus vite le problème posé par le nouveau bloc.

Concrètement, à chaque nouvelle transaction reçue, un nœud va l’ajouter à son stock de transactions où elles attendent d’être ajoutées dans un nouveau bloc, le bloc candidat. Lorsqu’un bloc est validé par un nœud, le réseau bitcoin va prévenir tout le monde afin de lancer une nouvelle compétition pour créer un nouveau bloc avec les transactions qui ont été stockées depuis les 10 dernières minutes.

En effet, après avoir vérifié que toutes les transactions qui sont dans le stock ne sont pas déjà incluses dans le bloc calculé précédemment (si il y en a, il les enlève tout simplement), le nœud va créer un nouveau bloc avec les transactions se trouvant dans son stock. Puis il va essayer de le rendre valide et donc acceptable pour les autres membres du réseau et donc “ajoutable” au blockchain. Pour cela, il va essayer de fournir la preuve de travail en essayant de résoudre un calcul mathématique qui implique de tester énormément de possibilités.

Concrètement, le nœud va créer un bloc lui même, en local, avec dans l’entête les champs suivants :

Version : Numéro de version du logiciel/protocole.

Hash du bloc validé précédent : “empreinte digitale” du bloc parent.

Merkle Root.

Timestap : Date approximative de la création du bloc.

Difficulty target : Niveau de difficulté (et oui, la difficulté du problème varie “en fonction” de la puissance totale du réseau afin que, peu importe le nombre de machines qui font du minage, il faille toujours à peu près 10 minutes pour valider un bloc).

Nonce : C’est ce paramètre que les mineurs vont faire évoluer (par exemple en l’incrémentant) afin de trouver la bonne valeur de nonce qui permet de créer un bloc valide.

Je vais un petit peu simplifier les choses mais la règle du jeu va être la suivante : le vainqueur, qui gagnera 25 bt plus les frais de transactions, sera celui qui trouve la première valeur de nonce qui fait que l’entête du nouveau bloc, hachée via SHA-256, va commencer par cinq “0”.

Note : en fait, ce n’est pas vraiment une histoire de nombre de zéros mais plutôt un nombre le plus petit possible à trouver et qui commence donc par beaucoup de zéros mais cela ne change pas la compréhension du système.

Donc notre nœud de minage va mettre la valeur “1” dans le champs “nonce”, puis va concaténer tous les champs de l’entête et calculer la valeur sha256 de l’ensemble de cette chaîne. Si le résultat ne commence pas par cinq “0”, il va mettre la valeur “2” dans le champ “Nonce”, concaténer tous les champs, calculer la valeur sha-256 et vérifier si le résultat commence par cinq “0” et ainsi de suite jusqu’à ce que quelqu’un dans le réseau bitcoin y arrive. Pas la peine de rêver, il n’y a aucune autre façon de faire que d’essayer des milliards de combinaisons au hasard.

C’est donc une compétition mondiale entre des milliers de machines qui effectuent des calculs “complexes” afin de trouver une valeur particulière à partir des données du nouveau bloc à valider.

Lorsqu’un nœud a trouvé un la valeur de nonce qui convient pour en faire un bloc valide, il transmet le bloc aux autres membres du réseau qui vont le vérifier et le transmettre aux autres et ainsi de suite jusqu’à ce que tout le réseau le reçoive et l’ajoute au blockchain. La compétition pour ce bloc étant terminée, l’ensemble des machines repartent de zéro avec un nouveau bloc et ceci, toutes les 10 minutes.

Note : dans le bloc qu’il va générer, le mineur rajoute une transaction spéciale qui va créer les bitcoins (25 aujourd’hui) dans le réseau et il va, bien sûr, se mettre en destinataire de ces bitcoins. Il se transférera aussi les frais des différentes transactions.