Bitcoin #2: Proof of Work et Blockchain, comment ça marche ?

C’est bon, vous avez tout compris sur le Bitcoin ? Vous savez maintenant qu’il s’agit d’une monnaie comme une autre qui vise simplement à s’affranchir du contrôle des états et permettre à tout un chacun de vérifier son fonctionnement ?
On va pouvoir passer aux choses sérieuses alors: son fonctionnement sur le plan technique. Oui, on va parler de Proof of Work. Attention, cette fois je ne vais pas me priver d’utiliser du jargon. Je ne vous garantis pas que l’article soit à la portée de toutes et tous.

Un peu d’histoire

La crise de 2008

Les gens nés au 20ème siècle comme moi se rappellent tous de la crise économique de 2008. Ce dont tout le monde ne se souvient pas forcément, c’est à quel point les états on dû y mettre du leur (enfin du nôtre hein, les impôts toussa toussa) pour sortir les banques de la merde noire où elles s’étaient elles-mêmes plongées. En fait, on a tous payé des institutions privées avec de l’argent public. Parce que le système de création monétaire dépend tellement d’elles que si on ne l’avait pas fait, l’écroulement complet de notre civilisation aurait pu être à craindre. lol.

A cette époque, des groupes de hackers activistes (ou hacktivistes) et autres cypherpunks étaient les seuls à imaginer des solutions technologiques à ce genre de problèmes. Pendant que les politiques faisaient semblant de proposer des nouvelles taxes sur la spéculation. Qui n’ont grosso modo jamais abouti. Et c’est pourquoi on peut s’attendre à un nouveau crash dans les années à venir.

Satoshi et le whitepaper

Il se trouve qu’en 2009 un individu, ou groupe d’individus, connu sous le pseudonyme Satoshi Nakamoto a proposé une nouvelle monnaie numérique indépendante de tout tiers de confiance. Nommée Bitcoin, cette monnaie était présentée sous la forme d’un « papier blanc ». En fait un article scientifique se basant sur d’autres articles, des précédents technologiques et des tentatives antérieures comme la b-money de Wei Dai (1998). Ce papier était accompagné d’une implémentation en C++. Ce logiciel a été proposé à la communauté open source.

Quelques cypherpunks comme Nick Szabo ou Hal Finney s’y sont rapidement intéressés et ont permis au projet de grandir doucement sur le forum bitcointalk et à travers des listes de diffusions regroupant principalement des initiés. Le bitcoin a commencé à devenir ce qu’il est aujourd’hui quand en 2010 un des programmeurs intéressés par le projet a convaincu la pizzeria au coin de la rue de lui vendre deux pizzas pour 10000 BTC. A partir de là c’est l’histoire d’une technologie qui grandit tranquillement, s’améliorant toujours et se faisant de plus en plus connaître.

Enfin ce qui nous intéresse aujourd’hui c’est la technologie. Je vous invite donc tout simplement à lire le whitepaper. Son contenu est relativement simple. Pas de cryptographie trop avancée. Mais plutôt le fonctionnement des grands concepts. Notez bien cependant que quelques détails d’implémentation on changé depuis. Si vous n’aimez pas l’anglais, voilà ma version de l’explication.

Le Proof of Work

Quand on veut créer une monnaie, plusieurs questions importantes se posent:

  • Qui créé la monnaie, et comment ?
  • Dans le cas d’une monnaie numérique, qui vérifie les transactions ?
  • Comment empêcher de dépenser plusieurs fois la même somme ou de copier l’argent ?
  • Où les données sont-elles enregistrées ?

La grande innovation de Satoshi et du bitcoin répond à ces questions. On l’appelle souvent blockchain (ou chaîne de blocs en bon français). La technique qui permet la vérification des blocs en question est le Proof of Work, ou PoW (preuve de travail). Voici l’idée:

1. Les adresses

Chacun est libre de créer une (ou plusieurs) adresse(s) sur le réseau. Pour cela, on fait un peu de cryptographie et on génère une paire de clefs, l’une privée qui sert à signer les transactions quittant cette adresse, l’autre publique, qui est (en gros) l’adresse.

2. Les transactions

Ce qui compte c’est le transfert de valeur. Donc on enregistre nulle part l’existence d’une pièce, un billet ou bien un compte. Non, ce qu’on enregistre c’est un ensemble de transactions. Ces transactions transfèrent de la valeur d’une adresse à une autre. Et bien sûr, pour être valide, une transaction doit avoir comme entrée une autre transaction, qui a été acceptée par le réseau.

Par exemple, si Bob veut envoyer 2 bitcoins à Alice, il doit pouvoir trouver un ensemble de transaction qui arrivent sur des adresses qu’il possède et dont la valeur totale est supérieure ou égale à 2 bitcoins. Lorsque c’est fait, il crée une nouvelle transaction qui prend tout celles nécessaires en entrée et propose en sortie 2 bitcoins vers une adresse appartenant à Alice. Ainsi que l’éventuel reste vers une de ses propres adresses. On appelle ces deux sorties de la transaction des sorties. Original ? En anglais ça donne output. Et les output d’une transactions servent donc d’input (entrée) à une autre transaction. Tant qu’une sortie n’est pas dépensée on la désigne comme UTXO. Ça signifie Unspent TransaXion Output, soit sortie de transaction non dépensée. Et pour calculer le montant à votre disposition, on fait simplement la somme de vos UTXO.

Bob va ensuite partager cette transaction avec tout les autres utilisateurs avec qui il est connecté. De cette manière chacun saura que les transactions précédentes on été dépensés.

Voilà, On a donc répondu à deux questions. Vous savez maintenant où sont stockées les données: partout. Chez tout utilisateur d’un logiciel bitcoin complet. En effet, le software garde en mémoire toutes vos transactions et toutes celles des autres afin de vérifier les transactions qu’on vous envoie. Et tout le monde vérifie toutes les transactions.
C’est quand même autre chose que l’opacité des banques suisses, non ?

3. Les blocs

Il nous reste deux points importants à comprendre. D’abord comment empêcher quelqu’un de dépenser plusieurs fois la même transaction ? Eh oui, les plus malins d’entre vous imaginent déjà Bob qui va dépenser une UTXO chez Alice et puis s’empresse d’aller dépenser la même chez Charles avant que Charles et Alice n’aient le temps de communiquer. Charles ne voyant pas que l’argent est déjà dépensé chez Alice.

C’est pour prévenir ce scénario qu’on utilise les blocs. Un bloc, c’est un ensemble de transactions, regroupées et validées. Un utilisateur un peu plus consciencieux que les autres a pris les temps de vérifier quelques milliers de transactions. Il s’assure qu’aucune de celles-ci ne dépense deux fois la même UTXO. Il ajoute une petite référence au dernier bloc connu et un coup de tampon. Ensuite il peut partager son bloc avec tout le monde.

Quand un autre utilisateur reçoit le bloc, il va le vérifier aussi. L’avantage, c’est que toutes les transaction contenues dans un bloc sont assurée de n’avoir que des entrées pas encore dépensées. Comme ça avant d’accepter (ou de créer) une nouvelle transaction, on vérifie que les entrées sont bien les UTXO d’une transaction présente dans un bloc valide. De cette manière on est certain de ne pas recevoir de l’argent qui a été dépensé ailleurs.

Le truc c’est qu’on veut que les blocs s’empilent les uns sur les autres. Personne ne veut voir deux blocs en concurrence l’un avec l’autre et contenant différentes transactions. C’est pourquoi le système impose d’attendre 10 minutes pour créer un nouveau bloc. Mais comme il n’y a personne pour dire à qui le tour est de créer un bloc, c’est là qu’entre en jeu le Proof of Work.

4. Le minage, propriété centrale du Proof of Work

Le principe du Proof of Work, c’est qu’un certain nombre d’individus volontaires (les mineurs) se mettent en concurrence pour créer des blocs. Le coup de tampon sur le bloc dont je vous parlait tout a l’heure est en réalité une preuve cryptographique, un haché (ou hash en anglais). Ce haché est une suite de caractères incohérente et pseudo-aléatoire qui représente un ensemble de données. Le haché varie du tout au tout pour la moindre petite modification des données sur lesquelles il est calculé. Mais pour des données identiques on obtiendra toujours le même haché. L’idée est donc de définir une difficulté qui se traduit par un nombre de zéros qui doit se trouver au début du haché.

Les blocs comprennent une zone que l’on appelle nonce qui contient un nombre inutile. Lorsque un mineur veut créer un bloc, il calcule le haché avec le nonce à 0. Si le haché correspond à la difficulté, parfait, il peut le partager. Sinon il incrémente le nonce et recalcule le haché. Et ainsi de suite jusque à ce que son haché satisfasse la condition de difficulté. Comme le haché est imprévisible, c’est comme une loterie à chaque essai.

Bien sûr, plus votre ordinateur est puissant, plus vous pouvez calculer de hachés en un temps donnée. Au début, tout le monde utilisait son processeur et tout les utilisateurs de bitcoin ou presque minaient. Mais avec le temps, des algorithmes spécifiques ont permis de miner avec les cartes graphiques, puis avec des puces spécialisées (des FPGA puis des ASIC). Ce qui fait que de nos jours pour miner il faut investir dans du matériel spécialisé et se regrouper avec d’autres mineurs.

Si jamais un bloc met moins de 10 minutes à arriver, tout les participants du réseau se mettent d’accord pour augmenter la difficulté. Diminuant ainsi la probabilité de trouver rapidement le bloc suivant. Si un bloc mets plus de 10 minutes, tout le monde s’accorde pour diminuer la difficulté. C’est de cette manière qu’on arrive à générer un bloc toutes les dix minutes en moyenne.

5. L’inflation

L’avantage du Proof of Work, en plus de régler le problème de la double utilisation d’une somme, c’est d’apporter une solution toute faite à la question de la création monétaire. Ce qu’on fait, c’est autoriser le mineur créateur d’un bloc à s’accorder un certain nombre de nouveau bitcoins. Aujourd’hui c’est 12.5, à partir de juin 2020 ce sera 6.25. Les choses sont programmées pour que l’on divise la récompense par deux régulièrement jusque à un jour atteindre 0. Le nombre total de bitcoin ayant pu être créé sera alors de 21 millions (on est déjà à plus de 16 millions).

Avec ce système la création monétaire est connue de tous et prévisible, c’est autre chose qu’avec nos banques centrales, n’est-ce pas ?

Bon évidement, on peut se demander ce qui se arrivera lorsque la récompense sera 0. Est-ce que les mineurs arrêteront de miner ? Sera-ce la fin du Bitcoin  et son système de Proof of Work ? Non, parce que lorsque vous créez une transaction, on vous laisse la possibilité de fixer des frais qui ne sont envoyés ni au destinataire, ni ne vous sont retournés. Ces frais permettent au mineurs de prioriser les transaction les plus importantes pour une inclusion dans le prochain bloc ou l’espace est limité. Et les mineurs collectent ces frais, se rémunérant un peu plus par ce biais.

Voilà pour le fonctionnement du système de Proof of Work, on se retrouve bientôt pour d’autres explications sur les cryptomonnaies.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.