Capitalisation 2,28 T $ −6,41 % sur 24 heuresVolume 24 h 91,15 Md $Dominance BTC 58,7 %ETH 10,1 %Fear & Greed 13 Peur extrêmeCryptos 22 238

EVM Ethereum : comment fonctionne la machine virtuelle d’Ethereum

EVM Ethereum expliquée : état du monde, opcodes sur une pile de 256 bits, appels, gas, clients d'exécution et changements prévus avec Glamsterdam.

Avancé 34 min de lectureMis à jour À lire d'abord : Histoire d’Ethereum : le livre blanc de 2013, les fondateurs et chaque grande mise à jour
Une puce informatique, des engrenages, des nœuds reliés et des blocs sur fond sombre
Sommaire
  1. Une empreinte de 32 octets garde des milliers de nœuds Ethereum en phase
  2. L’état du monde : un registre de comptes et ce à quoi chacun s’engage
    1. Quatre champs par compte, et ce que la machine en fait
    2. Pourquoi l’état est un trie et non un tableau
    3. Arbre binaire, arbre de Verkle ou aucun des deux : le prochain arbre d’état reste un brouillon
  3. Comment fonctionne l’EVM d’Ethereum : une machine à pile de mots de 256 bits
    1. Le bytecode : ce qu’est vraiment un contrat sur la chaîne
    2. La pile : 1 024 emplacements de 256 bits
    3. Cinq endroits où garder des données, cinq durées de vie
    4. Un programme de neuf octets, exécuté à la main
  4. Pourquoi chaque instruction a un prix
    1. Le gas est d’abord un compteur, ensuite des frais
    2. Déterministe par construction
  5. Quand les contrats appellent des contrats
    1. CALL, STATICCALL et DELEGATECALL décident quel stockage change
    2. CREATE et CREATE2 : où atterrissent les nouveaux contrats
    3. Les précompilés : du code natif aux adresses les plus basses
  6. Une transaction, de la signature au reçu
    1. Les vérifications avant l’exécution du moindre code
    2. Exécution, annulation et validation
    3. Reçus et journaux : ce qu’une transaction laisse derrière elle
  7. Qui fait tourner la machine : cinq clients d’exécution et un lien avec le consensus
    1. Geth, Nethermind, Besu, Erigon et Reth, comptés de différentes façons
    2. L’API Engine : comment l’EVM reçoit ses ordres depuis The Merge
    3. Pourquoi le bug d’un client compte : les seuils d’un tiers et de deux tiers
  8. La même machine sur d’autres chaînes
    1. Compatible EVM, équivalent EVM et identifiant de chaîne
    2. Les types 1 à 4 de zkEVM selon Vitalik Buterin
  9. Comment l’EVM continue de changer
    1. Fork après fork : les mises à niveau qui ont changé la machine
    2. Glamsterdam : une révision des prix qui pourrait casser les contrats au gas codé en dur
    3. EOF : ni dans Fusaka ni dans Glamsterdam
    4. RISC-V : une proposition de 2025, pas un plan
  10. Ce que la machine change pour les utilisateurs, les développeurs et les tribunaux

Une empreinte de 32 octets garde des milliers de nœuds Ethereum en phase

Dans la première semaine de novembre 2026, Base, BNB Chain et le réseau Tempo ont diffusé des mises à jour à leurs opérateurs de nœuds. Un bug de staking means depositing a proof of stake coin with a protocol that stakes it for you and issues a transferable token (such as Lido stETH or rETH) representing the deposit plus rewards, which you can use or sell while the coins stay staked.">Reth, un client d’exécution développé par Paradigm, pouvait faire calculer à un nœud une racine d’état erronée. Les correctifs sont sortis entre le 4 et le 6 novembre, et aucune perte de fonds, aucun exploit ni aucune panne n’a été signalé, comme le détaille notre article sur le bug de la racine d’état de Reth et les correctifs des couches 2. L’épisode est une bonne porte d’entrée pour comprendre comment fonctionne l’EVM d’Ethereum, car Reth est l’un des programmes qui l’implémentent. Le correctif lui-même, la pull request 28264 de Reth, a été fusionné le 3 novembre sous le titre « fix(trie): tighten iterator seek boundary ».

Une racine d’état est un nombre de 32 octets. Chaque en-tête de bloc Ethereum en porte une. Elle résume tous les soldes de comptes, tout le code des contrats et chaque emplacement de stockage tels qu’ils sont une fois les transactions du bloc exécutées. Des milliers d’ordinateurs, qui font tourner cinq grands clients écrits dans quatre langages, recalculent ce nombre chacun de leur côté. Un nœud qui obtient une autre valeur n’est plus d’accord avec la chaîne. Les règles que tous doivent reproduire au bit près sont celles de la machine virtuelle d’Ethereum (Ethereum Virtual Machine, EVM).

La suite commence par les données, l’état du monde et la façon dont un bloc s’y engage, puis ouvre la machine : du bytecode exécuté un opcode à la fois sur une pile de mots de 256 bits, les appels entre contrats, le trajet d’une transaction de la signature au reçu, les clients qui font tourner l’ensemble et les changements à venir. Elle prend la suite de notre leçon sur l’histoire d’Ethereum et son livre blanc. Aucune connaissance de Solidity n’est nécessaire : nous restons au niveau des octets.

L’état du monde : un registre de comptes et ce à quoi chacun s’engage

Quatre champs par compte, et ce que la machine en fait

Chaque compte Ethereum a quatre champs : un nonce, un solde en wei, un hash de code et une racine de stockage. Les comptes externes (EOA, pour externally owned accounts) sont contrôlés par une clé privée ; les comptes de contrat sont contrôlés par leur code et ne peuvent pas lancer de transaction par eux-mêmes. Notre guide sur les modèles UTXO et de comptes couvre déjà ces champs, le nonce et le poids du stockage des contrats ; ici, nous regardons seulement ce que l’EVM en fait.

Un compte se retrouve grâce à une adresse de 20 octets. Pour un EOA, l’adresse est formée des 20 derniers octets du hash Keccak-256 de sa clé publique, d’après la documentation d’ethereum.org sur les comptes. Pour un contrat, l’adresse est calculée à la création du contrat, comme on le verra plus bas. Le hash de code pointe vers le bytecode, et la machine n’a aucune instruction pour réécrire le code stocké à une adresse une fois déployé. La racine de stockage est elle-même la racine d’un second arbre, qui contient le stockage de ce seul contrat.

La documentation d’Ethereum écrit tout le système comme une fonction, Y(S, T) = S’ : un ancien état plus une transaction valide donnent un nouvel état. Chaque nœud applique la même fonction à la même entrée et doit aboutir à la même sortie. Tout le reste de cette leçon n’est qu’un détail de cette fonction.

Pourquoi l’état est un trie et non un tableau

Un tableau de comptes serait facile à stocker, mais impossible à vérifier sans le télécharger en entier. Ethereum garde donc l’état dans ce qu’ethereum.org appelle un Merkle Patricia Trie modifié : un arbre à 16 branches au plus par nœud, où le chemin vers une feuille est écrit par la clé et où chaque nœud est identifié par le hash de son contenu. Modifiez un solde et les hashs le long du chemin, de cette feuille jusqu’au sommet, changent, jusqu’à la racine d’état de l’en-tête de bloc.

L’intérêt, ce sont les preuves. Un nœud peut remettre à un inconnu la courte liste des nœuds de l’arbre situés entre un compte et la racine, et toute personne qui possède l’en-tête de bloc peut vérifier que le solde est bien celui annoncé. Une requête eth_getProof envoyée à un nœud Ethereum public le 10 novembre 2026 a renvoyé, pour une adresse ordinaire, une preuve de compte de neuf nœuds. Le stockage de chaque contrat forme son propre trie du même type, ce qui explique qu’un solde de jeton soit, au bout du compte, une feuille de l’arbre de stockage du contrat du jeton. Le volume de données suit : la proposition EIP-8037 indique que la base d’état de Geth pesait environ 390 Gio en janvier 2026.

Un coffre-fort, un document, une clé et une loupe sur fond sombre
Chaque solde et chaque emplacement de stockage est une feuille du trie d'état, vérifiable face à une seule racine.

Arbre binaire, arbre de Verkle ou aucun des deux : le prochain arbre d’état reste un brouillon

Le trie hexaire a un coût. Les preuves sont longues, car chaque niveau peut comporter jusqu’à 15 hashs frères, et Keccak est lent à prouver dans des circuits à divulgation nulle de connaissance. Pendant des années, le plan officiel a été un arbre de Verkle, et la page de feuille de route d’ethereum.org le décrit encore ainsi. Depuis janvier 2025, un concurrent est sur la table : l’EIP-7864, « Ethereum state using a unified binary tree » (en anglais), rédigée par Vitalik Buterin, Guillaume Ballet, Dankrad Feist et d’autres.

L’EIP-7864 ouvrirait un nouvel arbre binaire qui réunit données de comptes, code et stockage, tandis que le trie actuel serait gelé puis migré par une proposition distincte. Ses auteurs font valoir qu’un arbre purement fondé sur des hashs donne des preuves plus petites, convient mieux aux preuves à divulgation nulle de connaissance et évite la cryptographie à courbes elliptiques sur laquelle reposent les arbres de Verkle, qu’un ordinateur quantique pourrait un jour casser. La fonction de hachage n’est pas choisie : le brouillon utilise BLAKE3 pour les tests et cite Keccak et Poseidon2 comme candidates. Au 10 novembre 2026, l’EIP est toujours au statut Draft et aucune mise à niveau nommée ne prévoit de changer l’arbre d’état.

Comment fonctionne l’EVM d’Ethereum : une machine à pile de mots de 256 bits

Le bytecode : ce qu’est vraiment un contrat sur la chaîne

Sur la chaîne, un smart contract n’est rien de plus qu’une suite d’octets stockée à une adresse. L’adresse du jeton USDC sur Ethereum, 0xA0b8…eB48, contenait 2 186 octets de code le 10 novembre 2026. Depuis la mise à niveau Spurious Dragon du 22 novembre 2016 (bloc 2 675 000), l’EIP-170 plafonne le code déployé à 24 576 octets. L’EIP-7954, prévue pour la mise à niveau Glamsterdam (statut Last Call, date limite de relecture au 1er novembre 2026), porterait ce plafond à 64 Kio, soit 65 536 octets, et la limite du code d’initialisation de 48 Kio à 128 Kio.

Chaque instruction, ou opcode, tient sur un octet. 0x01 est ADD, 0x55 est SSTORE, 0x00 est STOP. Quelques opcodes portent des données : PUSH1 (0x60) est suivi d’un octet à placer sur la pile, et ainsi de suite jusqu’à PUSH32, qui en porte 32. Un contrat écrit en Solidity ou en Vyper est compilé dans ce format, comme le montre, côté développeur, notre guide pour apprendre Solidity.

Quand une transaction appelle un contrat, ses données d’entrée (calldata) commencent en général par un sélecteur de fonction de 4 octets, les quatre premiers octets du hash Keccak-256 de la signature de la fonction. 0xa9059cbb, par exemple, correspond à transfer(address,uint256), la fonction derrière la plupart des transferts de jetons. Les premières instructions du contrat lisent ces quatre octets et sautent vers le morceau de code correspondant. smart contract holding reserves of two or more tokens, supplied by users, that a decentralized exchange uses to execute trades automatically at a price set by a formula.">pool diverge, compared with simply holding the same tokens in a wallet. It becomes permanent when the provider withdraws.">Il n’existe pas d’autre mécanisme d’aiguillage.

La pile : 1 024 emplacements de 256 bits

C’est une machine à pile, d’une profondeur de 1 024 éléments, chaque élément étant un mot de 256 bits. Ethereum.org explique cette taille de mot par la cryptographie que la chaîne utilise chaque jour : les hashs Keccak-256 et les clés secp256k1 tiennent tous deux dans 256 bits. La plupart des opcodes prennent leurs entrées au sommet de la pile et y remettent leur résultat. ADD retire deux mots et empile leur somme, modulo 2^256.

La machine n’a pas de registres. Les instructions DUP et SWAP n’atteignent que les 16 éléments du haut, une limite que l’EIP-8024 (prévue pour Glamsterdam) lèverait avec trois nouvelles instructions, SWAPN, DUPN et EXCHANGE. Empiler un 1 025e élément, ou dépiler une pile vide, arrête l’exécution en cours avec une erreur.

Cinq endroits où garder des données, cinq durées de vie

Le code d’un contrat travaille avec plusieurs zones de données. Elles diffèrent par leur durée de vie et par leur coût, et cette différence façonne la manière d’écrire tout contrat.

Zone de donnéesCe qu’elle contientDurée de vieCoût typique (gas)Qui peut y écrire
PileJusqu’à 1 024 mots de 256 bitsUn cadre d’appel2 à 3 par opcode simpleLe code en cours d’exécution
MémoireUn tableau d’octets qui grandit à l’usageUn cadre d’appel3 par accès à un mot, plus des frais d’extension croissantsLe code en cours d’exécution
Stockage (storage)Paires clé-valeur de mots de 256 bits, par contratPermanente, fait partie de l’état du monde2 100 pour une première lecture (à froid), 100 à chaud ; 22 100 pour remplir un emplacement vide à froidSeulement le code qui s’exécute dans le contexte de ce contrat
Stockage transitoirePaires clé-valeur par contratUne transaction100 par TLOAD ou TSTORESeulement le code qui s’exécute dans le contexte de ce contrat
CalldataOctets d’entrée de l’appel, en lecture seuleUn cadre d’appelPayé par l’émetteur dans le gas intrinsèqueL’appelant

Le stockage transitoire est la zone la plus récente. Il est arrivé avec l’EIP-1153 dans la mise à niveau Dencun du 13 mars 2024 (Cancun côté exécution) et ajoute deux opcodes, TLOAD (0x5c) et TSTORE (0x5d). L’EIP énonce sa durée de vie sans détour : « Toutes les valeurs du stockage transitoire sont supprimées à la fin de la transaction » (notre traduction). Il coûte une fraction du stockage et sert aux verrous anti-réentrance ou à passer des données entre contrats au sein d’une même transaction. Deux zones en lecture seule complètent le tableau : les données de retour du dernier appel, et le code du contrat lui-même.

Un programme de neuf octets, exécuté à la main

Le moyen le plus rapide de voir la machine, c’est de faire tourner un tout petit programme. Les neuf octets 0x600260030160005500 additionnent 2 et 3 et rangent le résultat dans l’emplacement de stockage 0. Chacun peut reproduire l’exécution avec la méthode eth_call d’un nœud public et un « state override » qui place ce code à une adresse vide.

60 02   PUSH1 0x02
60 03   PUSH1 0x03
01      ADD
60 00   PUSH1 0x00
55      SSTORE
00      STOP
ÉtapeOpcodePile après (sommet en premier)Gas facturéGas d’exécution cumulé
1PUSH1 0x02[2]33
2PUSH1 0x03[3, 2]36
3ADD[5]39
4PUSH1 0x00[0, 5]312
5SSTORE (clé 0 au sommet, valeur 5)[]22 10022 112
6STOP[]022 112

SSTORE prend la clé au sommet de la pile et la valeur juste dessous : l’ordre des empilements compte donc. Quatre instructions bon marché coûtent 12 gas au total ; l’unique écriture en stockage en coûte 22 100, car l’emplacement est touché pour la première fois dans la transaction (2 100) et passe de zéro à une valeur non nulle (20 000). Ajoutez les 21 000 gas que toute transaction paie avant qu’aucun code ne s’exécute, et la facture est de 43 112 gas. Le 10 novembre 2026, un nœud public a accepté l’appel avec une limite de 43 112 gas et l’a refusé avec 43 111, en répondant « out of gas ».

Cinq autres micro-programmes, exécutés de la même façon le même jour, donnent le prix des autres zones de données. Les chiffres ci-dessous sont du gas d’exécution, après la base de 21 000.

ProgrammeCe qu’il faitGas d’exécution mesuré (10 nov. 2026)
0x60005400Lit une fois l’emplacement de stockage 0 (à froid)2 103
0x600054506000545000Lit deux fois l’emplacement 02 210 (2 100 à froid, puis 100 à chaud)
0x600160005d00Écrit 1 dans l’emplacement transitoire 0106
0x60005c5000Lit l’emplacement transitoire 0105
0x600160005200Écrit un mot en mémoire12 (9 pour les opcodes, 3 pour agrandir la mémoire d’un mot)

Comparez les lignes : remplir un emplacement de stockage vide a coûté 22 100 gas, une écriture transitoire 100, soit un rapport de 221 contre 1. Les concepteurs de contrats consacrent une bonne part de leurs efforts à éviter SSTORE.

Pourquoi chaque instruction a un prix

Le gas est d’abord un compteur, ensuite des frais

Le livre blanc de 2014 était franc sur le risque d’une chaîne programmable : l’EVM est Turing-complète, et « cela signifie que le code EVM peut encoder tout calcul concevable, y compris des boucles infinies » (notre traduction). Personne ne peut prédire en général si un programme s’arrêtera (le problème de l’arrêt), donc Ethereum n’essaie pas. Chaque transaction fixe une limite de gas ; la machine déduit le prix de chaque opcode avant de l’exécuter ; quand le compteur passerait sous zéro, l’exécution s’arrête avec une erreur de gas épuisé (out of gas), les changements d’état de cet appel sont annulés et le gas reste consommé. Une boucle sans fin finit simplement par manquer de gas. La leçon d’histoire raconte comment cette idée est née ; le mécanisme ci-dessus est ce qu’elle est devenue.

Les prix font partie du protocole. Le code source de Go Ethereum liste les valeurs en vigueur, et les EIP expliquent d’où elles viennent.

OpérationGas (règles du réseau principal en vigueur le 10 novembre 2026)Source
ADD, PUSH1, MSTORE (base)3 chacunRéférence des opcodes d’ethereum.org
KECCAK25630 plus 6 par mot de 32 octets hachéParamètres du protocole de Go Ethereum
LOG0 à LOG4375, plus 375 par topic, plus 8 par octet de donnéesParamètres du protocole de Go Ethereum
SLOAD2 100 à froid, 100 à chaudEIP-2929
Accès à un compte (CALL, BALANCE, EXTCODESIZE…)2 600 à froid, 100 à chaudEIP-2929
CALL envoyant de l’ETH9 000 de plus ; 25 000 de plus si le compte destinataire n’existe pasParamètres du protocole de Go Ethereum
CREATE, CREATE232 000, plus 200 par octet de code déployé et 2 par mot de 32 octets de code d’initialisation ; CREATE2 ajoute 6 par mot pour hacher ce codeParamètres du protocole de Go Ethereum
Base de la transaction (intrinsèque)21 000Paramètres du protocole de Go Ethereum

Les prix à froid et à chaud ont une histoire. L’EIP-2929 (en anglais), activée avec la mise à niveau Berlin du 15 avril 2021 (bloc 12 244 000), a relevé le coût du premier accès à un compte ou à un emplacement de stockage dans une transaction, après les attaques par déni de service de 2016. L’EIP cite des rejeux où les transactions d’attaque mettaient de 20 à 80 secondes à s’exécuter, contre quelques millisecondes pour une transaction moyenne, et indique que multiplier ces prix par environ 3 ramène le pire cas à environ 7 à 27 secondes. Une analyse de transactions du réseau de test Goerli, ajoute-t-elle, a chiffré la hausse moyenne des coûts en gas à environ 2,36 %.

Ce que l’utilisateur paie au final, c’est le gas consommé multiplié par un prix par unité de gas, composé d’une base fee qui est brûlée et d’un pourboire pour le validateur. Ce mécanisme, l’EIP-1559 et l’histoire des frais relèvent de notre prochaine leçon sur le gas et l’EIP-1559. Pour la machine, deux limites comptent. Le bloc 26 383 691, produit à 09:43 UTC le 10 novembre 2026, avait une limite de gas de 60 millions, la valeur par défaut adoptée par les équipes de clients avec Fusaka (EIP-7935), et en a utilisé 33,57 millions, avec une base fee de 0,0549 gwei. Depuis la mise à niveau Fusaka du 3 décembre 2025, l’EIP-7825 plafonne aussi toute transaction isolée à 16 777 216 gas (2^24).

Déterministe par construction

Pour que des milliers de nœuds s’accordent sur une même racine d’état, chaque instruction doit donner partout le même résultat. L’EVM n’a donc ni nombres à virgule flottante, ni accès au réseau, ni système de fichiers, ni horloge autre que l’horodatage du bloc en cours. Tout ce qu’un contrat apprend du monde extérieur, un prix par exemple, doit être écrit sur la chaîne par une transaction, ce qui est le travail d’un oracle.

Cette rigueur est ce qui permet à des bases de code indépendantes, en Go, C#, Java et Rust, d’exécuter les mêmes blocs et d’aboutir à la même racine d’état. Les clients se vérifient aussi contre des suites de tests communes : ethereum.org note que tous les clients d’exécution qu’elle liste passent les tests des clients. Un utilisateur qui envoie une transaction par un nœud public n’a aucun moyen de savoir quel client l’a exécutée, et n’en a pas besoin.

Quand les contrats appellent des contrats

CALL, STATICCALL et DELEGATECALL décident quel stockage change

Un contrat peut en appeler un autre au milieu de sa propre exécution. Chaque appel ouvre un nouveau cadre, avec sa propre pile et sa propre mémoire. Trois opcodes font l’essentiel du travail, et le choix de l’un ou de l’autre détermine quelles données le code appelé peut toucher.

Opcode (octet)Code exécutéStockage modifiéÉmetteur vu par l’appeléPeut-il modifier l’état ?
CALL (0xF1)Celui de la cibleCelui de la cibleLe contrat appelantOui, et il peut envoyer de l’ETH
STATICCALL (0xFA)Celui de la cibleAucunLe contrat appelantNon : toute tentative de modification échoue
DELEGATECALL (0xF4)Celui de la cibleCelui de l’appelantL’appelant de l’appelantOui, mais dans le stockage de l’appelant

Le code source de Go Ethereum décrit DELEGATECALL comme l’exécution du code de la cible « avec l’appelant comme contexte », l’émetteur étant fixé à « l’appelant de l’appelant » (notre traduction). En clair, le contrat appelant emprunte la logique d’un autre contrat et l’exécute sur ses propres données.

C’est ainsi que fonctionnent les proxys évolutifs. Les 2 186 octets de l’adresse USDC sont un proxy : il garde les soldes dans son propre stockage et transmet chaque appel par DELEGATECALL à un contrat de logique distinct, dont l’adresse est conservée dans l’un des emplacements de stockage du proxy. Le 10 novembre 2026, cet emplacement pointait vers 0x4350…02dd. Remplacez l’adresse dans l’emplacement et le même jeton exécute un nouveau code. Qui détient ce pouvoir est une question de gouvernance que nous laissons à la leçon ultérieure sur les contrats évolutifs et les clés d’administration.

Un appel qui envoie de l’ETH transmet aussi une allocation de 2 300 gas au destinataire, trop peu pour écrire dans le stockage. Les anciens contrats qui comptent sur ce chiffre exact sont l’une des raisons pour lesquelles la révision des prix de Glamsterdam, décrite plus bas, est délicate.

CREATE et CREATE2 : où atterrissent les nouveaux contrats

Les nouveaux contrats naissent de l’exécution d’un code d’initialisation, dont le résultat devient le code stocké. Avec CREATE (0xF0), la nouvelle adresse dérive de l’adresse du créateur et de son nonce. Avec CREATE2 (0xF5), ajouté par l’EIP-1014 dans la mise à niveau Constantinople du 28 février 2019 (bloc 7 280 000), elle dérive de l’adresse du créateur, d’un sel (salt) choisi par le créateur et du hash du code d’initialisation. On obtient une adresse qui peut être calculée, et même approvisionnée, avant que le contrat existe, ce que les portefeuilles intelligents et les contrats usines utilisent largement.

La suppression de code a elle aussi changé. Depuis Dencun, l’EIP-6780 fait que SELFDESTRUCT ne supprime un compte que s’il est appelé dans la même transaction que celle qui a créé le contrat ; sinon, il se contente d’envoyer le solde ailleurs. La liste de Glamsterdam y ajoute l’EIP-8246, intitulée « Remove SELFDESTRUCT Burn ».

La mise à niveau Pectra du 7 mai 2025 a ajouté un rebondissement au hash de code des EOA. Avec l’EIP-7702 (en anglais), un EOA peut signer une autorisation qui écrit dans son propre champ de code un indicateur de délégation de 23 octets, 0xef0100 suivi d’une adresse de contrat. Les appels vers l’EOA exécutent alors le code du contrat délégué dans le contexte de l’EOA. Le 10 novembre 2026, un tel indicateur figurait dans le code d’au moins une adresse connue du réseau principal. Vous pouvez vérifier votre propre adresse de la même façon : un résultat d’eth_getCode qui commence par 0xef0100 signifie qu’elle est déléguée.

Les précompilés : du code natif aux adresses les plus basses

Certaines opérations seraient trop lentes ou trop coûteuses en bytecode EVM ; le protocole les fournit donc sous forme de contrats précompilés, à des adresses fixes. On les appelle comme n’importe quel contrat, mais ils s’exécutent en code natif à l’intérieur de chaque client. L’EIP-2929 les compte comme « à chaud » dès le début de chaque transaction.

AdresseFonctionArrivé avec
0x01ecrecover : retrouve le signataire d’une signature secp256k1Dès le lancement, 2015
0x02 à 0x04SHA-256, RIPEMD-160, identité (copie de données)Dès le lancement, 2015
0x05MODEXP : exponentiation modulaireByzantium, 16 octobre 2017
0x06 à 0x08Courbe alt_bn128 : addition, multiplication, vérification d’appariementByzantium, 16 octobre 2017
0x09Fonction de compression F de BLAKE2Istanbul, 8 décembre 2019
0x0aÉvaluation de point KZG (preuves de blobs)Cancun, 13 mars 2024
0x0b à 0x11Sept opérations sur la courbe BLS12-381Prague (Pectra), 7 mai 2025
0x100P256VERIFY : vérifie les signatures secp256r1 (P-256)Osaka (Fusaka), 3 décembre 2025

La liste vient des ensembles de précompilés du code source de Go Ethereum, un par fork. Les précompilés comptent aussi en dehors d’Ethereum : les chaînes qui se disent compatibles EVM ne livrent pas toujours le même ensemble, et un contrat qui en dépend peut échouer ailleurs.

Une transaction, de la signature au reçu

Les vérifications avant l’exécution du moindre code

Une transaction appartient à l’un de cinq types : 0 (historique, legacy), 1 (listes d’accès, EIP-2930), 2 (frais de l’EIP-1559, désormais la norme), 3 (transactions à blobs, EIP-4844) et 4 (autorisations de l’EIP-7702). Avant qu’un seul opcode ne s’exécute, le client vérifie que la signature permet de retrouver un émetteur, que le nonce correspond à celui du compte de l’émetteur, que le solde couvre la limite de gas multipliée par les frais maximaux plus l’éventuel ETH envoyé, et que la limite de gas couvre le gas intrinsèque : 21 000, plus des frais pour les calldata, les listes d’accès et la création de contrat. Depuis Fusaka, la limite de gas ne doit pas non plus dépasser 16 777 216. Une transaction qui échoue à ces contrôles n’est pas incluse du tout et ne coûte rien.

Exécution, annulation et validation

Une fois ces contrôles passés, le nonce de l’émetteur augmente, le gas est payé d’avance et l’EVM exécute le code de la cible. L’exécution se termine par STOP ou RETURN (succès), par REVERT (0xFD, un échec voulu qui peut renvoyer un message d’erreur) ou par un arrêt exceptionnel comme un manque de gas ou un opcode invalide. Un échec annule tous les changements d’état du cadre fautif, stockage transitoire compris, mais pas le gas dépensé. Une transaction échouée figure quand même dans son bloc, incrémente quand même le nonce et se paie quand même.

Libérer du stockage donne droit à un remboursement partiel de gas, plafonné depuis la mise à niveau London du 5 août 2021 à un cinquième du gas utilisé (EIP-3529). La liste de Glamsterdam comprend l’EIP-7778, qui cesse de compter les remboursements pour mesurer le remplissage d’un bloc.

Les portefeuilles demandent à un nœud d’estimer le gas dont une transaction a besoin, avec l’appel eth_estimateGas, et la réponse dépasse en général la consommation réelle. Pour notre programme de neuf octets, l’estimation du 10 novembre 2026 était de 43 488 gas, contre 43 112 réellement nécessaires. La marge est voulue : une transaction qui manque de gas échoue et paie quand même le gas qu’elle a brûlé.

Reçus et journaux : ce qu’une transaction laisse derrière elle

Chaque transaction produit un reçu : son statut (1 pour un succès, 0 pour un échec), le gas utilisé et les journaux (logs) qu’elle a émis. Les journaux sont écrits par les opcodes LOG0 à LOG4. Les contrats ne peuvent pas les lire ; ils existent pour les portefeuilles, les explorateurs et les applications, et coûtent bien moins cher que le stockage. L’en-tête du bloc s’engage sur tous les reçus par une racine des reçus, tout comme il s’engage sur l’état.

Un exemple réel : la transaction 0x7c26…416b, dans le bloc 26 383 708 le 10 novembre 2026, a appelé le contrat USDT avec le sélecteur 0xa9059cbb. Elle a fixé une limite de gas de 64 043, en a utilisé 63 209 et a réussi. Son reçu contient un journal du contrat USDT. Le premier topic, 0xddf2…b3ef, est le hash Keccak-256 de Transfer(address,address,uint256) ; les deuxième et troisième topics sont l’émetteur et le destinataire ; le champ de données est le montant, 58 709 442 en unités brutes, soit 58,709442 USDT puisque le contrat déclare six décimales. Notre guide pour lire un explorateur de blocs montre où ces champs apparaissent sur Etherscan.

Qui fait tourner la machine : cinq clients d’exécution et un lien avec le consensus

Geth, Nethermind, Besu, Erigon et Reth, comptés de différentes façons

En tant que spécification, l’EVM ne fait rien toute seule. Elle s’exécute dans des clients d’exécution, les programmes qui reçoivent les transactions, les exécutent et conservent l’état. Ethereum.org liste Geth (Go), Nethermind (C# .NET), Besu (Java), Erigon (Go) et Reth (Rust), plus le plus récent ethrex (Rust). Notre guide sur ce qu’est un nœud explique comment ils s’insèrent sur une machine.

Savoir combien de nœuds font tourner chaque client est plus difficile qu’il n’y paraît. Les sources mesurent des choses différentes et ne concordent pas.

Source (pages lues le 10 nov. 2026)Ce qu’elle mesureGethNethermindBesuRethErigon
Ethernodes, affiché sur clientdiversity.org, mis à jour chaque jourNœuds visibles par un robot d’exploration avec des places libres pour des pairs50,13 %25,46 %9,45 %7,67 %6,53 %
supermajority.info, affiché sur clientdiversity.org, mis à jour à la mainDéclarations des opérateurs, 59,4 % du réseau couvert, dont une bonne part date de plus d’un an43 %43 %8 %3 %3 %
Instantané de supermajority.info du 26 oct. 2025, affiché sur ethereum.orgDéclarations des opérateurs41 %38 %16 %2 %3 %

Clientdiversity.org avertit lui-même que les chiffres d’Ethernodes reflètent les clients qui affichent des places libres pour des pairs, qu’on comprend « mal » (« not well understood ») le lien avec ce que les opérateurs font réellement tourner, et il tient les données d’enquête d’execution-diversity.info pour la source la plus fiable. La page de diversité des clients d’ethereum.org affiche l’instantané d’octobre 2025 dans la dernière ligne, tandis qu’une autre phrase de la même page donne encore à Geth « environ 85 % » des nœuds, un chiffre des années précédentes. Le résumé honnête : Geth a perdu son ancienne supermajorité et, selon la méthode, il fait tourner entre quatre et cinq nœuds sur dix.

L’API Engine : comment l’EVM reçoit ses ordres depuis The Merge

Depuis The Merge du 15 septembre 2022 (bloc 15 537 394), un client d’exécution ne décide plus quel bloc vient ensuite. Un client de consensus distinct, comme Lighthouse, Prysm, Teku, Nimbus, Lodestar ou Grandine, fait tourner la preuve d’enjeu et dit au client d’exécution quoi faire par l’API Engine : engine_newPayload lui remet un bloc à exécuter et à vérifier, et engine_forkchoiceUpdated lui indique quelle tête de chaîne suivre ou lui demande de construire un bloc. La spécification de l’API Engine (en anglais) dit que la couche de consensus « pilote » (drives) la couche d’exécution, sur un port dédié (8551 par défaut) protégé par une authentification JWT. Le fonctionnement du côté consensus fait l’objet de notre leçon ultérieure sur The Merge et la preuve d’enjeu.

Pourquoi le bug d’un client compte : les seuils d’un tiers et de deux tiers

Sur la couche de consensus, les seuils sont arithmétiques. D’après ethereum.org, un bug dans un client de consensus utilisé par plus d’un tiers des nœuds pourrait empêcher la chaîne de se finaliser, et un bug critique dans un client qui a une majorité des deux tiers pourrait finaliser une chaîne invalide, laissant ses validateurs bloqués et exposés au slashing. Clientdiversity.org fixe le même objectif pour tous les clients, une part inférieure à 33 %, et dit que les risques « s’appliquent aussi bien aux clients de consensus qu’aux clients d’exécution » (notre traduction).

L’épisode Reth de novembre 2026 montre l’autre face de la pièce. Reth tourne sur 2 % à 8 % des nœuds Ethereum selon le décompte du tableau, loin du seuil du tiers. En revanche, Base, BSC-Reth de BNB Chain et Tempo font tourner des nœuds fondés sur Reth, et pour eux le même bug était une raison de corriger en quelques jours. Le risque d’un bug de client dépend du nombre de nœuds d’un réseau donné qui font tourner ce client.

Une baie de serveurs avec un bug, un bouclier et un panneau d'alerte à côté
Un bug dans un client d'exécution peut donner à ses nœuds une racine d'état erronée.

La même machine sur d’autres chaînes

Compatible EVM, équivalent EVM et identifiant de chaîne

Comme l’EVM est une spécification publiée avec plusieurs implémentations ouvertes, des dizaines d’autres réseaux la font tourner. La liste des chaînes de DefiLlama, lue le 10 novembre 2026, en suit 422, dont 238 ont un identifiant de chaîne (chain ID) renseigné, le numéro que les portefeuilles EVM utilisent pour distinguer les réseaux. Les plus importantes par valeur totale verrouillée, selon DefiLlama à la même date, figurent ci-dessous.

ChaîneValeur verrouillée selon DefiLlama (10 nov. 2026)Chain IDRemarque
Ethereum41,74 milliards de dollars1L’EVM de référence
Base5,72 milliards de dollars8453Couche 2 bâtie sur l’OP Stack
BNB Smart Chain5,10 milliards de dollars56Son propre ensemble de validateurs
Arbitrum1,40 milliard de dollars42161Rollup optimiste
Monad0,94 milliard de dollars143Couche 1 distincte
Polygon0,62 milliard de dollars137Chaîne Polygon PoS
Avalanche0,61 milliard de dollars43114C-Chain

L’identifiant de chaîne est signé dans chaque transaction moderne (EIP-155, elle aussi de Spurious Dragon), si bien qu’une transaction valide sur un réseau ne peut pas être rejouée sur un autre. Les adresses, en revanche, ont le même format de 20 octets sur toutes les chaînes EVM. La même clé privée contrôle la même adresse sur Ethereum, Base ou BNB Chain, ce qui est pratique et explique aussi pourquoi des fonds envoyés sur le mauvais réseau peuvent arriver à une adresse que leur propriétaire n’avait jamais voulu utiliser là.

« Compatible EVM » signifie qu’une chaîne exécute le même bytecode avec la même sémantique de base. Cela ne promet ni des prix de gas identiques, ni les mêmes précompilés, ni les mêmes temps de bloc, ni les derniers opcodes. Les rollups qui se règlent sur Ethereum, comparés dans notre guide sur la couche 1 et la couche 2, tendent à suivre de près le réseau principal ; notre leçon ultérieure sur les couches 2 ira plus loin.

Les types 1 à 4 de zkEVM selon Vitalik Buterin

Les rollups à divulgation nulle de connaissance font face à une version plus difficile de la question, car ils doivent prouver l’exécution de l’EVM, et certaines de ses fonctions sont coûteuses à prouver. Dans un article du 4 août 2022, Vitalik Buterin a classé les zkEVM par types (en anglais). « Les ZK-EVM de type 1 s’efforcent d’être entièrement et sans compromis équivalents à Ethereum », a-t-il écrit (notre traduction) ; chaque type suivant sacrifie un peu d’équivalence pour des preuves plus rapides.

TypeCe qu’il conserve et ce qu’il change
1Ethereum à l’identique, y compris les hashs et les arbres d’état : le plus lent à prouver
2Équivalent à l’EVM, mais modifie des structures externes comme l’arbre d’état pour accélérer les preuves
2.5Comme le type 2, avec des prix de gas plus élevés pour les opérations difficiles à prouver
3Presque équivalent : abandonne ou modifie quelques fonctions, comme certains précompilés
4Compile le code source Solidity ou Vyper vers un langage adapté aux preuves, sans passer par le bytecode EVM

Cette classification date de 2022, et des projets ont changé de type depuis. Il revient à la documentation de chaque projet de dire dans quel type se range aujourd’hui son réseau.

Comment l’EVM continue de changer

Fork après fork : les mises à niveau qui ont changé la machine

La machine d’Ethereum n’a jamais été figée. Le tableau liste les mises à niveau qui l’ont le plus modifiée, avec les dates et les blocs de la page d’historique d’ethereum.org et le contenu tiré des EIP.

Mise à niveauDate (UTC) et blocCe qui a changé dans l’EVM
Spurious Dragon22 nov. 2016, bloc 2 675 000Limite de code de 24 576 octets (EIP-170), identifiant de chaîne dans les signatures (EIP-155)
Byzantium16 oct. 2017, bloc 4 370 000Précompilés MODEXP et alt_bn128
Constantinople28 févr. 2019, bloc 7 280 000CREATE2 (EIP-1014)
Istanbul8 déc. 2019, bloc 9 069 000Précompilé BLAKE2
Berlin15 avr. 2021, bloc 12 244 000Prix d’accès à froid et à chaud (EIP-2929), listes d’accès (EIP-2930)
London5 août 2021, bloc 12 965 000Frais de l’EIP-1559, remboursements plafonnés (EIP-3529)
Shanghai (Shapella)12 avr. 2023, bloc 17 034 870PUSH0 (EIP-3855), limite du code d’initialisation (EIP-3860)
Cancun (Dencun)13 mars 2024, bloc 19 426 587Stockage transitoire, MCOPY, SELFDESTRUCT restreint, blobs et précompilé KZG
Prague (Pectra)7 mai 2025, bloc 22 431 084Délégation de code des EOA (EIP-7702), précompilés BLS12-381
Osaka (Fusaka)3 déc. 2025, bloc 23 935 694Opcode CLZ, P256VERIFY, plafond de gas par transaction, limite de gas de bloc par défaut de 60 M

Glamsterdam : une révision des prix qui pourrait casser les contrats au gas codé en dur

La prochaine mise à niveau, Glamsterdam, a une liste planifiée dans son EIP méta 7773 (en anglais). Outre ses fonctions phares, la séparation proposeur-constructeur intégrée au protocole (présentée dans notre guide sur la protection contre le MEV et la PBS) et les listes d’accès au niveau du bloc, elle touche directement l’EVM : un opcode SLOTNUM (EIP-7843), les instructions de pile plus profondes de l’EIP-8024, des contrats plus gros (EIP-7954), un journal pour chaque transfert d’ETH (EIP-7708) et un nouveau barème de gas.

Le nouveau barème est la partie sensible. L’EIP-8037 fixe le prix de la création d’état à l’octet : 1 530 gas par nouvel octet d’état. Un nouveau compte compte pour 120 octets, soit 183 600 gas contre 25 000 avec les règles actuelles ; un nouvel emplacement de stockage compte pour 64 octets, soit 97 920 gas contre 20 000. L’EIP-8038 relève le coût de lecture et d’écriture de l’état existant. Les deux EIP étaient au statut Last Call le 10 novembre 2026. L’article du 24 août 2026 de la Fondation Ethereum (en anglais) dit que le nouveau barème découle d’un objectif d’environ trois fois plus de débit de base, et que le rejeu de transactions historiques du réseau principal sous ce barème montre qu’« un petit ensemble de smart contracts » repose sur des hypothèses qu’il déplace. « La plupart des problèmes signalés se règlent par une hausse de la limite de gas », ajoute l’article (notre traduction). Les contrats qui peuvent casser même avec plus de gas sont ceux qui s’appuient sur des allocations fixes comme les 2 300 gas de transfer et send en Solidity, codent des valeurs de gas en dur dans leurs appels, se branchent sur le gas restant ou dépendent de transactions présignées à limite de gas fixe.

Tout le monde n’est pas rassuré. Le 8 novembre 2026, deux développeurs ont déposé des brouillons concurrents pour protéger les anciens contrats, comme le détaille notre article sur les propositions rivales pour Glamsterdam : la pull request 12638 de Leo Glisic versionnerait les opcodes pour que les contrats existants gardent les anciens prix, et la pull request 12637 de Giulio Rebuffo séparerait le gas qu’un contrat voit de celui qui lui est facturé. Les deux étaient encore ouvertes sur GitHub le 10 novembre 2026, sans code de client. Les développeurs du noyau se réunissent le 12 novembre (ACDC #191) et le 19 novembre (ACDE #249), et Glamsterdam n’a pas de date sur le réseau principal.

EOF : ni dans Fusaka ni dans Glamsterdam

L’EVM Object Format (EOF) était un plan préparé de longue date pour envelopper le bytecode dans un conteneur structuré qui sépare le code des données et qui est validé au déploiement. Il ne figure ni dans la liste finale de Fusaka (EIP-7607) ni dans la liste planifiée de Glamsterdam (EIP-7773), et son EIP méta, l’EIP-7692, est marquée Stagnant au 10 novembre 2026.

RISC-V : une proposition de 2025, pas un plan

Le 20 avril 2025, Vitalik Buterin a publié sur le forum Ethereum Magicians une proposition à long terme (en anglais) visant à « remplacer l’EVM par RISC-V comme langage de machine virtuelle dans lequel les smart contracts sont écrits » (notre traduction). Les comptes, le stockage et les appels entre contrats resteraient tels quels ; des opcodes comme SLOAD, SSTORE et CALL deviendraient des appels système ; les anciens contrats EVM continueraient de fonctionner et d’interagir avec les nouveaux. Sa raison, c’est la preuve : il écrivait que l’exécution des blocs représentait environ la moitié du travail des prouveurs à divulgation nulle de connaissance de l’époque, si bien qu’une machine virtuelle plus proche de ce que les prouveurs utilisent déjà aiderait. Des réponses dans le fil soulignent que l’EVM travaille nativement avec des nombres de 256 bits, qu’une machine RISC-V devrait découper en morceaux plus petits, au prix de la vitesse. Au 10 novembre 2026, l’idée ne figure dans la liste d’aucune mise à niveau.

Ce que la machine change pour les utilisateurs, les développeurs et les tribunaux

Pour un développeur, le modèle de coûts de l’EVM est le cahier des charges : chaque emplacement de stockage évité économise des milliers de gas, et chaque valeur de gas codée en dur est un pari sur un barème que Glamsterdam s’apprête à changer. Pour un utilisateur, deux habitudes découlent de cette leçon. Une transaction échouée coûte quand même du gas, donc l’alerte d’un portefeuille annonçant qu’une transaction va échouer mérite l’attention. Et un rapide eth_getCode sur votre propre adresse, ou l’onglet de code d’un explorateur, vous dit si elle porte une délégation EIP-7702 que vous n’avez pas voulue.

Un code sans propriétaire est aussi arrivé devant les tribunaux. Le 26 novembre 2024, dans l’affaire Van Loon v. Department of the Treasury, la cour d’appel fédérale du cinquième circuit des États-Unis a jugé que « les smart contracts immuables de Tornado Cash (les lignes de code logiciel qui protègent la vie privée) ne sont pas la « propriété » d’un ressortissant ou d’une entité étrangers » (notre traduction), de sorte que l’OFAC ne pouvait pas les bloquer en vertu de la loi de sanctions IEEPA, comme l’énonce l’opinion (en anglais). L’opinion explique que les développeurs avaient renoncé à leur contrôle sur les contrats des pools lors d’une « trusted setup ceremony » en 2020, après quoi ces contrats sont devenus irréversiblement immuables. Le 21 mars 2025, le Trésor a retiré Tornado Cash de sa liste de sanctions, en invoquant « les questions juridiques et politiques inédites » que soulève une telle sanction (notre traduction). La décision porte sur des contrats immuables ; un proxy dont la logique peut être remplacée, comme celui qui se trouve derrière USDC, n’était pas soumis à la cour.

Les prochaines dates à suivre sont les réunions des développeurs du noyau du 12 novembre (consensus) et du 19 novembre 2026 (exécution), toutes deux avec Glamsterdam à l’ordre du jour. Ce qu’ils décideront sur le barème de gas fera partie de la fonction qui transforme une racine d’état en la suivante.

Sources

  1. ethereum.org : documentation de la machine virtuelle d'Ethereum (EVM) (en anglais) ethereum.org
  2. Livre blanc d'Ethereum (texte de 2014 sur ethereum.org) (en anglais) ethereum.org
  3. Code source de Go Ethereum : paramètres du protocole (coûts en gas) et contrats précompilés (en anglais) github.com
  4. EIP-2929 : hausse des coûts en gas des opcodes d'accès à l'état (en anglais) eips.ethereum.org
  5. EIP-1153 : opcodes de stockage transitoire (en anglais) eips.ethereum.org
  6. EIP-7773 : EIP méta de la mise à niveau Glamsterdam (en anglais) eips.ethereum.org
  7. EIP-8037 : hausse du coût en gas de la création d'état (en anglais) eips.ethereum.org
  8. EIP-7864 : état d'Ethereum dans un arbre binaire unifié (en anglais) eips.ethereum.org
  9. Blog de la Fondation Ethereum : effet de la révision des prix de Glamsterdam pour les développeurs de smart contracts (24 août 2026) (en anglais) blog.ethereum.org
  10. clientdiversity.org : répartition des clients d'exécution et de consensus (en anglais) clientdiversity.org
  11. ethereum.org : diversité des clients (en anglais) ethereum.org
  12. Spécification de l'API Engine (ethereum/execution-apis) (en anglais) github.com
  13. EIP-7607 : EIP méta de la mise à niveau Fusaka (en anglais) eips.ethereum.org
  14. EIP-7692 : EIP méta de l'EVM Object Format (EOFv1) (en anglais) eips.ethereum.org
  15. EIP-7702 : définir le code des EOA (en anglais) eips.ethereum.org
  16. Vitalik Buterin, Ethereum Magicians : remplacer l'EVM par RISC-V (20 avril 2025) (en anglais) ethereum-magicians.org
  17. Vitalik Buterin : les différents types de ZK-EVM (4 août 2022) (en anglais) vitalik.eth.limo
  18. Van Loon v. Department of the Treasury, opinion du cinquième circuit (26 novembre 2024) (en anglais) ca5.uscourts.gov
  19. Trésor américain : retrait de Tornado Cash de la liste de sanctions (21 mars 2025) (en anglais) home.treasury.gov
  20. ethereum.org : l'histoire d'Ethereum (dates et blocs des mises à niveau) (en anglais) ethereum.org
  21. DefiLlama : chaînes (en anglais) defillama.com
Rédaction de Coindaro

Qui a écrit cet article

Équipe de rédaction

Guides, avis et glossaire vérifiés auprès des sources primaires

  • Formation crypto
  • Avis de plateformes
  • Portefeuilles
  • Glossaire

La rédaction de Coindaro recherche et écrit chaque article, avis et guide publié sur Coindaro. Chaque fait est vérifié auprès de sources primaires (documents officiels, régulateurs, documentation des projets) et chaque page cite ses sources. Nous couvrons les marchés crypto, la technologie et la régulation pour les lecteurs d’Europe et d’Amérique du Nord, en toute indépendance et sans contenu payé.

Continuer à apprendre