Qu’est-ce que la solidité et comment est-elle utilisée pour développer des contrats intelligents?
La solidité a parcouru un long chemin depuis qu'elle a été proposée pour la première fois en 2014 puis développée par l'équipe Solidity d'Ethereum. Des centaines de milliers de développeurs utilisent le langage de programmation pour créer des services basés sur la blockchain pour un nombre croissant de cas d'utilisation.
Cet article explique ce qu'est la Solidité et comment elle est utilisée dans l'écosystème Ethereum. Cet article est pour vous si vous souhaitez en savoir plus sur le fonctionnement interne de ce langage de programmation basé sur la blockchain.
Qu'est-ce que la solidité?
Solidity est un langage de programmation de haut niveau orienté objet utilisé pour créer des contrats intelligents qui automatisent les transactions sur la blockchain. Après avoir été proposé en 2014, le langage a été développé par des contributeurs au projet Ethereum. Le langage est principalement utilisé pour créer des contrats intelligents sur la blockchain Ethereum et créer des contrats intelligents sur d'autres blockchains.
Solidity est similaire à l'un des langages de programmation les plus courants, JavaScript. Il peut être considéré comme un dialecte de JavaScript. Cela signifie que si vous comprenez JavaScript, il peut être facile d'acquérir Solidity. Solidity partage également des caractéristiques similaires aux langages de programmation C ++ et Python.
En tant que langage de haut niveau, Solidity supprime le besoin de taper du code en uns et en zéros. Il est beaucoup plus facile pour les humains d'écrire des programmes d'une manière qu'ils trouvent plus facile à comprendre, en utilisant une combinaison de lettres et de chiffres.
Solidity est de type statique, avec prise en charge de l'héritage, des bibliothèques et des types complexes définis par l'utilisateur. Comme Solidity est typé statiquement, l'utilisateur spécifie beaucoup chaque variable. Les types de données permettent au compilateur de vérifier l'utilisation correcte des variables. Les types de données Solidity sont généralement classés en tant que types de valeur ou types de référence.
La principale différence entre les types de valeur et les types de référence réside dans la manière dont ils sont affectés à une variable et stockés dans l'EVM (Ethereum Virtual Machine). Bien que la modification de la valeur d'une variable d'un type valeur n'affecte pas la valeur d'une autre variable, toute personne faisant référence à des valeurs modifiées dans des variables de type référence peut obtenir des valeurs mises à jour.
Comment fonctionne la solidité?
La beauté de l'écosystème Ethereum est que tant de crypto-monnaies différentes et d'applications décentralisées peuvent l'utiliser. Les contrats intelligents permettent de créer des technologies uniques sur Ethereum pour toutes sortes d'entreprises et d'organisations.
Chaque année, le monde dépense des milliards de dollars en solutions blockchain. Beaucoup de ces solutions sont créées à l'aide de Solidity. Les contrats intelligents construits à l'aide de Solidity peuvent être considérés comme un moyen d'automatiser les processus commerciaux et non commerciaux entre différentes personnes. Cela garantit que les personnes effectuant des transactions sur la blockchain n'ont pas à se soucier de risques tels que la fraude ou de ne pas pouvoir utiliser la même devise.
L'un des composants clés qui rend possible l'exécution du code Solidity est l'EVM. L'EVM est décrit comme un ordinateur virtuel sur la blockchain qui transforme les idées des gens en code qui exécute des applications sur la blockchain.
Sous le capot, Solidity crée un code au niveau de la machine qui est exécuté sur l'EVM. Un compilateur est utilisé pour décomposer du code lisible par l'homme de haut niveau, qu'il transforme en instructions que le processeur lit. Différentes plates-formes fournissent une compilation Solidity gratuite, y compris le compilateur en ligne Remix et un compilateur de type commande téléchargé sur un PC.
Les contrats intelligents EVM présentent certaines limitations qui doivent être prises en compte. L'un des plus importants d'entre eux est l'accès limité aux fonctions de bibliothèque utiles pour analyser les structures JSON ou l'arithmétique à virgule flottante.
Fonctions publiques et privées
Les fonctions publiques sont similaires aux API auxquelles n'importe qui dans le monde peut accéder. N'importe qui peut les appeler dans leur code. Les fonctions publiques sont conçues, dans de nombreux cas, pour des processus partagés sur une plate-forme que tous les utilisateurs utilisent.
Par exemple, une fonction publique pourrait être créée pour permettre à tous les utilisateurs d'une plateforme de vérifier le solde de leur compte. L'un des moyens les plus courants d'exploiter les contrats intelligents consiste à utiliser les fonctions publiques.
Si les contrats intelligents peuvent être faciles à rédiger avec Solidity, il est souvent très difficile de les rédiger en toute sécurité. Par exemple, si la fonction de retrait d'un contrat intelligent n'est pas sécurisée, un attaquant peut manipuler la fonction vulnérable pour vider un compte de fonds.
Un attaquant pourrait faire appel à une fonction de retrait pour envoyer de l'argent vers un autre compte, en utilisant une boucle qui répète à plusieurs reprises la fonction de retrait.
Les fonctions privées ne peuvent être appelées que depuis l'intérieur des contrats. Ils contiennent des instructions qui ne peuvent être exécutées qu'après avoir été appelées par d'autres fonctions, dans une chaîne. Cela rend plus difficile la manipulation du code par des acteurs malveillants.
Normes et logique de code
Différentes normes émergent qui déterminent comment les contrats intelligents Solidity sont utilisés pour créer des applications sur Ethereum. Ces normes sont appelées normes ERC (Ethereum Request for Comments). Les normes sont basées sur un document qui contient des directives sur les fonctions requises et des restrictions sur le comportement du code.
Les normes ERC qui déterminent le fonctionnement de Solidity comprennent:
- ERC20
- ERC165
- ERC721
- ERC223
- ERC621
- ERC777
- ERC827
- ERC884
- ERC865
- ERC1155
Il existe différentes manières d'utiliser Solidity pour faire interagir des contrats intelligents. Solidity peut également être utilisé pour créer des instructions dédiées sur la façon dont les données sont stockées dans le contrat intelligent. La logique et les données des contrats intelligents peuvent être séparées à l'aide de Solidity. En utilisant des contrats de substitution, la logique d'un contrat peut être modifiée pour permettre cela.
Immutabilité
Il est impossible de modifier le code d'un contrat intelligent après qu'il a été écrit et compilé. Cela signifie que chaque ligne de code doit fonctionner comme prévu, sinon il pourrait y avoir de sérieux risques d'exploitation du code.
La blockchain Ethereum étant immuable, il est impossible de modifier les données et la logique qui y sont écrites. Un moyen de contourner ce problème consiste à utiliser un proxy pour pointer vers un autre contrat contenant une logique métier réelle. Cela permet de corriger les bogues lors de l'implémentation d'une nouvelle version du contrat.
Coûts du gaz
Il y a des coûts supplémentaires qui sont payés pour l'utilisation de Solidity sur le réseau principal Ethereum. Certains des coûts supplémentaires sont basés sur le système de gaz sur Ethereum, qui nécessite le paiement aux mineurs pour sécuriser le réseau blockchain afin que le code puisse fonctionner en toute sécurité.
Lors de la rédaction de contrats intelligents, il est important de se rappeler que les coûts du gaz peuvent déterminer la performance d'un contrat intelligent. Comme les frais de gaz sont payés pour chaque emplacement de stockage utilisé, les actions exécutées avec le code Solidity coûtent du gaz. Il est peu probable qu'un contrat intelligent coûteux à gérer soit utilisé à long terme.
L'optimisation du gaz permet de réduire le coût du gaz lors de l'exécution du code Solidity. Certaines des méthodes d'optimisation des gaz les plus populaires incluent l'utilisation de bibliothèques et l'utilisation de moins de fonctions. Les bibliothèques sont souvent utilisées pour enregistrer le bytecode.
Au lieu d'ajouter un bytecode inutile au contrat intelligent, la logique peut être placée dans des bibliothèques. Cela aide à garder la taille réduite du contrat intelligent. En utilisant moins de fonctions, moins de bytecode est nécessaire et la difficulté d'audit du code est également réduite.
Comment la solidité peut-elle être utilisée dans Ethereum?
La solidité est utilisée pour créer des contrats intelligents pour les jetons fongibles et les jetons non fongibles. Différentes normes sont utilisées pour créer des jetons non fongibles et des jetons fongibles dans l'écosystème Ethereum.
Ceux-ci permettent de créer différents types de cas d'utilisation pour les personnes qui utilisent la blockchain. Solidity permet aux gens d'utiliser des jetons et des jetons non fongibles sur Ethereum . De la frappe de jetons non fongibles à leur ajout à des pools de production pour un intérêt supplémentaire, différents types d'utilisations des jetons sont rendus possibles par Ethereum.
Les Organisations Autonomes Décentralisées (DAO) sont également rendues possibles par Solidity. Un DAO, qui est un nouveau type de structure organisationnelle en ligne, est principalement écrit en Solidity. Les DAO permettent à différentes personnes de se réunir en tant que membres sur une plate-forme en ligne où elles votent sur les décisions clés du DAO.
Solidity permet d'automatiser les processus au sein du DAO. Les exemples d'automatisation des processus dans les DAO incluent le vote pour les décisions clés et l'attribution de réputation aux membres de la DAO pour leurs contributions au groupe.
Définition de normes pour les blockchains
La solidité est bien plus qu'un langage de programmation. Il définit des normes pour l'avenir de la technologie blockchain.
Grâce au nombre de développeurs open source travaillant pour améliorer la sécurité et les performances de Solidity, des milliers d'applications de l'écosystème Ethereum continuent à en dépendre pour que leurs applications fonctionnent. À mesure que de nouvelles normes sont créées pour les contrats intelligents dans Ethereum, la langue deviendra plus sûre à utiliser.