Pensez Blockchain

La référence en chaîne de blocs au Québec

 
 

 Ethereum à 200 000 transactions par seconde

- Présentation de la « roadmap » - 

Par Paul-Emile Chantrel

Ethereum est la deuxième plus grande chaîne de blocs en termes de capitalisation de marché. Ce super ordinateur qui permet d’exécuter des programmes de manière décentralisée est cependant saturé à l’heure actuelle avec près de 20 transactions par seconde (tps) [1]. Ainsi, le coût pour interagir avec ses applications décentralisées monte parfois jusqu’à 100$ ou 200$ par transaction et rend le réseau inutilisable pour une majorité de personnes.

Heureusement, les développeurs d’Ethereum travaillent sur des solutions qui permettraient à terme d’augmenter le nombre de tps de 20 à 200 000.  Ceci pourrait alors réduire le coût d’utilisation du réseau.

Dans cet article, nous allons présenter ces différentes solutions de couche 1 (passage à la PoS et sharding) et couche 2 (canaux, Plasma, Rollups optimistes et Zk). Nous parlerons également de la prochaine mise à jour contenant l’EIP 1559 qui permettra peut-être de réduire les coûts de transaction et pourrait même rendre la politique monétaire d’Ethereum déflationniste.

Vous pouvez retrouver une présentation de la chaîne de blocs Ethereum ici et une analyse des problèmes de scalabilité d’Ethereum et des projets concurrents ici.

Solutions de couche 1

On appelle une solution de scalabilité de couche 1 (ou "layer 1") une modification de la technologie de la chaîne de blocs qui permettrait d’augmenter le nombre de transactions par seconde. 

À l’opposé, une solution de couche 2 (ou "layer 2") est une solution qui permet d’augmenter le nombre de tps en exécutant les calculs en dehors de la chaîne de blocs mère.

Avec sa mise à jour 2.0, Ethereum va changer sa méthode de consensus de la PoW (preuve de travail) et de la PoS (preuve d’enjeu). Ainsi, au lieu d’avoir des mineurs qui cherchent un nouveau bloc avec des ordinateurs, le réseau aura des validateurs tirés au sort qui permettront de choisir le prochain bloc en mettant leurs Ethers en jeu (s’ils trichent, ils seront pénalisés en perdant de l’Ether). 

La PoS a pour avantage de consommer beaucoup moins d’énergie. Elle ne permet toutefois pas pour autant d’augmenter le nombre de tps (comme nous l’avions vu avec le trilemme de la chaîne de blocs). Cependant, cette méthode de consensus permet d’introduire le sharding beaucoup plus facilement.

Le sharding correspond à répartir la charge de calcul des nœuds, c’est-à-dire le traitement des transactions ainsi que la sauvegarde de l’état du système (balance des comptes, contrats intelligents et autres paramètres stockés en mémoire). Ainsi, plutôt que chaque nœud du réseau possède la même copie de la chaîne de blocs et se dispute le prochain bloc, les nœuds possèdent une sous-partie du réseau où ils ajoutent une partie des transactions. Cela forme alors des chaînes en parallèle appelées « chaînes shards ».

Par exemple, la chaîne shard n°1 va s’occuper des adresses (il s’agit des adresses des comptes utilisateurs ou des contrats intelligents) commençant par 0x00.., alors que la chaîne shard n°2 va s’occuper des adresses commençant par 0x01.. et ainsi de suite. Ethereum 2.0 souhaite ainsi avoir 64 chaînes shards qui se répartiront le réseau actuel.

 Les chaînes shards sont ensuite synchronisées à une chaîne mère ou chaîne principale (appelée « beacon chain » en anglais).

Avec le sharding et la PoS, des validateurs sont tirés au sort afin de choisir le prochain bloc. Les chances qu’ils soient sélectionnés sont proportionnelles aux Ethers qu’ils mettent en jeu (en les stakant). Le bloc est ensuite vérifié par des attestateurs (eux aussi tirés au sort en mettant des ethers en jeu). Par la suite, seuls son en-tête (i.e., le bloc sans les transactions) et les signatures des attestateurs sont ajoutés à la chaîne mère. Chaque bloc de la chaîne principale est donc constitué d’en-tête de blocs de chaînes shards et des signatures des attestateurs. Ainsi, les données inscrites sur cette dernière sont fortement réduites.

Le sharding consiste donc à ajouter de multiples chaînes parallèles à la chaîne principale afin de répartir les transactions et l’état du système (ceci est une solution de couche 1, car on considère la nouvelle chaîne de blocs comme l’ensemble des chaînes parallèles).

Avec cette solution, le nombre de transactions par seconde sur Ethereum pourrait augmenter d’un facteur 100 et ainsi passer de 20 à 2000 tps [2].

Cette mise à jour a déjà commencé à être déployée. Au cours de l’année 2021, 64 chaînes shards devraient être ajoutées à la chaîne principale et il est prévu que cette solution soit totalement fonctionnelle d’ici 2022 [3].

À l’heure actuelle, il y a également de nombreuses solutions de couche 2 en développement et certaines pourraient voir le jour avant que la solution de couche 1 ne soit totalement terminée.

Solutions de couche 2

Comme expliqué plus tôt, une solution de scalabilité de couche 2 ("layer 2") survient lorsque les calculs sont faits en dehors de la chaîne de blocs principale. Les transactions ou les contrats intelligents sont exécutés « à côté » et une preuve est ensuite inscrite sur la chaîne de blocs pour montrer que la transaction a bien été faite. Cela permet ainsi de réduire la charge de calcul de la chaîne de blocs et augmente le nombre de transactions par seconde du protocole.

Il existe trois types de solutions de couche 2 qui permettent d’augmenter le nombre de tps d’Ethereum : les canaux, le Plasma et les Rollups [4].

Les canaux

Un canal est une technologie qui peut être utilisée pour réaliser des micropaiements récurrents (comme le Lightning Network sur Bitcoin). 

Par exemple, si Alice souhaite envoyer des micropaiements de 0,1$ à Bob toutes les heures, elle peut placer 10$ (en Ethereum ou stable coin) dans un contrat intelligent. À chaque microtransaction, elle signera un reçu hors chaîne avec le montant total qu’elle doit régler. Bob pourra ensuite utiliser ce reçu pour récupérer la somme qui lui est due. Ainsi, une seule transaction sera enregistrée dans la chaîne de blocs.

Les canaux sont très utiles pour ce type d’application et peuvent aussi fonctionner dans les deux sens. Malheureusement, ils ne peuvent pas être utilisés pour des applications plus complexes comme la finance décentralisée.

Plasma

Plasma est un système qui permet d’agréger des transactions hors chaîne. Par période régulière, l’arbre de Merkle de ces transactions est calculé et ajouté à la chaîne de blocs Ethereum. Ainsi, de multiples transactions sont compressées en une entrée (la racine de Merkle) dans la chaîne de blocs.

L’utilisateur qui fait une transaction reçoit ensuite la branche de l’arbre de Merkle correspondant à sa transaction. Il pourra l’utiliser pour récupérer ses Ethers, token, ou NFT par la suite.

Pour faire un arbre de Merkle, les transactions sont « hashées » deux par deux. Les hashs résultants sont ensuite hashés deux par deux à leur tour tel que représenté ci-dessous. Si une transaction ou un hash n’a pas de binôme, il est hashé avec "0". En répétant cette opération plusieurs fois, on obtient un seul hash appelé la racine de Merkle. Une branche de Merkle est le chemin qui relie une transaction à la racine de Merkle (ex. : tx3, H2, H12 et M) plus les binômes utilisés pour le hash de chaque étape (tx4, H1 et H34). Elle permet de prouver qu’une transaction (tx3) est bien à l’origine de la racine de Merkle (M). 

 
Capture d’écran 2021-05-06 à 17.15.39.png
 

Le projet OmiseGo [5] est un exemple de Plasma.

Plasma est utile pour désengorger la chaîne de blocs Ethereum et ainsi augmenter son nombre de tps, mais il est assez lent à utiliser, car il faut attendre l’agrégation des transactions. De plus, tout comme les canaux, il ne permet pas d’exécuter tout type de contrat intelligent. Les Rollup, quant à eux, pallient ces problèmes.

Les Rollups

Les Rollups sont semblables à Plasma, mais au lieu de faire un arbre de Merkle avec les transactions, ils font un arbre de Merkle avec l’état du système au complet (balance des comptes, contrats intelligents et autres paramètres stockés en mémoire). 

Les nouvelles transactions sont ensuite agrégées et inscrites de manière ultra compressée avec la racine de Merkle de l’état du système précédent et celle de l’état actuel.

Comment peut-on être sûr que les transactions réalisées sont correctes?

Il existe deux types de Rollups pour répondre à ce problème : les Rollups otpimites et les ZK Rollups.

Rollups optimistes

Les Rollups optimistes partent du principe que toutes les transactions sont correctes et inscrivent une nouvelle racine de Merkle dans la chaîne de blocs qui peut être contestée en cas d’erreur ("trust but verify").

Ce type de Rollup a pour atout d’être très simple à mettre en place et d’être compatible EVM (c’est-à-dire qu’il peut lire et encoder des contrats intelligents tels qu’ils sont écrits pour Ethereum). 

Malheureusement, il faut attendre environ une semaine afin de pouvoir retirer un actif de ce type de Rollup sur la chaîne principale à cause de la période de contestation de l’état du système (on peut cependant imaginer qu’il y aura une place de marché où il sera possible d’échanger 1 ETH bloqué une semaine contre 0,99 ETH disponible maintenant). 

Des projets comme Optimism [6] sont actuellement en cours de développement. Ce dernier possède déjà un Testnet et son Mainnet devrait sortir en juillet 2021.

ZK Rollups

Les ZK Rollups prennent une approche différente et s’assurent, grâce à des procédés cryptographiques complexes, que chaque transaction qui change l’état du système soit correcte. 

Ce type de Rollup ne possède donc pas de période d’attente pour retirer ses actifs. Cependant il est beaucoup plus complexe à mettre en place et n’est pas compatible EVM. Chaque application souhaitant les utiliser devra donc traduire ses contrats intelligents dans un autre langage. 

Des projets comme Loopring [7] ou DiversiFi [8] tentent à l’heure actuelle de construire des plateformes d’échanges à l’aide de ce type de Rollups.


Vitalik Buturin pense que sur le court terme, les Rollups optimistes vont prendre l’avantage, car ils sont beaucoup plus simples à développer. En revanche, sur le long terme les ZK Rollups vont être majoritairement utilisés, car ils sont beaucoup plus rapides et il n’y a pas de période de retrait. 

Il reste néanmoins de nombreux défis notamment en ce qui concerne la communication entre les différentes solutions de couche 2.

Ces technologies de couche 2 permettront, une fois développées, d’augmenter les transactions par seconde d’un facteur 100. On pourrait ainsi passer de 2000 tps (avec la couche 1) à 200 000 tps (avec les couches 1 et 2). 

Augmenter le nombre de transactions par seconde permettra également de faire diminuer le coût de chacune des transactions. C’est sans compter la prochaine mise à jour du réseau Ethereum contenant l’EIP 1559 qui devrait modifier la manière dont les frais de transaction sont calculés.

EIP 1559

Sur Ethereum, les frais de transaction sont payés avec du carburant (« gas ») en fonction de la quantité de calculs à réaliser. Une transaction souhaitant transférer de l’Ether coûtera peu de carburant contrairement à l’exécution d'un contrat intelligent complexe qui en demandera davantage.

L’achat de carburant pour la transaction se fait en Ethereum et fonctionne avec un modèle d’enchère à l’heure actuelle. Cet achat est réalisé automatiquement par le portefeuille qui doit estimer le prix du carburant en fonction de la demande du réseau. Ceci est difficile et pousse souvent les utilisateurs à payer davantage pour faire passer leur transaction plus rapidement. EIP 1559 permettra entre autres aux portefeuilles de ne plus avoir besoin d’estimer ce prix et ainsi, de le connaître avec certitude. On peut caractériser cette mise à jour comme une solution de couche 1 puisqu’elle modifie le fonctionnement de la chaîne mère.

Dans EIP 1559 (EIP pour Ethereum Improvement Proposal), la taille des blocs pourra varier pour prendre plus de transactions lorsque le réseau sera saturé. À l’heure actuelle, un bloc peut contenir jusqu’à 12,5 millions d’unités de carburant. Il pourra monter jusqu’à 25 millions après la mise à jour.

En plus de cela, la structure des frais sera modifiée en un frais de base plus un pourboire.

Les frais de base augmenteront si le bloc est rempli à plus de 12,5 millions de carburant et diminueront dans le cas contraire (par pallier de +/- 12,5% par bloc). Ainsi, si trop de blocs affilés sont pleins, le prix du carburant deviendra prohibitif et de l’espace sera libéré dans les blocs jusqu’à ce qu’ils passent sous les 12,5 millions de carburants.

Ces frais de base sont ensuite brûlés pour éviter que les mineurs ralentissent le réseau (pour faire augmenter le prix du carburant et gagner davantage d’Ethers). Les Ethers ainsi détruits sont retirés de la circulation et, s’il y a plus d’Ethers brulés qu’émis à chaque bloc, le nombre d’Ethers en circulation pourra diminuer. Actuellement, deux Ethers sont émis à chaque bloc (toutes les 15 secondes) et le prix du carburant varie entre 60 et 150 Gwei [8] par unité de carburant (1Gwei = 0,000000001 Ether). Il faut donc, par exemple, un bloc de 20 millions de carburants avec des frais de base à 100 Gwei pour brûler deux Ethers ou un bloc de 12,5 millions de carburants à 160 Gwei par unité de carburants. Ainsi, l’inflation de l’Ether sera très faible la plupart du temps et négative lors des pics d’utilisations du réseau.

En plus de cela, les utilisateurs peuvent ajouter un pourboire pour inciter les mineurs à faire passer leur transaction en priorité. C’est ce pourboire qui va rémunérer les mineurs.


Ainsi, l’avantage principal de l’EIP 1559 est de rendre le coût des frais de transactions beaucoup plus prédictible. Cela pourrait ainsi les réduire puisque le système d’enchère actuel n’est pas très efficace. Néanmoins, il est probable que le coût des transactions reste le même si la demande augmente. De plus, une partie des frais sera maintenant brulée ce qui pourra faire diminuer le nombre d’Ethers en circulation lorsque le réseau sera fortement utilisé.

Conclusion

Nous avons ainsi présenté comment la chaîne de blocs Ethereum peut augmenter son nombre de transactions par seconde. Dans un premier temps avec le sharding et l’EIP 1559 (qui sont des solutions de couche 1) puis avec les canaux, Plasma et les Rollups (qui sont des solutions de couche 2). Ces méthodes seront introduites au fur et à mesure de l’année 2021 et devraient être complètement présentes en 2022. 

Cela pourrait augmenter le nombre de transactions par seconde d’Ethereum d’un facteur 10 000, les faisant passer de près de 20 tps aujourd’hui à 200 000 demain. En comparaison, le réseau de paiement Visa traite en moyenne 2000 tps [10] et il y a 60 000 recherches par seconde sur Google [11]. 

Ethereum a ainsi de grandes chances de garder sa place de leader s’il est capable de s’améliorer rapidement.

Références

[1] EtherScan : https://etherscan.io/ (consulté le 05/05/2021).

[2] The Tim Ferris Show, Interview de Vitalik Buterin : https://www.youtube.com/watch?v=42uhsP4vvCE (consulté le 05/05/2021).

[3] Ethereum, Shards Chain : https://ethereum.org/en/eth2/shard-chains/ (consulté le 05/05/2021).

[4] Vitalik Buterin Blog, An incomplet guide to Rollups : https://vitalik.ca/general/2021/01/05/Rollup.html (consulté le 08/05/2021).

[5] OmiseGo : https://omg.network/ (consulté le 13/05/2021).

[6] Optimism : https://optimism.io/ (consulté le 08/05/2021).

[7] Loopring : https://loopring.org/#/ (consulté le 08/05/2021).

[8] DiversiFi : https://www.deversifi.com/ (consulté le 08/05/2021).

[9] Cours du carburant sur Ethereum : https://ycharts.com/indicators/ethereum_average_gas_price#:~:text=Ethereum%20Average%20Gas%20Price%20is,941.2%25%20from%20one%20year%20ago (consulté le 13/05/2021).

[10] Binance Academy, TPS : https://academy.binance.com/en/glossary/transactions-per-second-tps (consulté le 05/05/2021).

[11] Données sur Google : https://www.blogdumoderateur.com/chiffres-google/#:~:text=80%20000%20requ%C3%AAtes%20chaque%20seconde,6%2C9%20milliards%20par%20jour  (consulté le 05/05/2021).


Suivez nous sur les réseaux :