Une blockchain est-elle forcément énergivore ?
Tags: blockchain, energie, consensus, crypto
Published: 2021-04-01 10:02:37

![Blockchain et consommation énergétique](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zztd1gv4fclvv5npvxk7.png)

La consommation énergétique est un reproche souvent entendu lorsque l’on parle de blockchain.
En réalité, le niveau de consommation d’une blockchain est lié à plusieurs facteurs souvent méconnus.

Nous allons voir comment une Blockchain fonctionne, pourquoi elle peut être énergivore, et quelques solutions permettant de limiter très fortement la consommation énergétique d'une Blockchain.

Nous nous attarderons en particulier sur l’une d’entre elles, la preuve de travail à difficulté personnalisée, qui est intéressante sur de nombreux aspects.

## Qu'est-ce qu'une blockchain ?

C'est une solution de stockage de données très sécurisée et chronologique. Voyons comment fonctionne une blockchain pour assurer un fort niveau de sécurité et une historisation des données.

Une partie de la réponse est inscrite dans son nom "Blockchain" ou chaîne de blocs en français. Les données sont donc enregistrées dans des blocs reliés les uns aux autres.
![image-20201022173918481](https://i.loli.net/2020/10/23/4MdNcCJBItasZTk.png)

**Historisation des données**

Chaque bloc est enregistré à un intervalle régulier (toutes les 10 minutes pour Bitcoin par exemple) et ils sont reliés entre eux dans l’ordre chronologique à intervalles réguliers, permet d’avoir l’historique des données stockées dans la blockchain.

Pour éviter que cette chronologie soit altérée, des mécanismes permettant de garantir l’intégrité des données sont mis en place.

**Intégrité des données**

Chaque bloc dispose d'un identifiant unique, appelé Hash, qui est calculé à partir non seulement de chacune des données stockées dans le bloc, mais aussi de l'identifiant (Hash) du précédent bloc.
Chaque donnée du bloc est liée à d’autres données dans une structure appelée [Arbre de Merkel](https://www.blockchains-expert.com/larbre-de-merkle-colonne-vertebrale-de-blockchain/) :

![Transaction](https://i.loli.net/2020/10/23/QWD19VdqMOXsju2.png)

Ceci permet à la fois de garantir l'intégrité des données, puisque toutes les données étant liées les unes aux autres et les blocs liés aussi les uns aux autres, modifier la moindre donnée dans un bloc oblige à non seulement de recalculer les hashs des données du bloc, le hash du bloc et les hashs des blocs suivants.

Cette liaison permet aussi de garder un historique puisque, dans chaque bloc nous retrouvons en entête l'identifiant (Hash) du bloc précédent. Nous verrons aussi qu'il y a une régularité entre l'enregistrement de chaque bloc permettant d'avoir une chronologie régulière dans une horloge commune appelée « temps blockchain ».

Ce mécanisme permet de garantir l'intégrité et la chronologie des données, mais ce n'est pas le seul mécanisme entrant en jeu pour assurer la sécurité des données de cette solution de stockage qu'est la Blockchain.

**Redondance des données**

Un autre élément entrant en jeu dans la sécurisation des données dans une blockchain est la redondance de ces données entre les ordinateurs (appelés nœuds) du réseau permettant de s'assurer que si certains d'entre eux ont une défaillance quelconque, d'autres ont une copie identique des données et peuvent donc continuer à assurer le service.

C'est l'entièreté de la chaîne de bloc qui est stockée dans chacun des nœuds du réseau. De ce fait chaque nœud dispose d'une sauvegarde complète.

Les nœuds doivent donc rester synchronisés entre eux en permanence. Pour cela, il faut déterminer d'une part quel participant au réseau sera celui qui signe le prochain bloc et d'autre part, un protocole permettant de propager le nouveau bloc.

Pour déterminer quel nœud signera le prochain bloc, on utilise ce qu'on appelle un algorithme de "Consensus". Il a deux missions :

1. Permettre de déterminer un nœud pour signer et écrire le prochain bloc.
2. S'assurer qu'aucun nœud en particulier ne puisse prendre seul le contrôle du réseau et des données.

C'est cet algorithme qui peut être plus ou moins énergivore, et nous allons voir les différents algorithmes de "Consensus" existants, leurs avantages et inconvénients non seulement en termes de consommation énergétique, mais aussi par rapport aux missions citées ci-dessus, en particulier concernant la gouvernance du réseau.

## Les algorithmes de consensus : le nerf de la guerre énergétique

Nous allons voir quelques algorithmes de consensus les plus courants et détaillerons plus précisément un algorithme qui allie à la fois les avantages d’un consensus ne favorisant aucun membre du réseau au départ et une consommation énergétique contrôlée.

### À l'origine : la preuve de travail

Le premier algorithme de consensus utilisé dans l'histoire des blockchains est celui adopté pour le Bitcoin, à savoir la preuve de travail.

Son principe est de faire participer l'ensemble du réseau à un exercice cryptographique visant à trouver un Hash respectant un certain schéma.
Sur Bitcoin, le schéma à respecter est un certain nombre de zéro au début du Hash. 

L'algorithme de hashage utilisé par la blockchain Bitcoin est le SHA256. Avec cet algorithme, plus il y a de zéros à trouver au début du Hash, plus cela est difficile et plus cela requiert de la puissance machine pour y arriver dans un temps donné.
C'est pourquoi on appelle cette contrainte : la difficulté.

Dans le cadre de Bitcoin, le délai pour trouver une solution respectant le nombre de zéros, est de 10 minutes. Pour que cette durée reste régulière, car elle sert aussi à l'horloge du réseau,  la difficulté,  c'est à dire le nombre de zéros à respecter, est réévaluée régulièrement pour tenir compte de l'évolution de la puissance globale du réseau.

Pour trouver la solution, chaque nœud va hasher le bloc, à partir non seulement des données du bloc, du hash du bloc précédent, mais aussi d'une variable appelée "Nonce", incrémentée de 1 à chaque nouvel essai. C'est cette variable qui permet de jouer sur le résultat du hashage et ainsi essayer de trouver un Hash respectant le schéma.

![](https://i.imgur.com/2eifYlH.jpg)

### Les algorithmes de consensus alternatifs les plus courants

La preuve de travail est une première solution, et elle a l'avantage principale de ne favoriser aucun noeud initialement au niveau de l'algorithme, mais elle a l'inconvénient d'être énergivore, en particulier si la puissance du réseau est importante, car il faut que le rythme de validation d'un bloc toutes les 10 minutes soit conservé. 

Concernant le Bitcoin, le réseau est constitué de plus de 11300 noeuds actifs à l'heure où sont écrites ces lignes (https://bitnodes.io/dashboard/), dont un certain nombre sont des fermes de machines très puissantes et consommatrices. Le fait qu'un mineur récupère 6,25 BTC (soit 88500 € à l'heure où sont écrites ces lignes) par bloc validé n'est pas étranger à cela.

Afin de résoudre cette problématique, d'autres algorithmes de consensus ont été imaginés, voyons les principaux.

#### Preuve d'enjeu ou preuve de détention (Proof of Stake)

La preuve d'enjeu est le deuxième algorithme de consensus le plus populaire dans les blockchain publiques. A la différence de la preuve de travail, il ne nécessite pas d'effectuer un calcul mathématique pour déterminer le prochain nœud signant le bloc.

Pour éviter de faire un calcul, il demande aux participants du réseaux de mettre en réserve (sorte de caution) une certaine quantité de tokens (unités de la blockchain).
L'algorithme prend ensuite successivement les X nœuds (X étant paramétrable) qui ont le plus de tokens en réserve pour signer les blocs.

![](https://tva1.sinaimg.cn/large/0081Kckwgy1gl6j7bcijvj30tm11zq5m.jpg)

Une variante de cet algorithme est la Delegated Proof-of-Stake, qui se différencie par le fait que les participants doivent recevoir des "votes" sous forme d'une quantité de tokens, de la part d'autres utilisateurs ayant déjà des tokens, pour participer à la validation des blocs. On pourrait presque dire que les noeuds pouvant signer les blocs sont "élus".

![Analysis of the main consensus protocols of blockchain - ScienceDirect](https://tva1.sinaimg.cn/large/0081Kckwgy1gl6jfvasylj30gf087q39.jpg)

Vous avez peut être déjà identifié l'inconvénient principal de cette approche. Les personnes ayant le plus de tokens et donc qui peuvent en mettre davantage en réserve (PoS) et/ou recevant le plus de votes (DPoS), sont favorisés par rapport aux autres. Et évidement, puisqu'il y a très souvent une récompense à la validation d'un bloc, les premiers arrivés sont avantagés par rapport aux autres.

Par contre, cet algorithme consomme très peu d'énergie, puisqu'il n'a pas besoin de faire calculer les noeuds pour déterminer le prochain noeud validant.

#### Preuve d'autorité (Proof-of-Authority)

La preuve d'autorité est apparue plus tard, et s’appuie non plus sur une quantité de token mise en réserve, mais l'identité. 
Pour pouvoir valider des blocs, chaque participant doit être élu par les participants existants et publier son identité.

Cela se rapproche donc d'un fonctionnement centralisé, où il y a un groupe d’ordinateurs sélectionnés à l’avance qui sont les seuls à pouvoir valider les blocs. Cette approche est donc non adaptée aux blockchains publiques qui se veulent être ouvertes à tous.

Comme la Proof-of-Stake, les noeuds n'ont pas à faire de calcul pour être sélectionnés, et donc la consommation énergétique reste faible. Mais on voit par contre qu’on perd en grande partie l’approche décentralisée initiale des blockchains.

## Une approche originale : La preuve de travail à difficulté personnalisée (Personalized Proof-of-Work)

Plus récemment, en 2017, est apparue la preuve de travail à difficulté personnalisée. Elle tente de combiner les avantages de la preuve de travail (pas de présélection des nœuds) tout en réduisant ses inconvénients en terme de consommation énergétique.

### Une solution d’identification décentralisée : La toile de confiance (Web of Trust)

Tout comme dans la preuve d'autorité, les participants sont identifiés, mais à l'aide de leur clé publique. Ils peuvent donc librement choisir de pas publier leur identité réelle.
Pour éviter d'utiliser un mécanisme d’identification centralisé, un système d’identification décentralisé appelé "Toile de confiance" (Web of Trust), a été conçu et implémenté.

Celui-ci fonctionne par un mécanisme de parrainage (certification), qui, contrairement à la preuve d'autorité, n'est pas seulement réservé à ceux qui participent au réseau mais est ouvert à tous les utilisateurs qu'ils valident ou pas des blocs (i.e : qu’ils soient mineurs/forgeurs ou non).

Pour être membre, un utilisateur doit se faire certifier par 5 autres utilisateurs minimum (pour faire simple, car il y a des conditions plus complexes en réalité, pour protéger d’une éventuelle attaque Sybille (prise de contrôle de la toile de confiance)).

### Les nouveaux tokens ne sont pas créés en récompense du minage, mais par tous les utilisateurs

Les validateurs de blocs (mineurs/forgeurs) ne reçoivent pas automatiquement une récompense, c'est tous les utilisateurs identifiés qui voient leur compte crédité tous les jours d'un montant identique entre tous, appelé Dividende Universel (DU). C'est par ce mécanisme que sont créés les nouveaux tokens de la blockchain.

Le calcul de ce DU se fait selon une équation établie dans une théorie monétaire appelée la [Théorie Relative de la Monnaie](https://trm.creationmonetaire.info) de Stéphane Laborde.

Elle est la suivante lorsque le nombre d'utilisateur est globalement stable (varie peu) :
![DU TRM](https://tva1.sinaimg.cn/large/0081Kckwgy1gl6jnq26z9j302r0170po.jpg).
avec ![image-20201129181616892](https://tva1.sinaimg.cn/large/0081Kckwgy1gl6jqy6s4dj304b02dwef.jpg) et `ev` = Espérance de vie moyenne (~80 ans en Europe).

Dans le cas d’un nombre d’utilisateurs plus variable, comme c’est bien souvent le cas dans les crypto-monnaies décentralisées, le calcul du DU est plus fin pour lisser les effets des entrants et sortants, et répond à l’équation suivante : 
![DU Ğ1](https://i.imgur.com/KSS0fxm.png)

Le montant du DU est recalculé tous les 6 mois pour tenir compte de l'évolution du nombre d'utilisateurs et de la quantité de tokens en circulation pour faire en sorte que chacun crée une quantité de token convergeant vers la moyenne du total de token en circulation au bout de 40 ans (du fait que le coefficient `c` est calculé selon la demi espérance de vie moyenne en Europe).

Ceci permet de faire en sorte que les participants au réseau ne le fassent pas par intérêt de la récompense. Ce qui évite la course à la puissance entre les participants au réseau.

### Une consommation énergétique contrôlée

Vous l’aurez compris, cette toile de confiance permet d’identifier, anonymement et de façon décentralisée, les utilisateurs, et donc également les propriétaires de nœuds mettant à disposition des ordinateurs pour valider les blocs.

Ceci permet alors d’appliquer une difficulté personnalisée à chaque propriétaire de nœuds et permet ainsi d'ajuster la consommation énergétique du calcul de la preuve de travail.

Par ailleurs une limite haute est mise en place pour exclure du calcul les noeuds ayant une difficulté supérieure à celle-ci.

Pour faire varier la difficulté deux mécanismes sont mis en place :

1. **Le facteur d'exclusion**

Le facteur d'exclusion est appliqué sur le nœud ayant validé le dernier bloc, il fait en sorte d'exclure du calcul, pendant un nombre de blocs, les noeuds des membres ayant récemment validé un bloc.

L’intérêt est double, il permet non seulement de limiter la consommation énergétique, puisque ces nœuds ne participent plus du tout au jeu mathématique de la preuve de travail, mais aussi d’éviter que des super-calculateurs ou fermes de calcul puissent prendre le contrôle de la blockchain.

Voici comment il est calculé :

![Facteur d’exclusion](https://i.imgur.com/NgJQkh1.jpg)

Avec `nbNoeudsCalculants`, le nombre de noeuds ayant participé au calcul pour la validation du dernier bloc trouvé par le membre, et `nbBlocsValideesParLesAutres` le nombre de blocs signés par le reste du réseau depuis que le membre considéré a trouvé son dernier bloc.

Si le membre est l’auteur du dernier bloc, alors la variable `nbBlocsValideesParLesAutres` sera égale à 0, puisqu’il vient de valider un bloc et donc aucun autre membre n’a validé de bloc depuis. Et de ce fait le facteur d’exclusion résultant sera d’autant plus élevé qu’il y aura de noeuds (`0,67*nbNoeudsCalculants`).

Les membres du réseaux ayant calculés moins récemment des blocs, auront eu des facteurs d’exclusion plus faible puisque le dénominateur viendra diviser le numérateur d’autant plus qu’il y a de blocs validés par les autres depuis qu’ils ont validés leur derniers blocs.

Mais le facteur d’exclusion seul n’est pas suffisant car si la difficulté personnalisée se limitait à cela, ce serait toujours le tiers des membres calculant les plus puissants qui écriraient des blocs, les deux tiers restants seraient presque toujours exclus.

C’est pourquoi, en plus de ce facteur d’exclusion, un autre paramètre intervient : le handicap.

1. **Le handicap**


![Handicap](https://i.imgur.com/Bsuha8r.jpg)

Le handicap est appliqué sur les nœuds ayant validé notablement plus de blocs notablement que la médiane du réseau (`nbMedianBlocsEcritsParNoeudsFenetreCourante`) sur les X derniers blocs (fenêtre courante) : `nbBlocsNoeudFenetreCourante`.

Il permet donc de fortement défavoriser les nœuds les plus performants, afin de donner leur chance aux appareils les plus économes (ex : Raspberry Pi 3).

Et comme souvent la performance est liée à une consommation énergétique élevée, l’application de ce handicap permet de réduire l’impact énergétique du réseau.

### Une approche respectant la décentralisation tout en réduisant la consommation énergétique

Le choix de se baser tout de même sur un mécanisme de preuve de travail permet de ne pas favoriser un sous ensemble de nœuds en particulier au départ, et la difficulté personnalisée permet de ne pas favoriser les appareils les plus performant et au contraire laisser une chance y compris aux appareils peu performants mais beaucoup moins consommateurs en énergie.

La consommation énergétique est donc mécaniquement bien plus faible par rapport à la preuve de travail classique. Les participants n’ayant aucun intérêt à investir dans des centres de calculs ultra-puissants.

### Il y’a t’il une application pratique de la preuve de travail à difficulté personnalisée ?

Cette approche est utilisée par la [crypto-monnaie Ğ1](https://www.monnaie-libre.fr) et le logiciel gérant sa blockchain, et donc implémentant l’algorithme de preuve de travail à difficulté personnalisée, s’appelle [Duniter](https://www.duniter.org). Ce dernier est écrit actuellement en TypeScript, mais une oxydation en Rust est en cours (appelée Dunitrust). La crypto-monnaie Ğ1 n’est pas mise en vente sur les plateformes d’échanges de crypto-monnaie, ce qui permet d’éviter la forte volatilité qu’ont de nombreuses autres crypto-monnaie.

Elle est utilisée par une [communauté de plus de 2857 utilisateurs](https://forum.monnaie-libre.fr) dans le monde, principalement en France, comme moyen d’échange lors d’événements concrets où les utilisateurs se rencontrent et l’utilisent pour s’échanger des biens et des services entre eux. Quelques commerçants l'acceptent également, comme le restaurant [l'Etrillum](https://etrillum.fr/) à Nantes.

## Bilan

Comme nous avons pu le voir, la blockchain n'est pas forcément énergivore, cela dépend de l'algorithme de consensus choisi. Nous avons vu que le choix de cet algorithme joue non seulement sur la consommation énergétique, mais aussi sur la gouvernance du réseau. Il est donc la clé de voute de la blockchain, et son choix n'est pas anodin.

En effet, nous avons vu avec la preuve de travail, que si la gouvernance du réseau est parfaitement décentralisée sans favoriser aucun membre du réseau à priori, la difficulté du jeu cryptographique étant identique pour tous, les membres peuvent jouer sur la puissance de leurs machines pour obtenir un avantage par rapport aux autres, au détriment de la consommation énergétique.

A l'inverse, nous avons vu que les preuves de détention (PoS/DPoS) et d'autorité (PoA), si elles permettent une consommations énergétique très faible, elles ont une gouvernance bien moins décentralisée et favorisant les personnes ayant le plus de tokens (PoS) ou de votes (DPoS) ou étant choisis par les participants existants (PoA).

Enfin, nous avons vu qu'en utilisant une preuve de travail en faisant varier la difficulté de façon personnalisé (PPoW) pour chaque membre en fonction de sa rapidité de calcul et de son différentiel de blocs validés par rapport aux autres, alors nous arrivons à allier une bonne gouvernance décentralisée avec une consommation énergique davantage maitrisée.