Passer au contenu principal

Qu'est-ce que la machine virtuelle Ethereum (EVM) ?

Mis à jour le
26 novembre 2025

5 minutes de lecture

Aperçu

La machine virtuelle Ethereum (EVM) est un élément central d'Ethereum qui contribue au fonctionnement de la blockchain et des contrats intelligents. Elle joue un rôle essentiel pour permettre à Ethereum de gagner en popularité auprès des utilisateurs et de se décentraliser. Dans ce guide, nous allons examiner en détail l'EVM afin de comprendre ce qu'elle est et comment elle fonctionne. Nous aborderons ensuite quelques points clés pour consolider nos connaissances.

Vous préférez un tutoriel vidéo ? Suivez Sahil et découvrez la machine virtuelle Ethereum (EVM) en 5 minutes.
Abonnez-vous à notre chaîne YouTube pour découvrir d'autres vidéos !

Ce dont vous aurez besoin


  • Connaissances de base sur Ethereum
  • Connaissances de base en matière de structures de données et de mémoire

Ce que vous allez apprendre


  • Qu'est-ce que la machine virtuelle Ethereum (EVM) ?
  • Fonctionnement de la machine virtuelle Ethereum (EVM)
  • Points clés à retenir concernant la machine virtuelle Ethereum (EVM)

Qu'est-ce que l'EVM ?

La machine virtuelle Ethereum (EVM) est le moteur de calcul d'Ethereum qui gère l'état de la blockchain et permet le fonctionnement des contrats intelligents. L'EVM est intégrée au logiciel client (par exemple, Geth, Nethermind, etc.) dont vous avez besoin pour faire fonctionner un nœud sur Ethereum. Les nœuds du réseau Ethereum conservent des copies des données de transaction, que l'EVM traite afin de mettre à jour le registre distribué. De manière générale, les nœuds du réseau Ethereum prennent en charge l'EVM de manière native, car le logiciel client implémente cette fonctionnalité.

Voyons maintenant certaines des tâches assurées par l'EVM.

L'EVM participe à la création des blocs et à l'exécution des transactions. Lors de la création d'un bloc, l'EVM définit les règles de gestion de l'état d'un bloc à l'autre. Ces états sont stockés dans un Merkle Patricia Trie et constituent l'état de référence d'Ethereum.

Lors de l'exécution d'une transaction, l'EVM exécute des tâches (par exemple, des appels de fonction vers un contrat intelligent) en interprétant les instructions contenues dans les opcodes (instructions machine de bas niveau) ; toutefois, les données sont formatées en bytecode. Pour convertir les données en bytecode, vous pouvez utiliser un langage de programmation tel que Solidity (c'est-à-dire le langage de programmation natif des contrats intelligents) afin de compiler et de déployer le contrat intelligent en bytecode.

Il convient de noter que lorsque l'EVM exécute des tâches, il est limité par la quantité de gaz fournie par la transaction et par les contraintes générales de l'EVM. Le gaz est une unité de mesure de la puissance de calcul sur Ethereum.

Pour en savoir plus sur les transactions, consultez notre guide intitulé « Qu'est-ce qu'une transaction Ethereum ? »

Voyons maintenant l'architecture de l'EVM.

Comment l'EVM est-elle conçue ?

L'EVM fonctionne selon une structure de mémoire basée sur une pile et comprend des composants de mémoire tels que la mémoire, le stockage et la pile (qui servent à lire et à écrire sur la blockchain ainsi qu'à gérer l'état).

L'EVM est considérée comme quasi-Turing-complet, ce qui signifie qu’il peut résoudre des problèmes à partir d’un ensemble d’instructions et de données d’entrée, mais qu’il est limité par la quantité de gaz fournie avec la transaction.

Voyons maintenant comment fonctionne l'EVM en interne lors de l'exécution du bytecode d'une transaction ou lors de la création d'un nouveau bloc.

Comment fonctionne l'EVM ?

Dans cette section, nous allons voir comment fonctionne l'EVM. Notez qu'il s'agit d'une explication générale qui ne couvre pas toutes les opérations de l'EVM.

Comme nous l'avons mentionné précédemment, l'EVM exécute des tâches formatées en bytecode, qu'elle interprète sous forme d'opcodes. Voyons comment le code d'un contrat intelligent (bytecode) est décomposé en opcodes.

Dans cet exemple, nous allons nous référer au contrat de stockage simple (1_Storage.sol) disponible sur Remix.IDE. Le bytecode compilé de ce contrat de stockage simple se présente comme suit :

608060405234801561001057600080fd5b50610150806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80632e64cec11461003b5780636057361d14610059575b600080fd5b610043610075565b60405161005091906100d9565b60405180910390f35b610073600480360381019061006e919061009d565b61007e565b005b60008054905090565b8060008190555050565b60008135905061009781610103565b92915050565b6000602082840312156100b3576100b26100fe565b5b60006100c184828501610088565b91505092915050565b6100d3816100f4565b82525050565b60006020820190506100ee60008301846100ca565b92915050565b6000819050919050565b600080fd5b61010c816100f4565b811461011757600080fd5b5056fea26469706673582212209a159a4f3847890f10bfb87871a61eba91c5dbf5ee3cf6398207e292eee22a1664736f6c63430008070033

Vous pouvez consulter ce même bytecode en vous rendant sur Remix.IDE, en accédant au contrat d'exemple 1_Storage.sol, puis en le compilant et en cliquant sur le bouton « Copier le bytecode ».

Il convient de noter que l'EVM n'utilise que 140 opcodes uniques ; cependant, il existe au total 256 opcodes d'une longueur d'un octet. Examinons maintenant le bytecode de l'une des fonctions du contrat (par exemple, ` store()`).

60003560e01c80632e64cec11461003b5780636057361d1461005957

Chaque octet de l'exemple ci-dessus correspond à un code d'opération différent. Par exemple, le premier octet (par exemple, 60) correspond à un opcode PUSH1, l'octet suivant (par exemple, 00) correspond aux données poussées, le troisième octet (60) correspond à nouveau à l'opcode PUSH1, et l'octet suivant correspond à son entrée (par exemple, e0). Pour voir tous les codes d'opération de la fonction ci-dessus, vous pouvez vous rendre sur evm.codes/playground, saisir le bytecode dans l'IDE et cliquer sur « Run » (veillez à sélectionner « Bytecode » dans le menu déroulant).

Maintenant que nous en savons un peu plus sur la manière dont l'EVM exécute le bytecode, passons à la compréhension de la fonction de transition d'état d'Ethereum.

La fonction de transition d'état d'Ethereum

Y(S, T) = S'

Où :


  • Y = Fonction de transition d'états
  • S = État actuel de la blockchain (soldes, contrats, stockage)
  • T = Nouvelle transaction
  • S' = État résultant après la transaction

La fonction de transition d'état d'Ethereum est une formule que l'EVM traite à chaque fois qu'il exécute une transaction. Cette fonction a pour but de s'assurer que les transactions respectent la norme en vigueur et sont techniquement valides (par exemple, un nonce correct et une signature valide). On peut la considérer comme une fonction pure qui prend l'instantané actuel de la blockchain et une transaction, puis renvoie le nouvel état valide.

Vous devriez désormais mieux comprendre le fonctionnement et la conception de l'EVM. Passons maintenant en revue certains des principaux avantages de l'EVM.

Points clés à retenir


  • Turing-complet: le fait qu'Ethereum soit Turing-complet lui permet d'exécuter n'importe quelle logique, contrairement à d'autres blockchains telles que Bitcoin.
  • Composabilité: Ethereum n'est pas la seule blockchain compatible avec l'EVM. De nombreuses chaînes de couche 1 (L1) et de couche 2 (L2) sont compatibles avec l'EVM, ce qui facilite la migration et le déploiement de contrats, ainsi que le transfert de jetons d'une chaîne à l'autre. Citons par exemple Polygon, BNB Smart Chain, Avalanche, et bien d'autres encore.
  • Décentralisation: l'EVM permet aux développeurs de déployer des dApps (applications décentralisées) sur Ethereum.

Ressources supplémentaires

Si vous souhaitez approfondir vos connaissances sur l'EVM, consultez les ressources suivantes :


Ou si vous souhaitez en savoir plus sur la création de votre propre contrat intelligent, consultez notre guide intitulé « Présentation du fonctionnement des contrats intelligents sur Ethereum ».

Conclusion

Bravo ! Vous en savez désormais un peu plus sur l'EVM. Vous avez des idées ou des questions, ou vous souhaitez partager ce que vous avez appris ? Dites-le-nous sur Discord ou contactez-nous via Twitter.

Nous ❤️ les commentaires !

Si vous avez des commentaires ou des questions concernant ce guide, n 'hésitez pas à nous en faire part. Nous serions ravis d'avoir votre avis !

Partager ce guide