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
Table des matières
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.
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.
Ainsi, Ethereum peut être assimilé à une machine d’état (state) 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.
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.
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 :
Le champ « body » contient lui-même plusieurs champs :
Les champs « attestations » et « execution_payload » contiennent à leur tour plusieurs champs :
Enfin, le champ « withdraw » contient les données suivantes :
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.
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.
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 !