Maintenant que les smart contracts n'ont plus de secret pour vous, intéressons-nous ici à la machine qui permet de les exécuter : la Machine Virtuelle d'Ethereum ou « Ethereum Virtual Machine » en anglais (EVM pour les intimes). Dans cet article, nous vous présenterons en détail cet élément incontournable du réseau, qui constitue en quelque sorte son moteur. De quoi s'agit-il ? À quoi sert-elle ? Comment fonctionne-t-elle ? C'est ce à quoi nous tenterons de répondre dans ces quelques lignes. Accrochez-vous, ça devient complexe !
Temps de lecture estimé : 10 minutes
Table des matières
Certaines des illustrations présentent dans cet article ont été inspirées de celles de ce diaporama qui illustre le « yellow paper » d'Ethereum.
Prérequis
Pour bien comprendre toutes les notions qui seront abordées ici, il est préférable, si vous ne les avez pas encore lus, que vous commenciez par prendre connaissance des articles suivants pour avoir toutes les bases nécessaires :
- Bitcoin, un ensemble de briques technologiques ainsi que l'ensemble des articles consacrés aux fondements techniques de Bitcoin ;
- Le World State et les comptes, les disques durs d'Ethereum ;
- Les smart contracts, la promesse d'Ethereum.
Vous serez alors prêt à lire ce qui suit.
Qu'est-ce qu'une machine virtuelle ?
Imaginez que vous ayez un PC fonctionnant sous Windows et que vous souhaitiez utiliser un logiciel seulement disponible sur iOS. Au lieu d’acheter un Mac, vous pouvez créer une machine virtuelle sur votre PC qui simule un Mac. Vous pouvez alors utiliser ce programme comme si vous étiez sur un vrai Mac. C’est ça, une machine virtuelle !
En effet, les machines virtuelles ne sont pas propres à Ethereum, et se retrouvent dans beaucoup d'autres applications.
Il s'agit de l'équivalent d'une machine physique (ordinateur, smartphone, serveur, etc.) mais qui n'a rien de tangible et qui existe uniquement sous forme de code informatique. Elle fait cependant appel à des ressources physiques pour fonctionner.
Plusieurs machines virtuelles peuvent exister sur une même machine physique. Une même machine virtuelle peut aussi être utilisée par plusieurs machines physiques, comme c'est le cas pour l'EVM.
La machine virtuelle d'Ethereum
Le rôle de l'EVM
Nous l'avons précédemment, Ethereum peut être assimilé à une machine d’état (state) basée sur des transactions.
Cette machine voit son état changer lorsque la machine virtuelle d’Ethereum, l’EVM, y applique des changements d’état, via les transactions opérées sur le réseau. L'EVM peut ainsi être considérée comme un ordinateur global utilisé par les différents nœuds pour consulter et/ou mettre à jour l'état du réseau.
C'est l'environnement d'exécution des contrats intelligents.
Contrairement à un ordinateur classique, l’EVM est décentralisée et exécute le même code sur de nombreux nœuds. Cela la rend beaucoup plus résistante aux pannes et à la censure.
L'EVM est aussi l'environnement dans lequel se trouvent tous les comptes Ethereum (avec leurs soldes) et les contrats intelligents. Cet ensemble de données est aussi appelé « World State » ou « État du monde » et représente l'état de la blockchain Ethereum à un instant T.
Enfin, l'EVM est l'élément du protocole en charge du calcul. Chaque nœud du réseau Ethereum exécute la même machine virtuelle Ethereum, ce qui leur permet de trouver le même résultat pour une opération donnée en un temps identique.
L'EVM fonctionne en continu pour mettre à jour la World State bloc après bloc, en fonction de règles prédéfinies.
L'EVM est dite « Turing Complete », c'est-à-dire qu'elle est capable d'exécuter n’importe quel processus de calcul, indépendamment de sa complexité, et notamment des boucles (ce qui fait défaut à Bitcoin). C'est grâce à cela qu'elle est capable d'exécuter tous types de contrats intelligents. Elle utilise son propre langage d’instructions de bas niveau appelé bytecode.
L'anatomie de l'EVM
Bien qu'ils présentent des différences importantes, la machine virtuelle d'Ethereum peut être comparée de plusieurs façons à un ordinateur « classique ».
Tout comme un ordinateur classique, l’EVM a une mémoire et un stockage. Cependant, contrairement à un ordinateur classique où ces dernières sont limitées par le matériel physique, elles sont théoriquement illimitées sur l'EVM.
La mémoire de l’EVM est temporaire et est effacée après chaque exécution de contrat. Elle peut être assimilée à la RAM (Random Access Memory - mémoire vive) d’un ordinateur classique. Sa taille varie proportionnellement à la quantité de données gérées par le contrat concerné.
Le stockage quant à lui est persistant et conserve les données entre les exécutions. Il peut être comparé au disque dur d'un ordinateur classique. Il intervient entre l’appel d’une fonction et une transaction.
C'est une sorte de base de données clé-valeur, où chaque clé et chaque valeur sont des nombres de 256 bits.
L’EVM a également une pile, tout comme un ordinateur classique. Cependant, elle est beaucoup plus limitée en taille. Elle a une profondeur de 1 024 éléments, étant chacun codé sur 256 bits. Elle est utilisée pour exécuter les opérations définies dans les contrats intelligents. Elle fonctionne sur le principe du dernier entré, premier sorti (LIFO pour Last In First Out).
Le code des contrats intelligent peut s'apparenter à la ROM (Read Only Memory - mémoire morte) d’un ordinateur. Ils ne peuvent pas être modifiés.
Enfin, c'est l'EVM elle-même qui joue le rôle du processeur. Elle lit et exécute le bytecode des contrats intelligents, quand un processeur classique exécute du code binaire.
Les couches de l'EVM
L'EVM, qui constitue elle-même la couche d'exécution d'Ethereum, peut être conceptualisée en plusieurs couches qui travaillent ensemble pour assurer l'exécution des contrats intelligents.
- La couche de code : ce sont tous les contrats intelligents déployés sur la blockchain Ethereum ;
- La machine virtuelle : c’est l’environnement d’exécution des smart contracts ;
- Les nœuds : ce sont les ordinateurs qui font tourner un logiciel appelé « client ». Ce dernier permet, entre autres, à l'EVM d'utiliser le matériel physique sur lequel il est installé pour effectuer ses calculs.
Le fonctionnement de l'EVM
L'EVM se comporte comme une fonction mathématique : avec des données en entrée, elle produit une sortie déterministe. Son rôle est de mettre à jour la World State en fonction des transactions qui ont lieu sur le réseau.
Ces dernières peuvent être émises par un compte détenu en externe ou par un compte de contrat.
Lorsqu’un nouveau bloc est validé, l’EVM doit traiter chaque transaction qui y figure, de manière synchrone. Les transactions simples entre comptes externes (EOA) sont traitées en premier.
Viennent ensuite, les transactions qui nécessitent d'exécuter des contrats intelligents. Lorsqu’une transaction est envoyée à une adresse de contrat, ’EVM interprète les instructions. Les contrats sont exécutés de manière isolée, c'est-à-dire que le code d’un contrat ne peut pas interférer directement avec un autre contrat ou accéder à ses données internes.
Un contrat peut néanmoins interagir avec un autre contrat en appelant ses fonctions publiques. L'EVM créée alors un nouvel environnement d’exécution. De cette manière, la fonction appelée ne peut affecter le contrat appelant. Cette isolation est essentielle pour la sécurité de la blockchain, car elle garantie que chaque contrat est exécuté de manière fiable et prévisible.
L'ensemble de ces opérations sont exécutées par tous les nœuds du réseau, pour chaque transaction du bloc. Les résultats obtenus sont mis en commun et comparés, avant d'être validés s'ils obtiennent le consensus.
L'équivalence et la compatiblité EVM
L'EVM sert de référence dans l'écosystème et de nombreuses blockchains s'appuient dessus en étant compatibles ou équivalentes. Voyons la différence entre ces deux concepts :
- L'équivalence EVM : une blockchain atteint l'équivalence EVM si elle est en conformité totale avec le yellow paper d'Ethereum. En d'autres termes, cela signifie que toute application, tous contrats intelligents ou toutes transactions doivent fonctionner de manière exactement identique à ce qui se passe sur Ethereum. Les applications peuvent être portées sans aucune modification d'une blockchain à l'autre. À l’heure actuelle, aucune blockchain n'a encore atteint l'équivalence totale avec l'EVM. Les réseaux comme Optimism et Metis cherchent cependant à atteindre cet objectif ;
- La compatibilité EVM : une blockchain est dite EVM compatible si une application basée sur Ethereum peut y fonctionner sans avoir à subir de modification majeure. La compatibilité offre une certaine flexibilité, et les blockchains peuvent s’écarter légèrement des normes EVM. Elles peuvent par exemple proposer quelques optimisations ou fonctionnalités supplémentaires. Elles doivent cependant être capables d'exécuter le même code de contrat intelligent à quelques détails près. Cela permet aux développeurs de déployer leurs applications décentralisées (dApps) sur plusieurs blockchains sans avoir à réécrire ou à adapter considérablement leur code. C’est un avantage majeur dans le sens où cela facilite la portabilité et l’interopérabilité entre différentes blockchains. À titre d'exemple, la célèbre plateforme d'échange décentralisée Uniswap est déployée sur plusieurs blockchains EVM compatibles en plus d'Ethereum comme la BNB Chain, Avalanche, Polygon, Celo, etc.
L'EVM en quelques mots
Pour résumer, l'EVM est un ordinateur virtuel tournant sur des milliers d'ordinateurs physiques en même temps, qui exécutent tous les mêmes transactions.
L'EVM ne « comprend » que le bytecode, qui est obtenu en compilant le code des contrats intelligent. L'EVM exécute chaque smart contract dans un environnement isolé, pour une sécurité maximum.
Lorsque l'EVM exécute un smart contrat, ceci modifie l'état du World State. Les nœuds comparent le nouvel état qu'ils ont obtenu grâce à l'EVM. Lorsqu'ils sont d'accord, le nouvel état est enregistré sur un nouveau bloc de la blockchain.
Pour éviter les boucles infinies, chaque opération exécutée par l'EVM a un coût, à payer en ether (ETH). C'est ce jeton, sa tokenomics et les mécanismes de frais que nous vous présenterons dans l'article suivant. Ne vous en faites pas si vous ne comprenez pas tout, l'utilisation d'Ethereum ne nécessite heureusement pas de saisir tous ces détails techniques. Les plus curieux d'entre vous y trouveront cependant des éléments passionnants !