Dans notre dernier article sur les mécanismes de consensus , nous avons parlé de la preuve de travail (PoW) et présenté l’idée générale du minage. Dans la plupart des articles, le minage est décrit comme l’exécution d’une tâche de calcul coûteuse ou la résolution d’un “puzzle”. Dans cet article, nous voulons expliquer ce qu’est ce puzzle. Si vous ne savez pas ce que sont les fonctions de hachage, vous devriez consulter l’article à ce sujet avant de commencer celui-ci sur le minage.

Comme vous l’avez peut-être remarqué dans notre article sur les mécanismes de consensus, ce ne sont pas toutes les blockchains qui ont des mineurs. Ce n’est que dans la preuve de travail qu’il y a du minage et donc les mineurs. Ils travaillent à sécuriser la blockchain contre les attaques et à protéger l’historique enregistré contre les changements.

Que fait un mineur?

La tâche principale d’un mineur est de collecter toutes les transactions envoyées sur le réseau. Le mineur vérifie si les transactions sont valides selon le protocole et les place ensuite dans un conteneur de données (le bloc). La première transaction d’un bloc est spéciale, la transaction de base de coins (traduit littéralement, en français on garde le mot d’origine: coinbase ndt). Dans la transaction coinbase, le mineur récompense sa propre adresse avec la prime de bloc, 12,5 BTC ou 12,5 ZEN actuellement (en fait, 7,5 ZEN, car 10% des récompenses de bloc vont respectivement aux opérateurs Secure Node et Super Node, et 20% à la Trésorerie d’Horizen). Ces coins n’existaient pas auparavant.

Habituellement, l’un des critères utilisés pour vérifier la validité d’une transaction est de savoir si l’expéditeur a suffisamment de fonds à l’adresse d’où il envoie la transaction. Les règles de transaction coinbase sont légèrement différentes. Le protocole permet à cette première transaction de n’avoir aucune entrée, c’est-à-dire de ne pas avoir d’expéditeur dans ce contexte. C’est ainsi que les mineurs se récompensent pour leur travail et que de nouveaux coins sont créés. Chaque ZEN ou bitcoin qui circule aujourd’hui a été crée dans une récompence de bloc.

Après que le mineur ait inclus la transaction coinbase, il rassemble les transactions qu’il a reçues des autres nœuds et les place dans le bloc sur lequel il travaille. Habituellement, le mineur place les transactions dans l’ordre dans lequel elles sont arrivées. En période de forte activité du réseau et de blocs pleins (un bloc a une taille maximale de données, la limite du bloc), le mineur peut choisir de n’inclure que les transactions qui comportent les frais de transaction les plus élevés.

De nombreux mineurs travaillent simultanément sur le bloc suivant. Chaque mineur peut avoir un bloc légèrement différent, soit parce qu’il a reçu les transactions dans un ordre différent de celui de ses concurrents, soit parce qu’il a choisi d’inclure un ensemble différent de transactions en fonction des frais de transaction joints. Le mineur qui résout le puzzle en premier, peut ajouter son bloc à la blockchain, y compris la transaction coinbase qui le récompense avec les coins nouvellement créées.

Miner Miner

Trouver un nonce

Alors, quel est le puzzle que les mineurs essaient de résoudre ? C’est là que nous devons parler à nouveau des fonctions de hachage.

L’une des propriétés importantes des fonctions de hachage cryptographiques est d’être pseudo-aléatoire. Vous ne devez pas être en mesure de prédire une modification de la sortie résultant d’une modification de l’entrée. À titre d’exemple : Si vous hachez l’entrée “1” et obtenez la sortie “00002” et hachez l’entrée “2” par la suite, la deuxième sortie a intérêt à ne pas être “00004” mais quelque chose comme “73968”, un nombre (pseudo-aléatoire) apparemment aléatoire.

Afin que le bloc soit valide, son hash doit atteindre une certaine cible. Cette cible n’est fondamentalement qu’un nombre et le hachage du bloc doit être inférieur ou égal à ce nombre. Dans ce contexte, vous entendrez souvent parler de difficulté. Alors que la cible est une valeur réelle dont le hachage du bloc doit être inférieur, la difficulté est une mesure relative de la cible actuelle par rapport à la cible la plus élevée possible. Lorsque la cible est abaissée, la difficulté augmente et il est plus difficile de trouver un hachage de bloc valide.

La plupart des données du bloc sont fixes, mais il y a un champ de données spécial dans chaque en-tête de bloc, le nonce, qui ne contient aucune information importante. Son seul but est d’être une variable (un nombre (number) utilisé une seule fois (once)), dans laquelle le mineur peut mettre différentes valeurs, pour changer la sortie de la fonction de hachage. Ce qui suit est une approche d’essai et d’erreur pour obtenir le bon hachage de bloc. Le nombre le plus bas qu’un entier de 256 bits peut représenter est 0, le nombre le plus élevé est \(1.1579 \cdot 10^{77}\)

Lorsqu’un mineur tente pour la première fois de résoudre un bloc, ce qui signifie calculer un hachage de bloc valide (avec le nombre requis de zéros en tête), il mettra une valeur aléatoire dans le champ de données nonce. Par souci de simplicité, disons que la valeur de nonce avec laquelle le mineur commence est “0”. Le hachage de bloc sera une valeur apparemment aléatoire dans la plage possible de la fonction de hachage.

Hash Cash PoW Hash Cash PoW

Le processus ressemble à ce qui suit :

  • Le mineur utilise la fonction de hachage pour calculer le hachage du bloc ; le hachage du bloc candidat comme nous l’avons appelé dans le graphique ci-dessus. Dans l’exemple, le hachage de bloc utilisant 0 comme valeur nonce n’atteint pas la cible.
  • Le mineur incrémente maintenant le nonce d’un cran et hashe le bloc à nouveau. Le hachage qui en résulte est toujours supérieur à la cible, de sorte que le mineur augmente à nouveau la valeur nonce. Il fait cela encore et encore.
  • Enfin, l’un des mineurs trouve un nonce n qui produit le résultat désiré : un hachage de bloc sous la cible.

Le taux de hachage sur le réseau Horizen est de 208,68 Mh/s au moment d’écrire ces lignes. Cela signifie que tous les mineurs combinés essaient 208.680.000 valeurs différentes pour le nonce chaque seconde. Vous pouvez vérifier la valeur actuelle ici.

Les mineurs ne peuvent pas tromper ce processus d’essais et d’erreurs à cause des propriétés des fonctions de hachage cryptographique. Vous vous souvenez de ce graphique de notre article sur la fonction de hachage ?

Hash function Hash function

Il n’y a aucun moyen de calculer un nonce valide à partir de la sortie souhaitée car la fonction de hachage est une fonction unidirectionnelle. Il est également impossible d’approximer un nonce valide par rapport aux sorties précédentes car la fonction de hachage est pseudo-aléatoire et vous ne pouvez pas prédire les changements dans la sortie. Chaque participant sur le réseau peut vérifier si la solution, une fois trouvée, est valide car la fonction de hachage est déterministe et produira le même résultat pour chaque noeud qui vérifie le bloc. L’exécution d’une seule opération de hachage est également très rapide.

Si vous souhaitez jouer avec les fonctions de hachage, vous pouvez le faire ici. Vous pouvez essayer de trouver le nombre le plus bas, qui produit un hachage avec un zéro en tête. C’est ce que les mineurs font toute la journée, mais ils cherchent des hash en commençant par beaucoup plus de zéros.

Temps de Bloc

Chaque protocole en preuve de travail définit un temps de bloc, un intervalle dans lequel un nouveau bloc doit être créé. Avec Horizen, c’est 2,5 minutes, avec Bitcoin 10 minutes. Lorsqu’un mineur résout un bloc, il le diffuse immédiatement sur le réseau, parce qu’il veut recevoir sa récompense. C’est pourquoi il ne faut pas exactement 10 minutes pour créer un nouveau bloc. 10 minutes est le temps moyen qu’il faut pour trouver un nonce valide et à son tour un hachage de bloc valide. Certains blocs sont résolus plus rapidement et d’autres prennent un peu plus de temps. Si plus de mineurs rejoignent le réseau et que le taux de hachage augmente, ils résoudront le problème plus rapidement en moyenne. Le protocole évalue la durée moyenne des blocs et ajuste la difficulté en conséquence tous les 8064 blocs. S’il faut moins de temps en moyenne pour résoudre un bloc, la difficulté augmentera, s’il faut plus de temps, la difficulté diminuera.

Matériel informatique

Lorsque Bitcoin est sorti en 2009, les gens utilisaient le CPU de leur PC, l’unité centrale de traitement, afin de miner du bitcoin. C’est l’unité de traitement la plus polyvalente d’un ordinateur, mais pas la plus efficace. Après un certain temps, les gens se sont mis à utiliser les GPU (Graphical Processing Unit) pour le mining. Les GPU sont plus spécialisés et efficaces pour certaines tâches, au prix d’être moins polyvalents. De nos jours, l’industrie du mining fonctionne sur des ASIC’s (Application Specific Integrated Circuits). C’est le matériel le plus efficace pour miner les cryptomonnaies parce qu’il est conçu avec un seul but en tête, calculer les valeurs de hachage avec une fonction de hachage spécifique.

Dans le matériel informatique, la polyvalence et l’efficacité ont leurs avantages et leurs inconvénients. Si vous voulez quelque chose qui peut accomplir plusieurs tâches, ce ne sera pas très efficace. Si vous voulez quelque chose qui est super efficace à une tâche, il ne sera pas très polyvalent. Vous pouvez trouver un excellent article sur le matériel de minage ici, écrit par David Vorick, développeur principal de Sia.

Comment cela protège-t-il le réseau ?

Vous savez maintenant qu’il faut énormément de travail pour résoudre un seul bloc dans une blockchain. Vous savez aussi que chaque bloc fait référence au bloc précédent en incluant son hachage de bloc, donc en les enchaînant. Vous savez aussi qu’en changeant une petite information dans un bloc, vous modifierez le hachage de ce bloc.

Si un attaquant voulait trafiquer n’importe quel enregistrement sur la blockchain, il devrait trouver un nonce valide pour le bloc qu’il a édité, ainsi qu’un nonce valide pour tous les blocs suivants. L’attaquant devrait faire tout cela par lui-même, et à un rythme plus rapide que le réseau honnête exécute le processus de mining. La règle de la chaîne la plus longue dont nous avons parlé dans notre dernier article sur les mécanismes de consensus détermine quelle branche de la blockchain est la plus valable au cas où un fork apparaît. Si l’attaquant n’a pas le contrôle de la majorité de la puissance de calcul, il ne peut pas changer la blockchain.

Un grand outil pour comprendre le caractère inviolable de la blockchain est cette démonstration de la blockchain. Nous vous encourageons à jouer avec. Cela vous aidera à intérioriser les concepts expliqués tout au long de ce chapitre.

Résumé

Les mineurs d’une blockchain en preuve de travail sécurisent le réseau avec leur puissance de calcul. Ajouter un bloc à la blockchain nécessite un grand nombre de suppositions aléatoires pour trouver un nonce qui produira un hachage de bloc valide. Le hachage de bloc doit satisfaire l’exigence de difficulté actuelle sur le réseau. Il est donc extrêmement difficile d’altérer les données de la blockchain. Un attaquant doit refaire le travail de trouver un nonce qui résulte en un hachage de bloc valide tout seul. Non seulement l’attaquant doit le faire pour le bloc qu’il souhaite manipuler, mais aussi pour tous les blocs suivants jusqu’à ce que la chaîne malveillante soit la plus longue et soit reconnue comme valide par le réseau entier. Parce que ce type d’attaque est incroyablement difficile, les blockchains sont considérées comme la structure de données la plus sûre que nous ayons à notre disposition aujourd’hui.

C’était le dernier article de notre chapitre sur le fonctionnement d’une blockchain. Ensuite, nous parlerons des portefeuilles (ou wallets), un outil qui vous aide à gérer vos clés et à créer des transactions.