BlockPulseNews
Définition

EIP-155 : définition

Aussi appelé : chainId

L'EIP-155 est une amélioration d'Ethereum qui intègre l'identifiant de la chaîne (chainId) dans les données signées d'une transaction, afin qu'une transaction valide sur un réseau ne puisse pas être rejouée sur un autre réseau compatible.

Thème : Ethereum et smart contracts

EIP-155 : comment ça marche ?

Le problème est apparu après le hard fork de 2016 qui a séparé Ethereum et Ethereum Classic. Les deux chaînes partageaient le même historique, les mêmes adresses et le même format de transaction. Une transaction signée pour l'une pouvait donc être copiée et diffusée sur l'autre, où elle restait parfaitement valide : c'est une attaque par rejeu, ou replay. Un utilisateur qui envoyait des ETH pouvait ainsi, sans le vouloir, envoyer aussi le même montant en ETC au même destinataire.

L'EIP-155, activée lors de la mise à jour Spurious Dragon fin 2016, a introduit le chainId dans la signature. Chaque réseau possède un identifiant numérique : 1 pour le mainnet d'Ethereum, 61 pour Ethereum Classic, et un identifiant propre pour chaque testnet, rollup ou blockchain compatible EVM. Comme le chainId fait partie du message signé, une signature produite pour un réseau devient invalide sur un autre. Les types de transactions apparus ensuite, comme ceux de l'EIP-1559, contiennent directement un champ chainId. Les portefeuilles doivent donc connaître le chainId du réseau auquel ils sont connectés.

Un exemple concret

Imaginons qu'Olivier signe une transaction pour envoyer 1 ETH sur le mainnet Ethereum, de chainId 1. Un observateur malveillant copie la transaction et la diffuse sur une autre chaîne compatible EVM où Olivier possède aussi des fonds. Les nœuds de cette chaîne attendent un chainId différent : la vérification de la signature échoue et la transaction est rejetée.

Les risques à connaître

L'EIP-155 ne protège que si le chainId est correctement utilisé. Des transactions anciennes au format sans chainId restent acceptées par certains réseaux. Deux chaînes qui utiliseraient le même chainId seraient exposées au rejeu. Les messages signés hors transaction, comme les permits, doivent intégrer leur propre protection, par exemple via le domaine de l'EIP-712.

À ne pas confondre avec

  • Signature replay : Le rejeu de signature est la famille d'attaques que l'EIP-155 contre pour les transactions ; d'autres formes de rejeu, sur des messages signés, nécessitent d'autres protections.
  • EIP-712 : L'EIP-712 structure les messages signés hors transaction et inclut aussi un chainId dans son domaine, mais elle ne concerne pas les transactions elles-mêmes.
  • CAIP-2 : CAIP-2 est un format d'identification des chaînes valable au-delà d'Ethereum ; le chainId de l'EIP-155 est le numéro propre aux réseaux EVM, inclus dans la signature.

Questions fréquentes sur EIP-155

Qu'est-ce que le chainId d'Ethereum ?

C'est l'identifiant numérique d'un réseau compatible EVM. Celui du mainnet Ethereum est 1. Il est inclus dans chaque transaction signée pour indiquer le réseau visé.

Pourquoi mon portefeuille me demande-t-il de changer de réseau ?

Parce que chaque transaction est signée pour un chainId précis. Si l'application attend un autre réseau que celui sélectionné, le portefeuille doit basculer pour produire une signature valide sur le bon réseau.

Dans le même thème : Ethereum et smart contracts

Tous les termes du thème Ethereum et smart contracts →

À lire

L'actualité : Ethereum et smart contracts

Les derniers articles de BlockPulseNews sur ce sujet.

Approfondir avec l'Académie : Ethereum en Profondeur Un module gratuit, en leçons courtes et quiz, pour maîtriser ce thème pas à pas.
Découvrir le module

Les autres termes en E

← Tout le lexique crypto de A à Z