Le World State et les comptes, les disques durs d’Ethereum

Chapitre II Article d

Après avoir retracé l'histoire du réseau, plongeons-nous maintenant au cœur de celui-ci afin d'observer ses rouages et de comprendre son fonctionnement. Dans cet article, nous commencerons par vous présenter des éléments incontournables, propres à Ethereum, qui n'existent pas sur Bitcoin : le World State et les comptes. La connaissance de ces derniers est nécessaire pour vous permettre d'aborder correctement la suite de ce chapitre, dans lequel nous nous pencherons sur les mécanismes qui permettent à la blockchain de fonctionner.

Temps de lecture estimé : 9 minutes

Certaines des illustrations présentent dans cet article ont été inspirées de celles de ce diaporama.

Le World State

Avant d'aller plus loin, vous pouvez, si ce n'est pas déjà fait, lire l'article dans lequel nous présentons les briques technologiques (protocole informatique, langage de programmation, blockchain, réseau de pair à pair, etc.) autour desquelles s'articule Bitcoin. Toutes les notions qui y sont abordées vous seront aussi utiles pour comprendre comment fonctionne Ethereum.

La chaîne de blocs ou chaîne d'état

Tout comme Bitcoin, Ethereum est une blockchain, dans laquelle chaque bloc contient (entre autres) des transactions.

Illustration d'une blockchain
Illustration d'une blockchain

Ces transactions génèrent un changement de différentes données au sein du réseau, comme le solde des comptes, par exemple. Sur Ethereum, l'état global des comptes à un instant T se trouve dans une structure de données appelée « World State » ou « État du Monde » en français.

Le World State recense toutes les adresses existantes et leur associe leur solde, ainsi que toutes les applications déployées sur le réseau et leur code. Il est mis à jour à chaque fois que des transactions ont lieu, c'est-à-dire à chaque fois qu'un bloc est ajouté à la chaîne. En d'autres termes, les transactions ont pour impact de modifier ce World State.

Si le réseau Ethereum peut être considéré est comme un ordinateur mondial décentralisé (voir l'article sur l'Ethereum Virtual Machine), alors le World State fait en quelque sorte figure de disque dur.

Illustration du World State
Illustration du World State

Ainsi, Ethereum peut être assimilé à une machine d’état (state) basée sur des transactions.

Illustration d'une machine d'état basée sur des transactions
Illustration d'une machine d'état basée sur des transactions

L'arbre de Merkle et sa racine

Le World State se présente sous la forme d’un gigantesque et unique arbre de données : l'arbre de Patricia Merkle.

Il s'agit d'une version optimisée des arbres de Merkle que nous vous avons présentés dans le chapitre sur Bitcoin. Elle est conçue pour le stockage et la récupération efficaces des données, avec des fonctions de mises à jour et de recherches améliorées.

Les données stockées dans cet arbre passent par une série de fonctions de hachage (Ethereum utilise l’algorithme de hachage Keccak-256) pour donner un hash final appelé racine de Merkle, qui représente l’ensemble du contenu de l'arbre. C'est la racine de Merkle qui est incluse dans les blocs (dans le champ state_root - voir ci-dessous) pour représenter le World State au moment de leur création.

Ceci présente entre autres l'avantage d'obtenir « l'image » d'un arbre qui fait plusieurs centaines de Gigabytes dans une simple suite de 64 caractères hexadécimaux, ce qui réduit les besoins de stockage.

La structure des blocs

À l'instar de Bitcoin, les blocs de la blockchain d'Ethereum contiennent un ensemble de données organisé de façon très structurée. Chaque champ contient un type de données spécifique, pouvant parfois être divisé en sous champs.

Pour une meilleure compréhension, vous pouvez vous imaginer un bloc comme une poupée russe, ou un meuble avec plusieurs tiroirs et sous tiroirs comme sur l'image ci-dessous.

Structure imagée d'un bloc sur Ethereum
Structure imagée d'un bloc sur Ethereum

Voici la même image représentée en deux dimensions avec le détail de ce qui se trouve à l'intérieur de chaque champ (ou « tiroir »). Vous pouvez zoomer pour plus de lisibilité ou vous reporter aux images qui suivent.

Structure d'un bloc sur Ethereum
Structure d'un bloc sur Ethereum

Ne vous découragez pas si vous ne comprenez pas encore tous les termes employés dans la description « champ ». Nous reviendrons sur ces derniers dans les articles suivants, notamment en ce qui concerne les validateurs et le processus de validation des blocs, le gas ou encore les smart contracts.

À son plus haut niveau, un bloc contient donc les 5 champs suivants :

Champs d'un bloc sur Ethereum
Champs d'un bloc sur Ethereum

Le champ « body » contient lui-même plusieurs champs :

Champ Body d'un bloc sur Ethereum
Champ « Body » d'un bloc sur Ethereum

Les champs « attestations » et « execution_payload » contiennent à leur tour plusieurs champs :

Champ « Attestations » d'un bloc sur Ethereum
Champ « Attestations » d'un bloc sur Ethereum
Champ « Execution Payload » d'un bloc sur Ethereum
Champ « Execution Payload » d'un bloc sur Ethereum

Enfin, le champ « withdraw » contient les données suivantes :

Champ « Withdraw » d'un bloc sur Ethereum
Champ « Withdraw » d'un bloc sur Ethereum

On peut aussi noter que « execution_payload » contient un entête qui rassemble les mêmes champs, sauf les deux derniers (transactions et retraits). À leur place, on trouve :

  • Le hash de la racine d’une structure contenant tous les hachages des transactions incluses dans le bloc ;
  • Le hash de la racine de l'arbre de Merkle contenant les informations sur les retraits effectués par les validateurs.

Les types de comptes

Il existe deux types de comptes différents sur Ethereum, qui offrent des propriétés différentes.

Les comptes détenus en externes

Les comptes détenus en externes ou « Externally Owned Accounts » en anglais (EOA) sont détenus et contrôlés par les utilisateurs. À l'instar de ceux présents sur Bitcoin, ils utilisent une paire de clés publiques et privées. Celui ou celle qui à la clé privée peut gérer l'activité du compte.

Les EOA peuvent :

  • Recevoir, conserver et envoyer des ethers ou d'autres jetons ;
  • Déployer et interagir avec des contrats intelligents (smart contracts).

Leur création est gratuite (elle ne requiert pas de gas). Ils sont définis par deux champs :

  • Le nonce : c'est un compteur qui indique le nombre de transactions émises par le compte ;
  • Le solde (balance) : il s’agit de la quantité d’ether que possède le compte.

Comme pour les comptes de contrats, il y a deux champs supplémentaires, mais ils sont vides pour les OEA.

Illustration d'un compte détenu en externe
Illustration d'un compte détenu en externe

Depuis le passage du fonctionnement la preuve de travail à la preuve d'enjeu, un second type de clés à vu le jour sur les EOA pour les validateurs. Sans entrer dans les détails, il permet à ces derniers de communiquer plus rapidement entre eux qu'avec les clés classiques.

Les comptes de contrats

Les comptes de contrat ou « Contract Accounts » en anglais (CA) servent, comme leur nom l'indique, à « accueillir » des contrats intelligents. Ils n’ont pas de clés privées et sont entièrement contrôlés par du code.

Les CA peuvent :

  • Recevoir, conserver et envoyer des ethers ou d'autres jetons ;
  • Déployer et interagir avec des contrats intelligents ;
  • Exécuter du code.

À chaque fois qu'un compte de contrat reçoit une information, cela lance l’exécution de son code. Ceci peut alors enclencher diverses actions, telles que lire et/ou écrire dans la mémoire de stockage interne, envoyer d'autres messages ou tokens, ou même créer de nouveaux contrats.

Contrairement aux EOA, la création d'un CA a un coût dû à l'utilisation de la capacité de stockage du réseau.

À l'instar des EOA, les CA sont définis par un nonce et le solde du compte. On y trouve aussi deux champs supplémentaires :

  • Le codeHash : il s’agit de la valeur de hachage du code de l'Ethereum Virtual Machine du compte. Il ne peut pas être modifié, contrairement aux autres champs.
  • Le storageRoot : c'est la valeur de hachage des données présentes sur le compte.
Illustration d'un compte de contrat
Illustration d'un compte de contrat

Vous l'avez compris, c'est la possibilité pour les développeurs de créer des contrats intelligents et des applications décentralisées hébergés sur des comptes de contrat qui différencie Ethereum de Bitcoin. Mais que sont les smart contracts exactement ? À quoi servent-ils ? Nous vous dévoilons tous les secrets de ces pièces maîtresses de l'écosystème dans le prochain article de l'Encyclopédie du Coin. Accrochez-vous !