Comment fonctionne Ethereum ?
Créé par Vitalik Buterin en 2015, Ethereum est à la fois un protocole, un réseau et une blockchain. Au-delà des transactions financières basiques, Ethereum permet de programmer et d’automatiser des ensembles de transactions complexes.
On appelle ces programmes des smart contracts. Ils héritent ainsi des propriétés de la blockchain : ils sont infalsifiables et non-répudiables.
L’architecture d’Ethereum est inspirée par celle de Bitcoin, mais elle est plus complexe.
La blockchain d’Ethereum
Comme sur Bitcoin, la blockchain d’Ethereum sert donc à stocker l’historique des transactions ayant lieu sur le réseau. Mais elle permet aussi de stocker du code informatique, celui des smart contracts.
Bitcoin fonctionne grâce à un modèle dit UTXO pour « sorties non-dépensées ». Ainsi, le solde de chaque adresse correspond à l’ensemble des sorties provenant d’autres adresses, qui n’ont pas encore été dépensées.
Ethereum, quant à lui, va plus loin, avec son système de comptes, à l’image d’une banque. Les nœuds du réseau stockent l’état des comptes. Il s’agit de leur solde, mais aussi du code des smart contracts et l’endroit où ce dernier est stocké.
Il existe deux types de comptes : les comptes externes, contrôlés par des paires de clefs publiques/privées (comme une adresse Bitcoin classique), et les comptes des contrats, contrôlés par du code.
Quatre champs définissent ces comptes :
- Le nonce : ce compteur indique le nombre de transactions émises par le compte. Dans le cas d’un compte de contrat, il s’agit du nombre de smart contracts créés via le compte.
- Le solde : il s’agit de la quantité d’ether que possède le compte.
- Le codeHash : il s’agit du hash du code présent sur le compte.
- Le storageRoot : sans entrer dans les détails, cela permet d’encoder les données présentes sur le compte.
Décentraliser les applications informatiques
Vitalik Buterin voulait aller plus loin que Bitcoin, en proposant une blockchain qui possède son propre langage de programmation. Cela donne plus de possibilités aux utilisateurs. Il est notamment possible de créer des applications décentralisées. Ces applications ne sont pas hébergées sur un serveur, mais sur tous les nœuds du réseau. Cette architecture offre plusieurs avantages :
- En cas de mise hors-ligne d’une partie du réseau, les nœuds restants continuent d’exécuter ces programmes ;
- Ainsi, les applications décentralisées sont résistantes à la censure, et personne ne peut empêcher leur exécution.
Pour ces raisons, Ethereum est souvent décrit comme un ordinateur universel. N’importe qui peut coder ses applications, sans crainte de les voir cesser de fonctionner.
Qu’est-ce qu’un smart contract ?
Les smart contracts sont dont des programmes informatiques, décentralisés et autonomes, contenant un ensemble de règles et d’instructions.
Ces instructions sont exécutées de façon conditionnelle. Les contrats sont écrits en utilisant un langage de programmation spécifique, appelé Solidity. L’appellation « smart contract » nous vient de Nick Szabo, cryptographe de légende.
Contrairement au langage de script de Bitcoin, Solidity est dit « Turing-complet« . Cette expression fait référence au mathématicien et cryptologue Alan Turing. Ce précurseur de l’informatique créa un modèle définissant les concepts d’algorithme, de programmation et de décidabilité : la fameuse machine de Turing. Cet ordinateur avant l’heure permit de déchiffrer les messages des Allemands durant la seconde guerre mondiale.
Aujourd’hui, il s’agit d’un concept et non plus d’un objet physique.
Un langage est dit “Turing-complet” s’il permet de simuler une machine de Turing, avec la même expressivité et la même calculabilité. Les fonctions récursives ou “calculables” permettent de créer des boucles conditionnelles (if, then, else). Elles sont aussi déterministes : les mêmes fonctions appliquées aux mêmes arguments donnent toujours le même résultat.
Les smart contracts écrits en Solidity respectent ces caractéristiques. Cependant, il y a une limite à leur exécution : les instructions ont un coût financier, ce qui permet d’éviter les boucles infinies en cas d’erreur de programmation.
Un contrat est donc un ensemble de lignes de code, et un ensemble de données (l’état du contrat sur la blockchain). Il est stocké sur un compte Ethereum.
Une fois ces contrats déployés, les nœuds du réseau Ethereum vont les stocker sur la blockchain et les exécuter. C’est dans l’EVM (Ethereum Virtual Machine) que tout se passe !
La Machine Virtuelle d’Ethereum ou EVM
L’EVM est un environnement d’exécution isolé du réseau. Il permet d’interpréter le code Solidity une fois compilé, et donc de mettre à jour l’état des contrats sur la blockchain. Les mineurs qui exécutent ces instructions sont récompensés financièrement pour cela. Chaque instruction d’un contrat Solidity a donc un coût d’exécution.
L’EVM dispose de trois zones pour traiter les données :
- La zone de stockage : associée à un compte Ethereum, elle est persistante et intervient entre l’appel d’une fonction et une transaction.
- La zone de mémoire : associée à chaque contrat, sa taille varie proportionnellement à la quantité de données gérées.
- La pile : elle comporte les instructions du contrat, qui sont exécutées de façon descendante.
Le panel d’instructions de l’EVM est limité, pour des raisons de compatibilité et de sécurité. Il comprend bien entendu toutes les opérations arithmétiques et logiques classiques, des sauts conditionnels, etc. Il est aussi possible d’accéder à des données de bloc, comme son numéro de version ou son horodatage.
L’algorithme de consensus d’Ethereum
Comme sur Bitcoin, Ethereum utilise un algorithme de consensus qui permet aux nœuds du réseau de s’accorder sur l’état de la blockchain. Pour l’instant, ce mécanisme de consensus est le même que sur Bitcoin, à savoir la preuve de travail (proof of work).
Les mineurs sont en concurrence pour valider les transactions du réseau et exécuter les instructions des smart contracts. Ils y consacrent ainsi une grande puissance de calcul et sont récompensés par le protocole en ethers.
Cependant, ce mécanisme pose des problèmes. Il est coûteux en énergie, et peu scalable.
Il est ainsi prévu qu’Ethereum utilise la preuve d’enjeu (proof of stake), afin de désengorger le réseau et de le rendre plus performant. Ce nouveau mécanisme de consensus s’appelle Casper. Nous sommes actuellement dans une phase de transition : durant quelques mois, Ethereum utilisera un système hybride. Si tout se passe bien, il y aura alors une transition complète de la preuve de travail vers la preuve d’enjeu.
Ainsi s’achève cette description du fonctionnement d’Ethereum. Pour plus de détails, rien de mieux que de se rendre sur Ethereum France qui propose de nombreuses ressources francophones sur le sujet. Et si l’actualité de la deuxième cryptomonnaie la plus capitalisée de l’écosystème vous intéresse, rendez-vous dans notre section dédiée !