Ethereum est devenu une preuve de concept pour l’avenir de la communication web, principalement en raison de sa fonctionnalité principale, le contrat intelligent. Explication de son fonctionnement.
Principalement, Ethereum est une plateforme pour créer des services en ligne décentralisés, fonctionnant sur la base de la technologie blockchain. Ce n'est que secondairement une cryptomonnaie. La principale distinction entre Ethereum et, par exemple, Bitcoin est les contrats intelligents. Ils permettent la programmation au sein de la blockchain. Cela autorise l'intégration de mécanismes plus complexes dans Ethereum, tels que les NFT.
Grâce aux contrats intelligents, nous pouvons explorer de nouvelles façons de mener des affaires, des institutions financières transparentes, un dépôt de brevets transparent, un vote transparent et la création de contrats transparents. En fait, le champ d'application des contrats intelligents est extrêmement large, et de nouvelles idées continuent d'émerger quotidiennement.
Essentiellement, un contrat est un fichier texte avec du code écrit dans le langage de programmation Solidity. Il fournit une certaine API, sous forme de fonctions et de déclencheurs, qui peuvent être utilisés au sein du contrat intelligent.
L'exécution d'un contrat dans Ethereum se déroule en plusieurs étapes :
Création d'une Transaction
Tout commence par la création et l'envoi d'une transaction par l'utilisateur. Cette transaction contient des instructions pour appeler les fonctions du contrat intelligent et peut également inclure des données et de l'ETH à transférer au contrat.
Diffusion de la Transaction
La transaction envoyée est diffusée à travers le réseau de nœuds Ethereum. Elle attend dans le pool de transactions jusqu'à ce qu'un mineur (ou validateur en PoS) la sélectionne pour inclusion dans un nouveau bloc.
Traitement de la Transaction par les Mineurs
Le mineur sélectionne la transaction du pool et commence le traitement. Cela inclut la vérification de l'authenticité de la transaction (signature) et la suffisance des fonds pour payer le gaz.
Exécution du Contrat
Après vérification, le mineur (ou validateur) exécute le code du contrat intelligent. Cette exécution se déroule dans la Machine Virtuelle Ethereum (EVM) — un environnement isolé où chaque opération coûte une certaine quantité de gaz.
Changement d'État
À la suite de l'exécution du contrat, un changement dans l'état de la blockchain peut se produire. Par exemple, cela pourrait être le transfert de tokens, la modification de données dans le contrat, etc.
Confirmation du Bloc
Après que le mineur a terminé la formation du bloc avec les transactions, il diffuse ce bloc à travers le réseau. Les autres nœuds vérifient le bloc et, après une vérification réussie, l'ajoutent à leur copie de la blockchain.
Paiement du Gaz
L'utilisateur qui a envoyé la transaction paie des frais de gaz en ETH. Ces frais vont au mineur (ou validateur) en tant que récompense pour le traitement de la transaction et le soutien du réseau.
Finalisation
Après la confirmation du bloc, la transaction et tous ses résultats (y compris l'exécution du contrat) sont considérés comme finaux et irréversibles.
Les calculs associés à l'exécution des contrats intelligents dans le réseau Ethereum sont payés par les utilisateurs qui envoient des transactions. Ces utilisateurs paient des frais de gaz, qui compensent les ressources nécessaires pour traiter les transactions et exécuter les contrats intelligents.
Les frais de gaz dépendent de plusieurs facteurs :
Complexité Computationnelle
Des opérations plus complexes nécessitent plus de ressources de calcul et sont donc plus coûteuses.
Congestion du Réseau
Pendant les périodes de forte congestion du réseau, le prix du gaz peut augmenter, car les utilisateurs rivalisent pour que leurs transactions soient incluses rapidement dans un bloc.
Limite de Gaz
L'utilisateur définit la quantité maximale de gaz qu'il est prêt à dépenser pour l'exécution de la transaction. Si la limite est trop basse, la transaction peut ne pas être exécutée.
Les mineurs ou validateurs (selon que le réseau utilise la preuve de travail ou la preuve d'enjeu) sélectionnent les transactions avec des frais de gaz plus élevés, car cela augmente leurs revenus. Ces frais servent d'incitation pour maintenir le fonctionnement du réseau Ethereum.
Les contrats intelligents dans Ethereum peuvent effectuer une large gamme de calculs, mais il existe certaines limitations et caractéristiques à considérer :
Turing-Complétude
Les langages de programmation des contrats intelligents, tels que Solidity et Vyper, sont Turing-complets, permettant théoriquement d'effectuer tout calcul similaire aux langages de programmation conventionnels.
Ressources Limitées
Chaque opération dans un contrat coûte une certaine quantité de gaz, et la quantité de gaz qui peut être utilisée dans une seule transaction est limitée. Cela signifie que des calculs très complexes ou gourmands en ressources peuvent être impraticables en raison des coûts élevés de gaz ou des limites de bloc.
Déterminisme
Les calculs dans les contrats intelligents doivent être déterministes, c'est-à-dire qu'avec les mêmes entrées, ils doivent toujours produire les mêmes sorties. Ceci est nécessaire pour maintenir la cohérence de l'état de la blockchain.
Pas de Requêtes Réseau Externes
Les contrats intelligents ne peuvent pas directement effectuer de requêtes vers des serveurs externes ou des API. Des oracles sont utilisés pour obtenir des données externes.
Stockage de Données
Les contrats peuvent stocker des données dans leur état, mais en raison des coûts de gaz, le stockage de grandes quantités de données peut être coûteux.
Opérations Mathématiques et Logiques
Les contrats peuvent effectuer diverses opérations mathématiques et logiques, gérer le flux d'exécution (boucles, structures conditionnelles), créer et interagir avec d'autres contrats.
Gestion des Fonctions Cryptographiques
Ethereum prend en charge certaines fonctions cryptographiques, telles que le hachage et la vérification de signatures numériques.
Limitations de Temps d'Exécution
En raison de la limite de gaz pour chaque transaction, les contrats intelligents ne sont pas adaptés aux calculs nécessitant de longs temps d'exécution.
Ces limitations et capacités définissent quels types d'applications et de calculs peuvent être efficacement mis en œuvre en utilisant des contrats intelligents dans Ethereum.
Dans le code des contrats intelligents Ethereum, il n'est pas possible de faire une requête directe à un site web externe ou d'appeler une API externe. Cependant, pour interagir avec des données externes et des API dans les contrats intelligents Ethereum, on utilise des oracles. Les oracles sont des services tiers qui fournissent des données du monde extérieur à la blockchain. Ils agissent comme des intermédiaires, collectant les données nécessaires aux contrats intelligents et les fournissant à la blockchain de manière fiable et vérifiée.
Des exemples d'utilisation des oracles incluent l'obtention d'informations sur les prix des actifs, des données météorologiques, les résultats d'événements sportifs, et bien plus encore. Cependant, l'utilisation d'oracles nécessite une confiance dans le fournisseur de données et une gestion appropriée des risques associés à la centralisation de cet aspect des applications décentralisées.
Cela est lié à plusieurs caractéristiques clés de la blockchain et des contrats intelligents :
Déterminisme
La blockchain exige que chaque transaction et exécution de contrat soit déterministe. Cela signifie que chaque nœud du réseau doit arriver au même résultat lors de l'exécution du code du contrat. Les requêtes externes pourraient conduire à des résultats différents à des moments différents, violant ce principe.
Sécurité et Isolement
L'incorporation de données ou de requêtes externes dans la blockchain pourrait créer des vecteurs d'attaque et des vulnérabilités dans la sécurité du réseau.
Synchronisation et Vitesse
La blockchain Ethereum fonctionne en mode synchrone, et ajouter une dépendance à des requêtes asynchrones externes pourrait ralentir ou perturber significativement le processus de minage et de vérification des transactions.
Les contrats intelligents dans Ethereum ont la capacité de stocker les résultats des calculs. Ces données sont stockées dans l'état de la blockchain et peuvent être accessibles tant à l'intérieur du contrat lui-même qu'à d'autres contrats ou requêtes externes. Voici les aspects clés du stockage de données dans les contrats intelligents :
Variables d'État : Les contrats intelligents peuvent définir des variables d'état qui sont stockées sur la blockchain et peuvent être modifiées via les fonctions du contrat. Ces variables peuvent stocker des valeurs telles que des nombres, des chaînes de caractères, des tableaux et des structures de données plus complexes.
Modification de l'État : Lorsqu'un contrat intelligent est exécuté à la suite d'une transaction et modifie ses variables d'état, ces changements sont enregistrés dans la blockchain après l'exécution réussie de la transaction.
Stockage à Long Terme : Étant donné que les données sont enregistrées dans la blockchain, elles sont à long terme et immuables, ce qui signifie qu'elles seront stockées tant que le réseau Ethereum existera.
Lecture des Données : Les contrats intelligents peuvent inclure des fonctions pour lire les données stockées. De telles fonctions peuvent être appelées par des utilisateurs externes ou d'autres contrats sans envoyer de transaction et sans dépenser de gaz.
Limitations de Gaz et Coût : Stocker des données sur la blockchain Ethereum nécessite du gaz, et peut donc être coûteux, surtout lors du stockage de grandes quantités de données. Cela nécessite une optimisation et une utilisation économique du stockage.
Les contrats intelligents peuvent utiliser le stockage pour diverses fins, y compris le suivi des soldes de cryptomonnaies, les résultats de votes, des identifiants uniques pour les NFT (jetons non fongibles) et bien plus encore.
Ainsi, les mécanismes de stockage et de gestion des données sont des composants clés dans la conception et la fonctionnalité des contrats intelligents sur Ethereum.
Une fois qu'un contrat intelligent est déployé sur le réseau Ethereum, son code devient immuable. Cela signifie qu'après le déploiement, il n'est pas possible de changer la logique ou la fonctionnalité du contrat. Voici les aspects clés de cette caractéristique :
Immuabilité du Code : Le code d'un contrat intelligent et toutes ses opérations sont enregistrés dans la blockchain Ethereum et deviennent une partie intégrante de son historique. Après le déploiement, le code du contrat ne peut pas être modifié ou supprimé.
Sécurité et Confiance : Cette immuabilité est une caractéristique importante pour assurer la sécurité et la confiance dans le réseau. Les utilisateurs et les parties interagissant avec le contrat peuvent être assurés que la logique du contrat ne sera pas modifiée après son déploiement.
Mises à Jour et Modifications : S'il est nécessaire de mettre à jour ou de changer la logique d'un contrat intelligent, les développeurs déploient généralement un nouveau contrat et, si nécessaire, migrent les données de l'ancien contrat. Dans certains cas, les développeurs incluent des mécanismes dans le contrat pour mettre à jour certains de ses aspects (par exemple, les adresses d'autres contrats), mais la logique de base reste inchangée.
Auto-Destruction : Il existe une fonction dans Solidity, selfdestruct
, qui permet de "détruire" un contrat, libérant de l'espace dans la blockchain et renvoyant les fonds résiduels à une adresse spécifiée. Cependant, après l'appel de cette fonction, le contrat devient non fonctionnel, et son code reste toujours dans la blockchain en tant qu'historique.
Architecture de Contrat Proxy : Pour créer des systèmes plus flexibles qui peuvent être mis à jour, les développeurs utilisent parfois une architecture de contrat proxy, où la logique est stockée dans un contrat séparé, et le contrat proxy délègue les appels de fonction à celui-ci. Cela permet de mettre à jour la logique en ne mettant à jour que le contrat contenant la logique, mais cette approche a ses nuances et risques.
La logique de base et la fonctionnalité d'un contrat intelligent restent inchangées après son déploiement, et la création d'un nouveau contrat est généralement nécessaire pour apporter des modifications.
Ethereum est bien plus qu'une simple cryptomonnaie. De telles plateformes nous offrent non seulement la liberté des transactions de paiement, mais permettent également une communication entre différentes entreprises sans avoir besoin de bureaucratie. L'absence de bureaucratie conduit à un progrès plus rapide pour l'humanité.