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).


5837

x
Rechercher dans les dossiers
Les derniers dossiers...
Réduire

Actuellement à la Une...
Redmond vient de dévoiler deux nouveaux outils, Dapr et OAM. Le premier est un runtime destiné à la création d’applications sur une architecture de microservices, l’autre une spécification pour les déploiements Kubernetes et cloud séparant exploitation et développement. Leurs points communs : Kubernetes et l’open source.

La plateforme poursuit ses intégrations en renforçant la collaboration avec Salesforce, permettant aux utilisateurs de gérer des dossiers et des comptes issus de Salesforce directement dans Slack, tout en renforçant les possibilités de partage d’informations dans les channels.

Les freelances en informatique comme les développeurs full stack, les chefs de projets web, les ingénieurs réseau ou encore les spécialistes de la cybersécurité sont particulièrement recherchés. Le phénomène est tel qu’il a fait naître une myriade de nouvelles plates-formes spécialement dédiées à ces métiers. Article paru dans L'Informaticien n°180.

L’ancien co-CEO d’Oracle est décédé des suites des problèmes de santé qui l’ont contraint à prendre congé d’Oracle en septembre.

Le géant du e-commerce annonce avoir terminé la migration de ses bases de données, abandonnant Oracle au profit de sa propre infrastructure AWS. Un chantier gigantesque, on parle de 75 petabytes de données, et une pomme de discorde entre l’entreprise de Jeff Bezos et celle de Larry Ellison.

Il manque de moins en moins de cordes à l’arc de l’entreprise spécialisée dans la gestion des données sensibles. Oodrive vient d’obtenir la certification d’Hébergeur de Données de Santé (HDS), lui permettant de proposer ses solutions aux établissements de santé mais aussi aux assurances.

Quatre mois après avoir ouvert une enquête et communiqué ses griefs à Broadcom, soupçonné de pratiques anticoncurrentielles et d’abus de position dominante, la Commission européenne hausse le ton. Elle vient d’ordonner au géant des puces de cesser d’imposer certaines clauses à ses clients, à savoir les exigences d’exclusivité.

Mountain View tenait hier soir conférence à New York afin de présenter ses nouveaux produits. Dont les habituelles nouvelles itérations des smartphones Pixel, notables par l’intégration d’un radar servant à la reconnaissance des mouvements.

La jeune pousse française annonce avoir levé 110 millions de dollars auprès, notamment, d’Accel et de Salesforce Ventures. Cette startup spécialisée dans les moteurs de recherche entend poursuivre son développement à l’international.

La très populaire commande sudo, présente sur la quasi-totalité des distributions Linux et Unix, permettait à n’importe quel utilisateur de contourner les politiques de sécurité définies par l’administrateur et de s’accorder un accès root. Cette vulnérabilité documentée lundi a été corrigée depuis.

Toutes les News
LIVRES BLANCS
Les entreprises et les organismes publics se focalisent aujourd’hui sur la transformation numérique. En conséquence, les DevOps et l’agilité sont au premier plan des discussions autour des stratégies informatiques. Pour offrir ces deux avantages, les entreprises travaillent de plus en plus avec les fournisseurs de services de cloud public et développent désormais des clouds sur site à partir d’une infrastructure qui répond à trois exigences de base:
1. Agilité sans friction des ressources physiques
2. Systèmes de contrôle optimisant l'utilisation des ressources physiques et offrant un retour sur investissement maximal
3. Intégration des divers composants de l'infrastructure pour un provisionnement et une gestion des ressources automatisés.


Pour fonctionner, votre entreprise doit pouvoir compter sur une solution de sauvegarde efficace, essentielle dans un monde marqué par une croissance exponentielle des données. Vous devez à la fois accélérer vos sauvegardes et pouvoir y accéder plus rapidement pour satisfaire les exigences actuelles de continuité d’activité, disponibilité, protection des données et conformité réglementaire. Dans cette ère de croissance effrénée, les cibles sur bande hors site et autres approches traditionnelles sont simplement dépassées.


L’Intelligence Artificielle promet de révolutionner la perception de la cybersécurité au coeur des entreprises, mais pas uniquement. Ce changement de paradigme engage, en effet, une redéfinition complète des règles du jeu pour les DSI et les RSSI, ainsi que l’ensemble des acteurs de la sécurité.


Lorsque l'on déploie des postes de travail, ils ont généralement tous la même configuration matérielle et logicielle (avec certaines spécificités selon les services). Mais on ne peut pas toujours tout prévoir et il arrive par exemple que de nouveaux programmes doivent être installés ou n’aient pas été prévus. L’accumulation de logiciels « lourds » est susceptible de provoquer des lenteurs significatives sur un PC allant jusqu’à l’extinction nette de l’application. Ce livre blanc explique comment optimiser les performances au travers de 5 conseils rapides à mettre en place.


Ce guide est conçu pour aider les entreprises à évaluer les solutions de sécurité des terminaux. Il peut être utilisé par les membres de l'équipe de réponse aux incidents et des opérations de sécurité travaillant avec des outils de sécurité des points finaux sur une base quotidienne. Il peut également être utilisé par les responsables informatiques, les professionnels de la sécurité, les responsables de la conformité et d’autres personnes pour évaluer leurs performances. les capacités de l’entreprise en matière de cybersécurité, identifier les lacunes dans la sécurité des terminaux et sélectionner les bons produits pour combler ces lacunes.


Tous les Livres Blancs