Définition
EOA vs Compte-contrat : définition
Sur Ethereum, un EOA (Externally Owned Account) est un compte contrôlé par une clé privée, capable d'initier des transactions, tandis qu'un compte-contrat est contrôlé par son code et ne s'exécute que lorsqu'on l'appelle.
Thème : Ethereum et smart contracts
Ethereum distingue deux grands types de comptes, qui partagent le même format d'adresse et peuvent tous deux détenir de l'ETH et des jetons. L'EOA est le compte classique d'un utilisateur : une paire de clés le contrôle, et toute transaction doit être signée par la clé privée. C'est lui qui déclenche les actions sur le réseau et paie les frais. Il n'a pas de code propre, seulement un solde et un compteur de transactions (nonce).
Le compte-contrat, lui, n'a pas de clé privée. Il contient du code déployé sur la blockchain et un espace de stockage. Il ne peut pas agir spontanément : il réagit quand un EOA ou un autre contrat l'appelle, en suivant strictement les règles programmées. Un protocole DeFi, une collection NFT ou un portefeuille multisignature sont des comptes-contrats. La frontière s'estompe avec l'abstraction de compte : les portefeuilles intelligents sont des comptes-contrats qui jouent le rôle de compte utilisateur, avec récupération sociale ou frais sponsorisés. Des évolutions du protocole permettent également à un EOA de déléguer son comportement à du code.
Un exemple concret
Imaginons qu'Emma, depuis son portefeuille habituel, donc un EOA, dépose des jetons dans un coffre DeFi. Elle signe la transaction avec sa clé privée. Le coffre, qui est un compte-contrat, reçoit l'appel, vérifie le montant, enregistre le dépôt et lui attribue des parts, sans qu'aucun humain n'intervienne.
Les risques à connaître
Un EOA dépend entièrement d'une seule clé privée : sa perte ou son vol signifie la perte des fonds. Un compte-contrat dépend de la qualité de son code, et une faille peut être exploitée par n'importe qui. Envoyer des jetons à un contrat qui ne sait pas les gérer peut les bloquer définitivement.
Questions fréquentes sur EOA vs Compte-contrat
Comment savoir si une adresse est un EOA ou un contrat ?
Un explorateur de blocs indique si du code est associé à l'adresse : si c'est le cas, il s'agit d'un compte-contrat.
Un smart contract peut-il envoyer une transaction tout seul ?
Non, un contrat ne s'exécute que s'il est appelé. Une transaction est toujours initiée au départ par un compte doté d'une clé, éventuellement via un relais ou un bundler.