EVM & Smart Contracts : Quand la Blockchain Devient Intelligente

Article Banner

Article écrit en collaboration avec @nissou31.

Ethereum a récemment fait beaucoup parler de lui avec sa migration du Proof of Work au Proof of Stake pour son mécanisme de consensus. On a cependant tendance à oublier la révolution qu’a apporté Ethereum dans le domaine de la blockchain et des cryptomonnaies : les Smarts Contracts (en français : les contrats intelligents). Peut-être vous a-t-on expliqué que ces derniers permettaient d’exécuter du code dans la blockchain, mais vous a-t-on expliqué comment est-ce que tout cela fonctionne réellement ? En l’occurrence, où ce code est-il stocké ? Qui l’exécute ? Combien de fois est-il exécuté ? C’est notamment à ces questions que nous allons répondre au travers de cet article.

Fonctionnement des Smart Contracts

Tout d’abord, il faut savoir qu’un smart contract n’est autre qu’une adresse sur la blockchain Ethereum ayant un solde dédié et pouvant être la destination de transactions. À ceci près que cette dernière n’appartient pas à un utilisateur réel : c’est un Contract Account. À la différence des comptes appartenant à des utilisateurs réels (EOA: Externally Owned Accounts), les Contract Accounts possèdent en plus un stockage et un code source. Les autres utilisateurs du réseau peuvent interagir avec ce smart contract en lui envoyant des transactions qui exécuteront le code défini par ce dernier. Les interactions réalisées avec celui-ci sont irréversibles, et son code ne peut par défaut pas être supprimé non plus. Les smarts contracts sont déclenchés lorsqu’un ensemble de conditions sont rassemblées, généralement entre un acheteur et un vendeur rendant ainsi toute transaction traçable et transparente en plus d’être irréversible. Leur exécution n’est donc pas contrôlée par une autorité centrale, mais plutôt par le réseau entier qui exécute leur code sur tous les noeuds. Plusieurs langages de programmation peuvent être utilisés pour développer un smart contract, le plus connu d’entre eux étant Solidity. Lorsqu’il est prêt à être déployé, le code source du smart contract doit être compilé vers un jeu d’instructions bas niveau qui pourra être exécuté par la machine virtuelle Ethereum : l’EVM.

Qu’est-ce que l’EVM ?

L’Ethereum Virtual Machine (EVM) est la machine à états qui exécute les instructions définies dans le smart contract. C’est un système Turing-complet, ce qui signifie que les étapes d’exécution sont limitées à un nombre fini d’étapes de calcul. Cette machine virtuelle s'exécute dans chaque noeud du réseau.

Figure 1 : Architecture de l’EVM

Figure 1 : Architecture de l’EVM (ethereum.org)

Le bytecode du smart contract est composé d’une série d’octets, chacun correspondant à une instruction à exécuter. Les instructions peuvent accéder de différentes manières à du stockage si elles en ont besoin :

  • La Stack (pile), une structure LIFO (Last-In-First-Out) de taille limitée (1024 éléments de 32 octets chacun) ;
  • La Memory, un espace de stockage temporaire. C’est un tableau d’octets dont la taille est ajustable ;
  • Le Storage, un espace de stockage clé/valeur persistent de taille importante (2^256 slots de 32 octets chacun).

Les instructions sont également appelées Opcodes, et sont aujourd’hui au nombre de 140.

Figure 2 : Listes des Opcodes (techfi.tech)

Figure 2 : Listes des Opcodes (techfi.tech)

Ces instructions peuvent d'ailleurs être divisées en différentes catégories :

CatégorieExemples
Manipulation de la pilePUSH, POP, DUP
Arithmétique, comparaisonADD, SUB, AND, OR, GT
EnvironnementCALLER, CALLVALUE
Manipulation de mémoireMLOAD, MSTORE
Manipulation du stockageSLOAD, SSTORE
ArrêtSTOP, RETURN, INVALID

Pourquoi une machine virtuelle ?

Une question pourrait nous venir à l’esprit en parlant de l’EVM : mais pourquoi avoir besoin d’une machine virtuelle ? Les calculs ne peuvent-ils pas être effectués directement sur les noeuds eux-mêmes ? Si les calculs étaient effectivement lancés par les noeuds sans passer par une machine virtuelle, ces derniers ne pourraient pas arriver à un même résultat en un temps identique de part leur différence de puissance. Cela aboutirait à une désynchronisation totale, et des centaines de versions de la même blockchain existeraient même temps. L’intérêt de la machine virtuelle est donc d’obtenir le même environnement et les mêmes performances pour tout le monde, indépendamment de la machine physique du noeud.

Fonctionnement de l’EVM

L’EVM a pour but de mettre à jour la World State. La World State correspond à l’état à un instant t de la blockchain (adresses publiques associées à leur balance, stockage, code source des smart contracts…). Elle se présente sous forme d’un arbre Merkle Patricia Trie qui, après chiffrement, devient une racine de Merkle. Pour la mettre à jour, l’EVM dispose d’une STF (State Transition Function, ou fonction de transition d’états) qui se traduit par la description mathématique formelle suivante :

Y(S, T) = S'

Avec S un ancien état valide, T un ensemble de nouvelles transactions, Y la fonction de transition et S’ le nouvel état valide.

Pour interagir avec la blockchain Ethereum, deux types d’interactions sont possibles : les calls et les transactions. Alors que les calls peuvent uniquement lire l’état de la blockchain, les transactions peuvent le modifier. Ces deux types d’interactions utilisent du gas, qui sont des frais permettant d’éviter le spam inutile sur le réseau.

Lorsqu’un nouveau bloc est miné, les transactions associées doivent être traitées. En premier lieu, on traite les transactions simples entre comptes externes (ceux appartenant à des vrais utilisateurs, les EOAs), puis on traite les transactions incluant un contrat. Pour ces dernières, le code du contrat est exécuté de manière isolée (sans accès à aucun fichier ou réseau) par tous les noeuds du réseau car l’état de la blockchain se verra modifié.

Bénéfices

Là où les smart contracts vont jouer un rôle essentiel, c’est dans les domaines les plus importants de notre société actuelle : la santé publique, la finance, le système de vote du gouvernement, la supply chain, etc. Tout ce beau monde requiert une précision et une sécurité importantes au niveau des EDI, et offertes par l'utilisation des smart contracts :

  • Autonomie et économie. Plus besoin de brokers qui confirment les agréments, et donc plus besoin d’intermédiaires qui chargent des frais de transaction ;
  • Backup. Dans le cas où une des parties se retrouve dans une situation de perte de données importantes, notamment des contrats et données clients ;
  • Sécurité. Notamment liée à la cryptographie des smart contracts ;
  • Vitesse. Où chaque smart contract est automatisé et ainsi réduit le temps des processus business ;
  • Précision. Pour éviter les erreurs dûes au remplissage manuel classique.

Limites

Contrairement aux applications que l’on a l’habitude d’utiliser au quotidien, les smarts contracts ne peuvent pas communiquer avec le monde extérieur au travers de requêtes HTTP. Cette frontière a été définie volontairement, et permet de ne pas se fier à des informations externes qui pourraient compromettre le consensus, celui-ci étant fondamental pour assurer la sécurité et la décentralisation. En effet, le code des smarts contracts doit absolument être déterministe : tous les noeuds traitant les mêmes transactions doivent à tout prix arriver au même résultat final, le cas échéant cassant le consensus.

Mais pas de panique : des solutions existent pour palier à cette restriction. Il s’agit des oracles, qui ne sont autres que des flux de données, apportant aux smart contracts des informations en dehors de la blockchain (off-chain) vers celle-ci (on-chain) afin qu’ils puissent les utiliser, et ce tout en maintenant le consensus.

Une autre limitation des smarts contracts concerne leur taille, qui ne peut pas dépasser 24Ko. Dans le cas où cette limite est franchie, le contrat tombera à cours de gas.

Là encore, des contre-mesures existent, l’une d’entre elles reposant sur la proposition d’amélioration EIP-2535: Diamonds, Multi-Facet Proxy.

Enfin, la taille du réseau Ethereum ainsi que son nombre d’utilisateurs ont abouti aujourd’hui à des frais élevés et à un ralentissement de la vitesse d’exécution, devenus des freins à son adoption de masse. Des blockchains se sont donc construites dans le but de réduire ces frais et d’améliorer les performances du réseau, tout en restant compatible avec l’EVM : BNB Chain (BNB), Polygon (MATIC), Avalanche (AVAX)

Sources

Sort:  

Merci pour cet article, je pense qu'il devrait plaire à @lemouth pour son côté sciences.

!PGM
!PIZZA
!LOL


ItharaGaian
Principauté du Bastion (@hive-143869 Community)
Curation Manuelle

BlasonPrincipautéBastionTransparentSmall.png

Sent 0.1 PGM - 0.1 LVL- 1 STARBITS - 0.05 DEC - 15 SBT - 0.1 THG - tokens to @itharagaian

remaining commands 0

BUY AND STAKE THE PGM TO SEND A LOT OF TOKENS!

The tokens that the command sends are: 0.1 PGM-0.1 LVL-0.1 THGAMING-0.05 DEC-15 SBT-1 STARBITS-[0.00000001 BTC (SWAP.BTC) only if you have 2500 PGM in stake or more ]

5000 PGM IN STAKE = 2x rewards!

image.png
Discord image.png

Support the curation account @ pgm-curator with a delegation 10 HP - 50 HP - 100 HP - 500 HP - 1000 HP

Get potential votes from @ pgm-curator by paying in PGM, here is a guide

I'm a bot, if you want a hand ask @ zottone444


🍕 PIZZA !

I gifted $PIZZA slices here:
@itharagaian(4/5) tipped @iamludal (x1)

Join us in Discord!

Congratulations @iamludal! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

You received more than 500 upvotes.
Your next target is to reach 600 upvotes.
You received more than 10 HP as payout for your posts, comments and curation.
Your next payout target is 50 HP.
The unit is Hive Power equivalent because post and comment rewards can be split into HP and HBD

You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Check out the last post from @hivebuzz:

HiveBuzz World Cup Contest - Recap of Day 9
Hive Power Up Day - December 1st 2022
HiveBuzz World Cup Contest - Check your ranking
Support the HiveBuzz project. Vote for our proposal!

Bonjour !

En tant que membre francophone de Hive, vous avez été ajouté à l'auto-vote de @laruche et avez reçu un vote à 100% en guise de cadeau de bienvenu.

La puissance de vote de base est de 25%, deux votes par tranche de 24h et 7 max par semaine.
Vous pouvez augmenter la puissance de vote en déléguant à la Ruche si vous le souhaitez. Voici notre serveur Discord si vous avez des questions ou juste pour discuter avec d'autres francophones de Hive !

https://discord.gg/46gdrud

Bienvenue dans la Ruche !

Blogging in English can get you more readers.