lun, 02/07/2018 - 16:47
Vous avez certainement lu des articles concernant les blockchains et le minage, le sujet a peut-être même occupé quelques discussions dans votre cercle d'amis.
Les informations sur le sujet sont malheureusement bien trop souvent partielles ou axées uniquement sur le prisme financier. Comprendre ce sujet nécessite avant tout de comprendre les bases technologiques et logiques de cette technologie.
Cet article vous donnera donc les bases indispensables sur la compréhension de la blockchain et portera ensuite plus en détail sur le minage de blocs.
Introduction succincte à la Blockchain
La blockchain est une technologie qui a la mérite de bien porter son nom, ce n'est en effet ni plus ni moins qu'une liste chaînée de blocs de données.
Ces chaînes peuvent être publiques et accessibles à tout un chacun ou bien être privées et avoir un accès et donc un usage restreint à une entreprise ou un groupement d'entreprises.
Ce qui va nous intéresser particulièrement dans cet article est le processus d'ajout de bloc de données dans une blockchain.
En effet les différentes blockchains dont vous pouvez entendre parler se différencient par de nombreux aspects : taille de blocs, support de smart-contract...mais également par leurs algorithmes de consensus. C'est cet algorithme qui va permettre à la blockchain de définir les blocs à ajouter à sa liste de données. Un de ces algorithmes utilise ce qu'on appelle des "mineurs", qui "minent" et font donc du "minage" (sic). Les mineurs (les Hommes extrayant du charbon) cassaient des blocs de roche tandis que les mineurs (les logiciels clients de blockchain) construisent des blocs de données.
Blocs de données
Une blockchain peut être visualisée comme étant un grand registre comptable. Ce sont donc des données regroupées par bloc, et ces derniers sont organisés sous forme de liste immuable dans le temps. Ces données peuvent être de plusieurs natures. La première de ces possibles natures est une transaction, entre deux comptes. Des données plus "évoluées" peuvent également être présentes, comme les smart-contracts. Ces derniers sont des programmes distribués. Pour ce qui est de notre sujet du minage ils ne nous intéressent que pour être des données que l'on peut miner.
Un bloc est validé dès qu'il est ajouté à la chaîne. Il faut imaginer qu'un certain nombre de transactions sont en attente d'être ajoutées dans un bloc qui sera validé.
Le coeur de la blockchain est donc de décider quelles transactions seront présentes dans le prochain bloc que l'on validera et ajoutera à la chaîne. Ce fonctionnement est nommé consensus. Tous les acteurs du réseau de la blockchain doivent arriver à un consensus sur ce futur bloc. Comment se mettre tous d'accord? Qui décide? ...
Consensus et preuve de travail
Nous avons précédemment vu que différents types de consensus étaient possibles pour les blockchains. A l'heure actuelle, il y a trois grands types de consensus utilisés : la preuve de travail, le preuve d'autorité, la preuve d'enjeu.
La preuve d'autorité est la moins repandue des trois en apparence. Elle consiste en une liste de nœuds dans le réseau qui seront seuls à pouvoir décider des données à ajouter à la blockchain.
La preuve d'enjeu est la plus récente de cette liste. Son principe est de donner le pouvoir d'ajouter des blocs de données aux nœuds ayant le plus d'intérêt à ce que la blockchain continue de vivre et soit cohérente.
Enfin la preuve de travail, qui nous intéresse aujourd'hui est le premier consensus qui a été historiquement utilisé. Elle met en avant la puissance de calcul pour décider qui peut ajouter des données à la blockchain. Elle reste la preuve la plus utilisée à l'heure actuelle.
Preuve de travail, concrètement et simplement en quoi ça consiste
Le principe en quelques mots est de faire un calcul très complexe qui peut être prouvé très facilement. Autrement dit, le travail de calcul fait par le mineur est très coûteux en terme de calcul, tandis que la vérification de ce travail s'il est fructueux peut être fait très rapidement et économiquement.
Imaginez un puzzle avec énormément de pièces, vous prendrez beaucoup de temps à l'assembler, mais une fois terminé, n'importe qui se rendra rapidement compte si une pièce est mal placée ou si l'ensemble est juste. Il en va de même avec le minage.
Mais imaginez maintenant que vous choisissez les pièces à l'aveugle et au hasard pour construire votre puzzle, et vous serez un peu plus près de la réalité du minage.
Preuve de travail, concrètement et techniquement en quoi ça consiste
Nous allons maintenant regarder les détails techniques de la preuve de travail. Vous pouvez en effet miner des blocs en lançant un client sur votre poste de travail sans jamais vous soucier de ce qui est réellement fait en tâche de fond mais il est toujours intéressant de se pencher sur ces détails afin de mieux comprendre les bases et avoir du recul sur les considérations de plus haut niveau.
Nous n'allons pas pouvoir décrire ici toutes les différentes implémentations de la preuve de travail pour chacune des blockchains. J'ai donc choisi de vous parler de Bitcoin qui a été la première des blockchains et qui à sa création mis en place cet algorithme.
La preuve de travail de Bitcoin est basée sur la fonction HashCash. Celle-ci a été créée en 1997 par Adam Beck dans le but de faire des systèmes anti-DoS de mails.
Cette fonction a été adaptée pour Bitcoin qui l'utilise avec du sha-256^2 (double sha-256).
Qu'est ce qu'un hash
Un hash est le résultat d'une fonction qui transforme une chaîne de caractères en une autre chaîne de caractères. Lorsque l'on modifie d'un seul caractère la chaîne de caractères de départ, le hash résultant est totalement différent. Il est impossible de déduire simplement la chaîne de caractères de départ depuis son hash.
Sha-256^2
Sha-256 est une fonction de hashage, Sha-256^2 est l'application double de celle-ci. Elle produit une chaîne de caractères hexadécimaux.
Que font réellement les mineurs?
Les mineurs prennent un ensemble de transactions en attente et forgent un paquet de données avec une en-tête de cette forme :
Champ | Utilité | Mis à jour à quel moment? | Taille (Bytes) |
Version | Numéro de version du bloc | Logiciel mis à jour avec une nouvelle version | 4 |
hashPrevBlock | Hash de 256 bits de l'en-tête du bloc précédent | Un nouveau bloc arrive | 32 |
hashMerkleRoot | Hash de 256 bits de l'ensemble des transactions contenues dans le bloc | Une transaction est acceptée | 32 |
Time | Timestamp courant. Nombre de secondes écoulées depuis le premier janvier 1970 | Toutes les secondes | 4 |
Bits | "Target" courante en version compacte | La difficulté a changé, a été adaptée | 4 |
Nonce | Un nombre sur 32 bits (démarre à 0) | Un hash est tenté (incrémental) | 4 |
La partie "HashMerkleRoot" est donc calculée en fonction des transactions contenues dans le bloc.
Quand est-ce qu'un bloc miné est valide?
Le bloc est considéré comme valide et peut-être soumis au reste du réseau lorsque le hash de l'en-tête du bloc (cf tableau précédent) est inférieur à la target (champ "Bits" pour Bitcoin.
Le sha-256 de l'en-tête du bloc est compris entre 0 et le max sur 256bits. Dès lors que sa valeur est numériquement inférieure à la target, le bloc est éligible.
La loi du plus fort
Comme vous avez pu voir, le calcul lors du minage coûte en terme d'énergie dépensée et l’aléa est omniprésent. Le minage est récompensé, et c'est ce point qui fait que beaucoup s'y intéressent. Dès lors différentes stratégies sont apparues permettant d'être plus efficace :
- davantage de puissance
Le point le plus important à retenir dans le minage est le caractère aléatoire du résultat. Partant de ce principe, un des axes d'améliorations pour les mineurs est donc de diminuer le temps de calcul afin de multiplier leurs tentatives. Du matériel dédié et performant a d'ailleurs été développé pour le minage Bitcoin. Certaines blockchain avec preuve de travail font en sorte que le matériel dédié soit plus difficile à développer afin de limiter la tendance de professionnalisation du minage.
- pools
L'entraide peut être une force, ou du moins ici la mutualisation. Certains mineurs se regroupent en coopératives nommées "pools" permettant de partager entre chaque participant la récompense lorsque l'un d'entre eux réussi à miner un bloc. Ce type d'organisation est devenue la norme pour les mineurs sur Bitcoin tant la concurrence est forte.
Critiques actuelles
Vous avez certainement entendu de nombreuses critiques au sujet des blockchains mettant en oeuvre la preuve de travail et le minage, notamment Bitcoin qui en est la plus connue des représentantes.
Les principales critiques sont de deux types : l'un touche à la technique et la sécurité avec le sujet des "51%", l'autre touche la consommation d'énergie et de manière plus masquée la technique avec le sujet des "calculs inutiles" et leur déperdition d'énergie.
Je vais essayer d'être le plus factuel possible. J'ai comme beaucoup un avis sur le sujet mais vais tenter de rester objectif. Les débats d'idées sur ce sujet auront plus lieu d'être lors de meetups ou discussions en communauté.
### 51%
La critique des 51% tient plus en une limitation technique de sécurité autour des blockchains.
En supposant qu'une personne, ou un groupe de personnes, regroupent plus de la moitié de la capacité globale de minage sur le réseau, alors cet attaquant a la possibilité de réécrire l'historique de la blockchain. Se faisant il peut faire disparaître, modifier ou créer des transactions.
Sur ce point, les blockchains ont une caractéristique constante : plus le nombre de contributeurs est élevé, plus le réseau est sécurisé. Ce dernier point va à l'encontre de ce qu'on peut imaginer instinctivement mais c'est une des plus grande force de ces réseaux décentralisés.
### Calculs perdus, consommation énergétique
La seconde principale critique provient du grand nombre de calculs faits par chacun des mineurs. Très peu de ceux-ci aboutissent à l'ajout effectif d'un bloc de données dans la blockchain. On peut alors considérer qu'il y a déperdition d'énergie lors de ces calculs. Doit-on se concentrer sur l'énergie nécessaire pour faire un calcul et prendre en compte dans ce cas le gaspillage énergétique? Ou bien doit-on considérer chacun de ces calculs comme étant une somme d’essais amenant à un résultat correct et ne prendre en compte que la somme de ces énergies? Je vous laisserai juges et me garderai bien ici d’enchaîner sur la rentabilité du minage, un article entier pourrait y être consacré.
Conclusion
Le sujet du "minage" ou "mining" est très actuel. Sa bonne compréhension nécessite de comprendre les fondements des blockchains. J'espère que cet article vous aura permis d'y voir plus clair et vous aura surtout donné envie d'en apprendre encore davantage.
A propos de l'auteur
Co-fondateur du meetup Blockchain&Société à Nantes
@kevin_biger