X
Solidity, langage des smart contracts
Thierry Thaureaux / jeudi 25 janvier 2018 / Thèmes: Développement, Dossier, Blockchain

Solidity, langage des smart contracts

Pour écrire des contrats intelligents

Solidity est un langage de programmation orienté objet permettant d’écrire des contrats intelligents – les smart contracts – pour différentes platesformes basées sur le principe de la blockchain, dont Ethereum.

Vous trouverez de nombreuses ressources sur le site du projet solidity à l’adresse https://solidity.readthedocs.io/en/develop/

Qu’est-ce que Solidity ?

Le projet Solidity a été initialement proposé chez Ethereum en août 2014 par un certain Gavin Wood. Une fois le projet validé, le langage a ensuite été développé par l’équipe Solidity du projet Ethereum, dirigée par Christian Reitwiessner et incluant les développeurs Alex Beregszaszi et Yoichi Hirai. Solidity est l’un des quatre langages conçus pour cibler la machine virtuelle Ethereum (EVM pour Ethereum Virtual Machine), les trois autres étant Serpent, LLL et Mutan (déjà déprécié). Ces langages ont pour but commun l’écriture de smart contracts sur, principalement mais pas seulement, la blockchain Ethereum. Solidity est actuellement le langage principal sur Ethereum ainsi que sur d’autres blockchains privées en concurrence avec Ethereum, telle que Monax. Le réseau interbancaire mondial Swift a déployé une preuve de concept fonctionnant sur une implémentation de Tendermint par Monax Industries Eris à l’aide de Solidity.

Solidity est un langage de programmation proche du JavaScript avec un typage statique conçu pour développer des contrats intelligents fonctionnant sur l’EVM. Il est compilé en bytecode exécutable sur l’EVM.

Avec Solidity, les développeurs peuvent écrire des applications qui implémentent la logique métier d’auto-application énoncées dans les contrats intelligents, laissant un enregistrement non répudiable et faisant autorité des transactions. Écrire des smart contracts dans un langage qui leur est spécifique – tel Solidity – est relativement simple pour peu que l’on ait déjà quelques compétences en programmation objet.

Comme Gavin Wood l’a spécifié, Solidity a été conçu autour de la syntaxe ECMAScript, donc proche du Javascript – pour le rendre rapidement familier aux développeurs web. Contrairement à ECMAScript, il possède un typage statique et des types de retour variadiques. Solidity est bien plus évolué que les autres langages plus anciens créés pour l’EVM tels que Serpent ou Mutan. Il offre notamment les fonctionnalités suivantes :

• des variables de types complexes ;
• des types structures hiérarchiques assez proches des structs du langage C ;
• l’héritage, y compris l’héritage multiple avec linéarisation ;
• une application d’interface binaire (ABI) facilitant l’inclusion de plusieurs fonctions typées dans un seul contrat a également été introduite, et ajoutée au langage Serpent ;
• un système de documentation décrivant les ramifications des appels des méthodes centré sur l’utilisateur.

Développer des DApps grâce à la blockchain Ethereum

Si l’usage initial de la blockchain était la création de crypto-monnaie, « Satoshi Nakamoto » avait également prévu un champ d’applications plus large. L’émergence de l’Ethereum a bouleversé la perception de la blockchain. Ethereum est une blockchain simplifiée destinée principalement au développement d’applications décentralisées ou DApps (Decentralized Applications). La plupart des autres blockchains sont faites seulement pour « miner » (fabriquer de la crypto-monnaie) avec des notions de jetons plus évoluées, comme le célèbre bitcoin. Développer des applications décentralisées DApps revient en fait à développer des smart contracts. Dans l’écosystème de développement de Dapps, Solidity est actuellement le langage de programmation le plus populaire. C’est un langage orienté objet permettant l’écriture de smart contracts via une syntaxe assez simple. Voici un exemple de code tiré du site du projet pour vous donner un aperçu de sa syntaxe :

pragma solidity ^0.4.11;
contract Purchase {
    uint public value;
    address public seller;
    address public buyer;
    enum State { Created, Locked, Inactive }
    State public state;

    // Ensure that `msg.value` is an even number.
    // Division will truncate if it is an odd number.
    function Purchase() payable {
        seller = msg.sender;
        value = msg.value / 2;
        require((2 * value) == msg.value);    }

    modifier condition(bool _condition) {        require(_condition);
        _;    }

    ………

    event Aborted();
    event PurchaseConfirmed();
    event ItemReceived();

    /// Abort the purchase and reclaim the ether.
    function abort()
        onlySeller
        inState(State.Created)
    {
        Aborted();
        state = State.Inactive;
        seller.transfer(this.balance);
    }
    ………
    function confirmReceived()
        onlyBuyer
        inState(State.Locked)
    {
        ItemReceived();
        state = State.Inactive;
        buyer.transfer(value);
        seller.transfer(this.balance);
    }
 }

 

Les contrats intelligents

La force du code interne d’Ethereum par rapport à celui du bitcoin est qu’il est « turing-complet », c’est-à-dire capable, avec suffisamment de temps, de tout calculer. Ce code permet d’installer dans chaque nœud du réseau Ethereum une EVM dédiée à faire tourner de façon décentralisée les contrats intelligents de la plate-forme. Un smart contract est un contrat financier prévu pour s’enclencher automatiquement quand certaines conditions sont remplies, et ce sans autorité tierce. Ethereum permet d’effectuer un saut conceptuel entre application traditionnelle et application décentralisée. Tout comme les crypto-monnaies sont des banques dirigées par du logiciel, les contrats intelligents permettent ainsi de bâtir toutes sortes d’entreprises financières et technologiques.

Déployer un smart contract sur une blockchain

Chaque smart contract a une zone de données qui lui est propre et qu’il va pouvoir gérer. C’est une sorte de hashtable (collection de données indexée via des adresses mémoires) privée et spécifique à ce smart contract qui va l’utiliser afin de stocker un certain nombre d’informations. Une fois le code source écrit, il faut le compiler en byte code. Plusieurs compilateurs Solidity sont disponibles sur Internet, le plus fréquemment utilisé étant solc. Le compilateur va créer deux éléments : du code binaire qui va s’exécuter sur la machine virtuelle et une ABI (Application Binary Interface) qui décrit l’interface du contrat et ses méthodes pouvant être appelées par d’autres smart contracts ou par des applications classiques. Lorsqu’un contrat est déployé, la nouvelle adresse le représentant sur la blockchain est renvoyée afin de pouvoir le contacter.

Ether ou exécution de smart contract

Contrairement aux autres blockchains où il n’existe qu’un seul type d’adresses, l’Ethereum en propose deux. Il n’y a aucune différence notable concernant la structure des adresses, mais celle-ci peut correspondre soit à un compte créé par un user Ethereum, soit à un smart contract qui va recevoir des messages. S’il s’agit d’un smart contract, des transactions visant à lancer son exécution seront envoyées. Si c’est un compte classique, c’est de l’Ether qui sera envoyé à la place.

Disruption des data centers par la blockchain

L’instanciation et le déploiement de contrats sur la blockchain publique coûte forcément de l’Ether, du gaz – de l’oseille donc… Le modèle économique de la blockchain est donc de « disrupter » les data centers. L’idée mise en œuvre ici est que chacun va pouvoir exécuter ses propres « nœuds » tout en étant rémunéré pour exécuter les contrats et les applications des autres. Donc, à chaque fois qu’un nœud va exécuter un smart contrat et valider un bloc, ces nœuds qui exécutent réellement des applications vont être rémunérés directement. La manière de payer pour exécuter vos applications est définie au moment du déploiement du Smart Contract. Il faut payer pour déployer le smart contract et cet argent sera utilisé pour rémunérer ceux qui l’exécutent. À chaque envoi de transaction, les personnes qui vont utiliser votre smart contract, et lui demander de faire une tâche particulière, vont payer un tout petit peu pour exécuter la transaction. C’est ce que l’on appelle le « gaz », l’Ether dans le cas de l’Ethereum, par exemple. Le modèle économique de la blockchain est hyper distribué. Nous pouvons faire l’analogie avec un « grid » énergétique où chaque maison produira sa propre énergie. Si toute l’énergie peut être partagée entre toutes les maisons, chacun est alors à la fois producteur et consommateur. Plus besoin de réseau centralisé, du coup. Par analogie, il n’y a plus besoin de centraliser l’hébergement des applications. L’idée est d’avoir des modèles complétement décentralisés. Le Cloud sans service cloud dédié et sans datacenter centralisateur, en quelque sorte. (Lire l’article d’Émilien Ercolani dans L’Informaticien n° 161).

Tester une application DApp

Durant le développement, les tests se feront généralement sur des blockchains locales. Vous n’allez bien évidemment pas tester vos contrats en les déployant sur la blockchain publique d’Ethereum car cela coûterait inutilement de l’argent. Le principe employé consiste à créer sa propre chaîne privée sur laquelle on va aussi créer des monnaies virtuelles, mais des monnaies n’ayant pas de contrepartie financière dans le monde réel et qui ne serviront que pour les tests. Pour faire abstraction de ces problématiques, il existe fort heureusement une implémentation en mémoire de la blockchain Ethereum, très pratique pour le développement et les tests : Test RPC. Elle initialise une blockchain Ethereum avec un nœud genesis et un certain nombre de comptes dont elle va vous donner les clés privées.

Les EDI de développement de DApps

Les blockchains, et notamment l’Ethereum, en étant à leurs balbutiements, les EDI sont encore peu nombreux et assez pauvres. Il vous faudra, au minimum, pour développer des Smart Contracts, un compilateur Solidity. Les principales implémentations sont solc, solc-js (version Json) et browser-solidity. Côté EDI (ou IDE), vous pouvez employer ReMix, un logiciel open source de développement pour la blockchain Ethereum. Il embarque des éditeurs pour les différents langages de la blockchain, un compilateur Solidity et différents outils de test. Si vous êtes fan de l’EDI de Microsoft, il existe un plugin Solidity pour Visual Studio. Idem pour les aficionados de vi, ou plutôt de vim, pour lequel il existe deux plugins : l’un pour la syntaxe (vim Solidity) et l’autre pour compiler (vim syntastic). Quelques frameworks commencent néanmoins à émerger pour le développement de DApps, comme Truffle ou Embark. Truffle vous permet de créer un dossier pour votre application. En saisissant truffle enit, vous générerez le squelette d’une application Ethereum et d’un smart contract avec sa partie frontend. Truffle deploy permet de le déployer sur le client qui sera exécuté sur votre machine. Si vous avez installé au préalable Test RPC, le smart contract est exécuté en local et vous allez pouvoir exécuter les tests unitaires sans dépenser un iota de gaz.

Ces packages NPM (Node Package Manager) proposent aux développeurs l’outillage « classique » :

• Automatisation de la chaîne de compilation Solidity ;
• Intégration aux outils de tests unitaires existants ;
• Automatisation du déploiement ;
• Communication avec la blockchain.

La plate-forme révolutionnaire d’exécution d’applications de type blockchain Ethereum.

Utiliser JSON-RPC pour vos DApps

La blockchain étant par définition un « environnement fermé », les seules opérations possibles sont celles définies par l’EVM. La question qui se pose : comment effectuer les opérations suivantes ?
• visualiser les données stockées par un Smart Contract ;
• accéder à des données stockées à l’extérieur de la Blockchain ;
• réagir à des événements survenus dans la Blockchain.

Il va falloir pour cela développer des DApps qui vont utiliser la même interface JSON-RPC. Plus précisément, c’est une interface RPC (Remote Procedure Call) qui utilise JSON comme structure de données en vue de modéliser les données envoyées à la blockchain. Si différentes solutions existent, toutes s’appuient sur l’interface JSON-RPC exposée par les nœuds Ethereum. Cette interface RPC est exposée par tous les nœuds Ethereum, qu’ils soient publics ou privés, comme le sont les nœuds TestRpc. La partie frontend de la DApp est implémentée en JavaScript et utilise la librairie web3.js pour communiquer avec un nœud Ethereum. Le smart contract qui représente la partie backend est déployé sur la blockchain. Le frontend est ensuite déployé publiquement et l’application est alors accessible à tous les utilisateurs d’Ethereum – via Mist, par exemple.

La gestion des événements et le pattern oracle

Il est souvent intéressant d’exécuter du code extérieur lorsque certains événements se produisent dans la blockchain. Ethereum propose pour cela un mécanisme d’événements, les Smart Contracts, pouvant émettre des événements lors de l’exécution de fonctions. Ces événements peuvent être monitorés de l’extérieur via l’interface JSON-RPC. Certains contrats (web service REST, exécution de code non supporté sur l’EVM, etc.) ont besoin d’accéder à des ressources externes pour leur exécution. Une interface entre la blockchain et le monde extérieur est donc nécessaire. Ce pattern est appelé oracle dans Ethereum.


La blockchain Ethereum

Encore peu connue il y a un an et demi seulement, Ethereum s’est envolée à la deuxième place du marché des crypto monnaies grâce aux possibilités d’applications décentralisées offertes par ses smart contracts. L’idée à l’origine d’Ethereum a été avancée à la fin 2013 par Vitalik Buterin, un informaticien russo-canadien de 19 ans. La plate-forme a été lancée le 30 juillet 2015. Elle connaît un boom de popularité depuis mars 2017 et est devenue à ce jour la deuxième plus grosse crypto-monnaie en circulation. Si la partie monétaire au sens strict d’Ethereum est largement inspirée du bitcoin, c’est la porte qu’elle ouvre pour le concept de contrat intelligent qui rend cette plate-forme aussi intéressante.


Solidity et le hack de theDAO

Un chercheur de l’Université Cornell a déclaré que Solidity était en partie à blâmer pour le hack de theDAO (Decentralized Autonomous Organization, ou organisation autonome décentralisée), le fonds d’investissement participatif fonctionnant sur la Blockchain d’Ethereum, survenu en 2016. D’après lui, ce n’était pas « un défaut ou une faille dans le contrat de DAO en soi. Techniquement, l’EVM fonctionnait comme prévu. C’est Solidity qui a introduit des failles de sécurité dans les contrats qui n’ont pas été décelés par la communauté, ni identifiés par les concepteurs du langage ». Rappelons que ce hack est à l’origine de la séparation de la communauté Ethereum en deux branches : ETH (Ethereum, le nouvel algorithme) et ETC (Ethereum classique, l’ancien algorithme).


7382

x
Rechercher dans les dossiers

Actuellement à la Une...
La plateforme de cryptomonnaies planifierait une introduction en bourse, ce pour quoi elle privilégierait une cotation directe plutôt qu’une traditionnelle IPO. Si la SEC devait accepter le dossier de Coinbase, cette arrivée sur les marchés financiers représenterait un pas de géant dans la reconnaissance de la légitimité des devises virtuelles. 

Le fonds d’investissements annonce avoir racheté 100% du capital de Silae, une jeune pousse française spécialisée dans les solutions SaaS de paie et de gestion des ressources humaines, déboursant 600 millions d’euros.

Les collectivités locales semblent devenir des cibles privilégiées des cybercriminels. Le Conseil départemental d’Eure-et-Loir annonce avoir été victime d’une attaque qui a mis ses systèmes d’information “hors service”.

Le bras armé dans le cloud du géant chinois accentue sa présence sur plusieurs marchés en s’appuyant sur l’infrastructure d’Equinix, notamment en Amérique du Nord mais aussi en Europe, avec deux zones à Francfort et à Londres.

Véritable usine de production de l’économie numérique, le datacenter focalise les critiques des associations environnementales. Ces installations dont les plus grosses peuvent consommer jusqu’à une centaine de mégawatts sont-elles vraiment un gouffre énergétique ? Article paru dans L'Informaticien n°186.

Toutes les autres News
LIVRES BLANCS

Actuellement, il existe un gouffre entre les environnements informatiques traditionnels des entreprises et le cloud public. Tout diffère : les modèles de gestion, de consommation, les architectures applicatives, le stockage, les services de données.


Les avantages de l’architecture hyperconvergée étant de plus en plus reconnus, de nombreuses entreprises souhaitent l’utiliser pour des types d’applications variés. Cependant, son manque de souplesse pour une mise à niveau des ressources de calcul indépendantes de celles de stockage ne lui permet pas d’être utilisée plus largement.

Au cours de l’événement HPE Discover qui s’est tenu en juin 2019, HPE a répondu à cette préoccupation en présentant la plateforme HPE Nimble Storage dHCI.

Ce Livre Blanc IDC se penche sur les exigences du marché ayant stimulé le besoin de solutions HCI plus flexibles, puis il examine brièvement la solution HPE Nimble Storage dHCI en expliquant pourquoi elle répond à ce besoin.


Malgré des investissements massifs dans le développement à hauteur de près de 4 milliards de dollars l'année dernière, près de la moitié du temps consacré au DevOps est perdu dans la répétition des tâches et dans la logistique. Ceci fait que 90% des entreprises qui ont adopté ces pratiques sont déçues par les résultats, selon une étude publiée par le Gartner.


Découvrez dans ce livre blanc, les avantages des toutes nouvelles solutions NETGEAR, pour simplifier et rentabiliser vos déploiements, et gérer votre réseau à distance, où que vous soyez, au bureau ou en télé-travail.


OneTrust est une plateforme logicielle innovante de gestion de la confidentialité, de la sécurité des données personnelles et des risques fournisseurs. Plus de 4 000 entreprises ont choisi de faire confiance à cette solution pour se conformer au RGPD, au CCPA, aux normes ISO 27001 et à différentes législations internationales de confidentialité et de sécurité des données personnelles.

OneTrust vous propose de télécharger le texte officiel du Règlement Général sur la Protection des Données (RGPD). Vous aurez également la possibilité de recevoir la version imprimée de ce texte, sous forme de guide pratique au format A5, spiralé, en complétant le formulaire.


Tous les Livres Blancs
0123movie