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


6774

x
Rechercher dans les dossiers

Actuellement à la Une...
Depuis ce matin, il est possible depuis le site du ministère de l’Intérieur de créer une attestation de déplacement dérogatoire dématérialisée. Deux semaines après avoir interdit les formulaires numériques tiers, Beauvau a lancé ce lundi son propre dispositif.

Une nouvelle semaine commence et la liste des bévues est déjà longue pour Zoom. Transit des flux vidéos par la Chine et vidéos enregistrées librement consultables sur la Toile, tandis que des Etats américains déconseillent ou interdisent son utilisation dans les écoles... c’est un mauvais lundi pour l’outil de vidéoconférence. 

L’organisation rassemblant les hôpitaux parisiens pourrait avoir recours aux solutions d’analyse de données de l’entreprise américaine. Celle-ci est en pleine opération séduction des institutions médicales européennes, profitant de la lutte contre l'épidémie de COVID-19.

LogMeIn lance sa nouvelle mise à jour de GoToMeeting avec plusieurs nouvelles intégrations dont Microsoft Teams.

La startup Geo4Cast a fourni au Journal Du Dimanche des cartes qui signalent, à partir d’une collecte massive de données de mobilité, une augmentation sensible des déplacements entre les deux derniers jeudis.

Une vaguelette de nouvelles applications et services rendus gratuits pendant la pandémie.

Le télétravail pose des problèmes évidents de sécurité. Sachant que la population française qui télétravaille régulièrement s’élèverait en moyenne entre seulement 8 et 18 %, ce mode de travail est une nouveauté pour beaucoup d’entreprises. Cette transition subite pose d’énormes défis de sécurité.

Christophe Castaner a annoncé le lancement lundi prochain d’une version numérique de l’attestation de déplacement dérogatoire. Elle se base sur un QR code, généré après complétion du formulaire, que scanneront les forces de l’ordre lors des contrôles. 

Alors que les données de bornage des opérateurs sont jalousement conservées par les autorités, en tous cas en France, Google met les pieds dans le plat en divulguant des données d'évolution de la fréquentation de différents types de lieux pour plus d'une centaine de pays. Ainsi chacun peut constater l'efficacité des mesures de confinement par pays et même par région selon plusieurs catégories de lieux.

Face à l’avalanche de problèmes sur ses vulnérabilités, ses pratiques en matière de confidentialité ou encore sa tendance à permettre le flicage de ses utilisateurs, Zoom tente, tant bien que mal, de redorer son blason, corrigeant les failles et annonçant une série de mesures. 

Toutes les News
LIVRES BLANCS

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.


Le présent guide d'achat vous aidera à améliorer l'efficacité de votre cloud hybride, en mettant l'accent sur les stratégies de gestion des données dédiées aux applications correspondantes.


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.


Tous les Livres Blancs
0123movie