Le parrain du consensus : guide du proof-of-work
Cet article est disponible dans les langues suivantes :
Points essentiels
Cet article retrace les origines et l’évolution du proof-of-work (PoW), expliquant comment il a d’abord servi à limiter l’abus de ressources avant de devenir la base de la blockchain décentralisée de Bitcoin. Il détaille comment le PoW sécurise les transactions et empêche la double dépense grâce à des énigmes informatiques résolues par les mineurs, tout en soulignant les défis de passage à l’échelle et de consommation énergétique. Pour pallier ces limites, l’article évoque le développement de nouvelles couches blockchain et de mécanismes de consensus visant à améliorer l’efficacité tout en préservant sécurité et décentralisation.
Aujourd’hui, les réseaux décentralisés reposent sur de nombreux mécanismes de consensus, mais tout a commencé avec le proof-of-work (PoW). Nous allons vous raconter comment ce mécanisme est né, comment il fonctionne et pourquoi il reste l’un des algorithmes fondamentaux du Web3.
À l’origine, le proof-of-work n’a pas été conçu pour les réseaux décentralisés. Il n’avait aucun lien avec les cryptomonnaies et visait avant tout à protéger les utilisateurs de « ressources partagées » contre différents types d’abus. Les créateurs du concept, proposé dès 1993, ont imaginé une solution limitant l’accès à une ressource en obligeant les participants à effectuer des calculs complexes. Il était aussi essentiel que les résultats de ces calculs puissent être vérifiés facilement et rapidement.
La première version réellement exploitable n’a vu le jour que cinq ans plus tard, lorsque Adam Back a lancé le projet Hashcash, dont le principal objectif était de lutter contre le spam. L’idée : utiliser la cryptographie pour rendre l’envoi de courriels de masse plus difficile. Avant chaque envoi, l’expéditeur devait effectuer des calculs complexes – trouver une valeur x telle que le hash SHA(x) comporte N zéros initiaux – puis inclure le résultat (le proof-of-work) dans l’en-tête du message.
Pour que le courriel parvienne au destinataire, il faut vérifier que l’expéditeur a bien résolu le problème cryptographique. Cette vérification s’effectue très rapidement grâce à un calcul unique SHA-1 utilisant un label préparé à l’avance. Ce label est généré par l’expéditeur avant de commencer la résolution et devient accessible à tous les participants du système. Ainsi, envoyer quelques messages ne pose pas de souci, mais pour lancer une campagne massive, il faut disposer d’une puissance de calcul importante.
Cela vous rappelle quelque chose ? Ce concept a été repris en 2008 par Satoshi Nakamoto pour créer Bitcoin et sa blockchain proof-of-work.
Comment fonctionnent les blockchains PoW
Au cœur de l’idée de Nakamoto (dont on ignore s’il s’agit d’une personne ou d’un groupe de développeurs) se trouvait la volonté de créer un système de paiement électronique décentralisé, indépendant des tiers. Il permettrait d’envoyer de l’argent directement, sans intermédiaire comme une banque.
Les informations sur les transactions sont stockées dans un registre distribué entre les participants du réseau. Le processus de séquençage consiste à regrouper les transactions dans des blocs de taille limitée. Chaque bloc doit contenir des informations sur le bloc précédent. Pour cela, toutes les données pertinentes (transactions, hash du bloc précédent, horodatage, etc.) sont converties en un code unique appelé hash. Cette opération utilise une fonction de hachage, qui, dans le cas de Bitcoin, est nommée SHA-256. Les « full nodes » gèrent la chaîne, tandis que les mineurs participent à la création de nouveaux blocs.
Il est important de noter que la fonction de hachage garantit qu’un même ensemble de données produira toujours le même hash. La moindre modification génère un hash totalement différent.
Comme évoqué précédemment, les mineurs doivent calculer le hash d’un bloc pour l’ajouter à la chaîne. En soi, cette opération n’est pas très longue, donc pour éviter que le problème ne soit résolu trop vite, le réseau ajuste la difficulté de calcul tous les 2 016 blocs, soit environ toutes les deux semaines. Cela permet de maintenir le temps de minage d’un bloc autour de dix minutes, assurant ainsi la stabilité de la blockchain.
Comment cela fonctionne-t-il concrètement ? Les mineurs reçoivent les blocs en entrée et calculent le hash. Le réseau exige cependant que ce hash soit inférieur à une certaine valeur cible. Mais, n’a-t-on pas dit que le hash ne pouvait pas être modifié ? C’est là qu’intervient le nonce (« number only used once »). Il est ajouté aux blocs et modifié par les mineurs lors des calculs, produisant ainsi un hash différent. Les mineurs comparent ensuite le hash obtenu à la cible de difficulté : si la valeur est supérieure, ils changent à nouveau le nonce et recalculent. Ce processus est répété jusqu’à obtenir un résultat égal ou inférieur à la cible, ce qui peut nécessiter des millions d’essais.
Pour mieux illustrer l’ampleur de la tâche, voici le nombre de combinaisons possibles pour un hash SHA-256 :
115792089237316195423570985008687907853269984665640564039457584007913129639936
Cela équivaut au nombre d’étoiles dans l’univers, multiplié par 115 milliards.
La chaîne des transactions
Voyons maintenant comment cela se passe lors d’une transaction classique, par exemple un envoi de BTC. Après avoir généré et signé la transaction avec votre clé privée, celle-ci est transmise au réseau. Un full node vérifie sa validité et, si tout est correct, la laisse circuler dans le réseau. Les autres nœuds effectuent à leur tour des vérifications et placent la transaction dans la file d’attente des transactions non confirmées (mempool).
Les mineurs sélectionnent des transactions dans la mempool (en privilégiant celles qui offrent la plus grande commission), les regroupent dans un bloc et commencent les calculs. Lorsqu’un mineur trouve la solution, les full nodes vérifient le résultat et, s’il est correct, le mineur reçoit une récompense. À ce stade, le bloc est considéré comme « miné » et ajouté à la blockchain, tandis que l’information est diffusée à tous les participants. Les mineurs s’attaquent alors au bloc suivant. Plus il y a de blocs ajoutés après celui contenant votre transaction, plus son niveau de confirmation est élevé.
En résumé, pour qu’une transaction soit considérée comme légitime, la majorité des nœuds du réseau doit s’accorder sur le fait que le bloc qui la contient a été correctement calculé.
Tout cela est-il indispensable ?
Nakamoto n’a pas été le premier à vouloir créer un système décentralisé, mais il est le premier à avoir choisi le mécanisme de consensus proof-of-work. Sans lui, il serait impossible de résoudre le problème de la double dépense, qui survient lorsqu’un expéditeur utilise les mêmes fonds deux fois avant que la transaction ne soit confirmée. Les mineurs vérifient chaque transaction pour détecter une éventuelle double dépense dès qu’ils la reçoivent de la mempool.
Il est vrai que, sur une blockchain PoW, deux mineurs peuvent miner le même bloc. Ce n’est pas forcément malveillant : cela peut arriver si deux mineurs terminent leurs calculs presque simultanément et que l’un d’eux n’a pas encore reçu l’information que le bloc a déjà été miné. Dans ce cas, une chaîne parallèle se forme à partir du bloc en question. Pour éliminer la mauvaise « branche », le mécanisme de consensus compare les deux blockchains et privilégie la version la plus longue.
Problèmes et limites
Le principal défaut du PoW – du moins dans sa forme pure – est la scalabilité. Par exemple, la blockchain Bitcoin traite environ 7 transactions par seconde, ce qui reste faible. Par conséquent, la mempool se remplit lors des pics d’activité, et les transactions avec des frais faibles peuvent rester bloquées plusieurs heures, voire plusieurs jours. On pourrait penser qu’il suffirait d’augmenter la taille des blocs pour accélérer le traitement, ou de les miner plus rapidement.
Mais augmenter la taille des blocs a des conséquences : il faudrait plus de puissance de calcul pour les créer, ce qui ne laisserait place qu’aux grands mineurs ou pools de minage, réduisant la décentralisation.
Raccourcir le temps de traitement comporte aussi un risque : les nœuds du réseau pourraient ne pas parvenir à un consensus avant l’apparition du bloc suivant. Cela multiplierait les « branches » de la blockchain et rendrait possible la double dépense.
Tout cela s’inscrit dans le concept du trilemme de la blockchain, selon lequel un réseau décentralisé ne peut offrir simultanément que deux de ses trois avantages fondamentaux : décentralisation, sécurité et scalabilité. Pour y remédier dans le cadre du PoW, on utilise des couches blockchain qui fonctionnent « au-dessus » du système principal et accélèrent le traitement des transactions.
Par ailleurs, de nouveaux protocoles de consensus sont développés pour fonctionner en parallèle du PoW. Par exemple, Kaspa utilise le PoW comme mécanisme de sécurité du réseau, mais les blocs sont organisés dans un graphe orienté acyclique plutôt que dans une blockchain, ce qui permet aux mineurs de travailler sur plusieurs blocs en parallèle.
Enfin, un problème plus terre-à-terre subsiste : plus une blockchain accumule de puissance de calcul, plus la complexité des calculs et la consommation d’énergie pour le minage augmentent.