{"id":39018,"date":"2019-10-31T22:27:25","date_gmt":"2019-10-31T19:27:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\/"},"modified":"2019-10-31T22:27:25","modified_gmt":"2019-10-31T19:27:25","slug":"kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Livre \u00abCr\u00e9er des contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique\u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Livre \u00abCr\u00e9er des contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPendant plus d'un an, j'ai travaill\u00e9 sur le livre \u00ab Cr\u00e9ation de contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique \u00bb, et maintenant ce travail est achev\u00e9, et le livre <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">est publi\u00e9 et disponible sur Litres<\/a><\/noindex>.<\/p>\n<p>J'esp\u00e8re que mon livre aidera rapidement \u00e0 commencer \u00e0 cr\u00e9er des contrats intelligents Solidity et des applications d\u00e9centralis\u00e9es DApp pour la blockchain Ethereum. Il se compose de 12 le\u00e7ons avec des exercices pratiques. En les accomplissant, le lecteur pourra cr\u00e9er ses propres n\u0153uds Ethereum locaux, publier des contrats intelligents et appeler leurs m\u00e9thodes, \u00e9changer des donn\u00e9es entre le monde r\u00e9el et les contrats intelligents \u00e0 l'aide d'oracles, et travailler avec le r\u00e9seau de test Rinkeby. <\/p>\n<p>Le livre s'adresse \u00e0 tous ceux qui s'int\u00e9ressent aux technologies avanc\u00e9es dans le domaine des blockchains et souhaitent acqu\u00e9rir rapidement des connaissances pour se lancer dans un travail passionnant et prometteur.<\/p>\n<p>Vous trouverez ci-dessous la table des mati\u00e8res et le premier chapitre du livre (\u00e9galement sur <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> des extraits du livre sont disponibles). J'esp\u00e8re recevoir des retours, commentaires et suggestions. Je m'efforcerai de les prendre en compte lors de la pr\u00e9paration de la prochaine \u00e9dition du livre.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Table des mati\u00e8res<\/b><b class=\"spoiler_title\">Introduction<\/b>Notre livre est destin\u00e9 \u00e0 ceux qui souhaitent non seulement comprendre les principes de fonctionnement de la blockchain Ethereum, mais aussi acqu\u00e9rir des comp\u00e9tences pratiques dans la cr\u00e9ation d'applications d\u00e9centralis\u00e9es DApp en utilisant le langage de programmation Solidity pour ce r\u00e9seau.<\/p>\n<p>Il est pr\u00e9f\u00e9rable de ne pas simplement lire ce livre, mais de travailler avec lui, en r\u00e9alisant les exercices d\u00e9crits dans les le\u00e7ons. Pour cela, vous aurez besoin d'un ordinateur local, d'un serveur virtuel ou cloud avec un syst\u00e8me d'exploitation Debian ou Ubuntu install\u00e9. Vous pouvez \u00e9galement utiliser un Raspberry Pi pour de nombreux exercices.<\/p>\n<p><b>Dans la premi\u00e8re le\u00e7on <\/b>nous examinerons les principes de fonctionnement de la blockchain Ethereum et la terminologie de base, ainsi que les cas d'utilisation de cette blockchain. <\/p>\n<p>L'objectif <b>la deuxi\u00e8me le\u00e7on<\/b> \u2013 cr\u00e9er un n\u0153ud de blockchain Ethereum priv\u00e9 pour une utilisation ult\u00e9rieure dans ce cours sur un serveur Ubuntu et Debian. Nous examinerons les sp\u00e9cificit\u00e9s de l'installation des principales utilitaires, tels que geth, qui assurent le fonctionnement du n\u0153ud de notre blockchain, ainsi que du d\u00e9mon de stockage d\u00e9centralis\u00e9 de donn\u00e9es swarm.<\/p>\n<p><b>La troisi\u00e8me le\u00e7on<\/b> vous apprendra \u00e0 r\u00e9aliser des exp\u00e9riences avec Ethereum sur un micro-ordinateur Raspberry Pi peu co\u00fbteux. Vous installerez le syst\u00e8me d'exploitation (OS) Rasberian sur le Raspberry Pi, l'outil Geth qui permet le fonctionnement d'un n\u0153ud blockchain, ainsi que le d\u00e9mon de stockage d\u00e9centralis\u00e9 Swarm.<\/p>\n<p><b>Quatri\u00e8me le\u00e7on<\/b> est consacr\u00e9e aux comptes et aux unit\u00e9s de cryptomonnaie dans le r\u00e9seau Ethereum, ainsi qu'aux m\u00e9thodes de transfert de fonds d'un compte \u00e0 un autre depuis la console Geth. Vous apprendrez \u00e0 cr\u00e9er des comptes, \u00e0 initier des transactions de transfert de fonds, \u00e0 obtenir l'\u00e9tat d'une transaction et son re\u00e7u.<\/p>\n<p><b>Dans la cinqui\u00e8me le\u00e7on<\/b> vous vous familiariserez avec les contrats intelligents dans le r\u00e9seau Ethereum et d\u00e9couvrirez leur ex\u00e9cution par la machine virtuelle Ethereum. <\/p>\n<p>Vous cr\u00e9erez et publierez votre premier contrat intelligent dans un r\u00e9seau Ethereum priv\u00e9 et apprendrez \u00e0 appeler ses fonctions. Pour cela, vous utiliserez l'environnement de d\u00e9veloppement Remix Solidity IDE. De plus, vous apprendrez \u00e0 installer et \u00e0 utiliser le compilateur en batch solc.<br \/>\nNous parlerons \u00e9galement de ce qu'on appelle l'Interface Binaire d'Application (ABI) et vous apprendrons \u00e0 l'utiliser.<\/p>\n<p><b>Sixi\u00e8me le\u00e7on<\/b> est consacr\u00e9e \u00e0 la cr\u00e9ation de scripts JavaScript fonctionnant sous Node.js et ex\u00e9cutant des op\u00e9rations avec des contrats intelligents Solidity.<\/p>\n<p>Vous installerez Node.js sur les syst\u00e8mes d'exploitation Ubuntu, Debian et Rasberian, \u00e9crirez des scripts pour publier un contrat intelligent dans un r\u00e9seau local Ethereum et appeler ses fonctions. <\/p>\n<p>De plus, vous apprendrez \u00e0 transf\u00e9rer des fonds entre des comptes normaux \u00e0 l'aide de scripts, ainsi qu'\u00e0 les cr\u00e9diter sur des comptes de contrats intelligents.<\/p>\n<p><b>Dans la septi\u00e8me le\u00e7on<\/b> vous apprendrez \u00e0 installer et \u00e0 utiliser l'environnement int\u00e9gr\u00e9 Truffle, populaire parmi les d\u00e9veloppeurs de contrats intelligents Solidity. Vous apprendrez \u00e0 cr\u00e9er des scripts JavaScript appelant des fonctions de contrats \u00e0 l'aide du module truffle-contract, et \u00e0 tester votre contrat intelligent avec les outils de Truffle.<\/p>\n<p><b>Huiti\u00e8me le\u00e7on<\/b> est consacr\u00e9e aux types de donn\u00e9es Solidity. Vous \u00e9crirez des contrats intelligents traitant de types de donn\u00e9es tels que des entiers sign\u00e9s et non sign\u00e9s, des nombres sign\u00e9s, des cha\u00eenes de caract\u00e8res, des adresses, des variables de types complexes, des tableaux, des \u00e9num\u00e9rations, des structures et des dictionnaires.<\/p>\n<p><b>Dans la neuvi\u00e8me le\u00e7on<\/b> Vous ferez un pas de plus vers la cr\u00e9ation de contrats intelligents pour le r\u00e9seau principal Ethereum. Vous apprendrez \u00e0 publier des contrats \u00e0 l'aide de Truffle dans un r\u00e9seau priv\u00e9 Geth, ainsi que dans le r\u00e9seau de test Rinkeby. Le d\u00e9bogage d'un contrat intelligent sur le r\u00e9seau Rinkeby est tr\u00e8s utile avant sa publication sur le r\u00e9seau principal \u2014 tout y est presque r\u00e9el, mais gratuit.<\/p>\n<p>Dans le cadre de ce cours, vous allez cr\u00e9er un n\u0153ud du r\u00e9seau de test Rinkeby, l'approvisionner en fonds et publier un contrat intelligent.<\/p>\n<p><b>Le\u00e7on 10<\/b> est consacr\u00e9e aux stockages de donn\u00e9es distribu\u00e9s Ethereum Swarm. En utilisant des stockages distribu\u00e9s, vous \u00e9conomisez sur le stockage de grandes quantit\u00e9s de donn\u00e9es dans la blockchain Ethereum. <\/p>\n<p>Dans cette le\u00e7on, vous cr\u00e9erez un stockage local Swarm, effectuerez des op\u00e9rations d'\u00e9criture et de lecture de fichiers, ainsi que de r\u00e9pertoires contenant des fichiers. Ensuite, vous apprendrez \u00e0 travailler avec la passerelle publique Swarm, \u00e0 \u00e9crire des scripts pour acc\u00e9der \u00e0 Swarm depuis Node.js, ainsi qu'\u00e0 l'aide du module Perl Net::Ethereum::Swarm.<\/p>\n<p><b>L'objectif de la le\u00e7on 11<\/b> est de ma\u00eetriser le travail avec les contrats intelligents Solidity en utilisant le populaire langage de programmation Python et le framework Web3.py. Vous installerez ce framework, \u00e9crirez des scripts pour compiler et publier un contrat intelligent, ainsi que pour appeler ses fonctions. Web3.py sera utilis\u00e9 \u00e0 la fois seul et en conjonction avec l'environnement de d\u00e9veloppement int\u00e9gr\u00e9 Truffle.<\/p>\n<p><b>Lors de la le\u00e7on 12<\/b> vous apprendrez \u00e0 transmettre des donn\u00e9es entre des contrats intelligents et le monde r\u00e9el \u00e0 l'aide d'oracles. Cela vous sera utile pour obtenir des donn\u00e9es \u00e0 partir de sites Web, d'appareils IoT, de divers instruments et capteurs, et pour envoyer des donn\u00e9es depuis des contrats intelligents vers ces appareils. Dans la partie pratique de la le\u00e7on, vous cr\u00e9erez un oracle et un contrat intelligent qui obtient le taux de change actuel du dollar am\u00e9ricain en roubles \u00e0 partir du site de la Banque centrale de la F\u00e9d\u00e9ration de Russie.<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 1. Introduction \u00e0 la blockchain et au r\u00e9seau Ethereum<\/b><b>L'objectif de la le\u00e7on :<\/b> se familiariser avec les principes de fonctionnement de la blockchain Ethereum, ses domaines d'application et la terminologie principale.<br \/>\n<b>Exercices pratiques :<\/b> aucun exercice n'est pr\u00e9vu dans cette le\u00e7on.<\/p>\n<p>Il est peu probable qu'il existe aujourd'hui un d\u00e9veloppeur de logiciels qui n'ait jamais entendu parler de la technologie blockchain, des cryptomonnaies, du Bitcoin, des ICO, des contrats intelligents, ainsi que d'autres concepts et termes li\u00e9s \u00e0 la blockchain.<\/p>\n<p>La technologie blockchain ouvre de nouveaux march\u00e9s et cr\u00e9e des emplois pour les programmeurs. Si vous ma\u00eetrisez toutes les subtilit\u00e9s des technologies de cryptomonnaie et des contrats intelligents, vous ne devriez pas avoir de probl\u00e8mes pour appliquer ces connaissances dans la pratique.<\/p>\n<p>Il convient de noter qu'il y a beaucoup de sp\u00e9culations autour des cryptomonnaies et des blockchains. Nous laisserons de c\u00f4t\u00e9 les r\u00e9flexions sur les fluctuations des cours des cryptomonnaies, la cr\u00e9ation de pyramides, les subtilit\u00e9s de la l\u00e9gislation sur les cryptomonnaies, etc. Dans notre cours, nous allons nous concentrer principalement sur les aspects techniques de l'application des contrats intelligents de la blockchain Ethereum (Ethereum) et du d\u00e9veloppement d'applications d\u00e9centralis\u00e9es (DApp).<\/p>\n<h3>Qu'est-ce que la blockchain<\/h3>\n<p>\nLa blockchain est une cha\u00eene de blocs de donn\u00e9es, reli\u00e9s entre eux d'une mani\u00e8re sp\u00e9cifique. Au d\u00e9but de la cha\u00eene se trouve le premier bloc, appel\u00e9 bloc de naissance ou bloc g\u00e9n\u00e9sique. Suit ensuite le deuxi\u00e8me, puis le troisi\u00e8me, et ainsi de suite.<\/p>\n<p>Tous ces blocs de donn\u00e9es sont automatiquement r\u00e9pliqu\u00e9s sur de nombreux n\u0153uds du r\u00e9seau blockchain. Cela permet un stockage d\u00e9centralis\u00e9 des donn\u00e9es de la blockchain. <br \/>\nVous pouvez imaginer le syst\u00e8me blockchain comme un grand nombre de n\u0153uds (serveurs physiques ou virtuels) reli\u00e9s en r\u00e9seau et r\u00e9pliquant tous les changements dans la cha\u00eene de blocs de donn\u00e9es. C'est comme un gigantesque ordinateur multi-serveurs, dont les n\u0153uds (serveurs) peuvent \u00eatre dispers\u00e9s dans le monde entier. Vous pouvez \u00e9galement ajouter votre ordinateur au r\u00e9seau blockchain. <\/p>\n<h4>Base de donn\u00e9es distribu\u00e9e<\/h4>\n<p>\nLa blockchain peut \u00eatre consid\u00e9r\u00e9e comme une base de donn\u00e9es distribu\u00e9e, r\u00e9pliqu\u00e9e sur tous les n\u0153uds du r\u00e9seau blockchain. En th\u00e9orie, la blockchain fonctionnera tant qu'il y a au moins un n\u0153ud stockant tous les blocs de la blockchain.<\/p>\n<h4>Registre de donn\u00e9es distribu\u00e9<\/h4>\n<p>\nLa blockchain peut \u00eatre envisag\u00e9e comme un registre distribu\u00e9 de donn\u00e9es et d'op\u00e9rations (transactions). Un autre nom pour ce registre est le grand livre. <\/p>\n<p>Dans un registre distribu\u00e9, il est possible d'ajouter des donn\u00e9es, mais il est impossible de les modifier ou de les supprimer. Cette impossibilit\u00e9 est notamment r\u00e9alis\u00e9e gr\u00e2ce \u00e0 l'utilisation d'algorithmes cryptographiques, de m\u00e9thodes sp\u00e9cifiques d'ajout de blocs dans la cha\u00eene et d'un stockage d\u00e9centralis\u00e9 des donn\u00e9es.<\/p>\n<p>Lors de l'ajout de blocs et de l'ex\u00e9cution d'op\u00e9rations (transactions), des cl\u00e9s priv\u00e9es et publiques sont utilis\u00e9es. Elles limitent les utilisateurs de la blockchain en ne leur permettant d'acc\u00e9der qu'\u00e0 leurs propres blocs de donn\u00e9es.<\/p>\n<h4>Transactions<\/h4>\n<p>\nLa blockchain stocke des informations sur les op\u00e9rations (transactions) dans des blocs. Ainsi, les anciennes transactions, d\u00e9j\u00e0 r\u00e9alis\u00e9es, ne peuvent pas \u00eatre annul\u00e9es ou modifi\u00e9es. Les nouvelles transactions sont stock\u00e9es dans de nouveaux blocs ajout\u00e9s.<\/p>\n<p>Ainsi, l'historique complet des transactions peut \u00eatre enregistr\u00e9 de mani\u00e8re immuable dans la blockchain. Par cons\u00e9quent, la blockchain peut \u00eatre utilis\u00e9e, par exemple, pour le stockage s\u00e9curis\u00e9 des op\u00e9rations bancaires, des informations sur les droits d'auteur, l'historique des propri\u00e9taires de biens immobiliers, etc.<\/p>\n<p>La blockchain Ethereum contient ce qu'on appelle les \u00e9tats du syst\u00e8me. Au fur et \u00e0 mesure que les transactions sont ex\u00e9cut\u00e9es, l'\u00e9tat change de l'initial \u00e0 l'actuel. Les transactions sont enregistr\u00e9es dans des blocs.<\/p>\n<h4>Blockchains publiques et priv\u00e9es<\/h4>\n<p>\nIl convient de noter que tout ce qui a \u00e9t\u00e9 dit ne s'applique qu'aux soi-disant r\u00e9seaux blockchain publics, qui ne peuvent \u00eatre contr\u00f4l\u00e9s par aucun individu ou entit\u00e9 juridique, agence gouvernementale ou gouvernement. <br \/>\nLes soi-disant r\u00e9seaux blockchain priv\u00e9s sont enti\u00e8rement contr\u00f4l\u00e9s par leurs cr\u00e9ateurs, et tout y est possible, par exemple, le remplacement complet de tous les blocs de la cha\u00eene.<\/p>\n<h4>Applications pratiques de la blockchain<\/h4>\n<p>\n\u00c0 quoi peut servir la blockchain ?<\/p>\n<p>En r\u00e9sum\u00e9, la blockchain permet d'effectuer des op\u00e9rations (transactions) de mani\u00e8re s\u00e9curis\u00e9e entre des personnes ou des entreprises qui ne se font pas confiance. Les donn\u00e9es enregistr\u00e9es dans la blockchain (transactions, donn\u00e9es personnelles, documents, certificats, contrats, factures, etc.) ne peuvent pas \u00eatre falsifi\u00e9es ou remplac\u00e9es apr\u00e8s enregistrement. Ainsi, des registres distribu\u00e9s fiables de divers types de documents peuvent \u00eatre cr\u00e9\u00e9s sur la base de la blockchain.<\/p>\n<p>Bien s\u00fbr, vous savez que les syst\u00e8mes de cryptomonnaie sont bas\u00e9s sur des blockchains, destin\u00e9s \u00e0 remplacer l'argent liquide traditionnel. L'argent liquide est \u00e9galement connu sous le nom d'argent fiduciaire (Fiat Money).<br \/>\nLa blockchain garantit le stockage et l'immuabilit\u00e9 des transactions enregistr\u00e9es dans des blocs, c'est pourquoi elle peut \u00eatre utilis\u00e9e pour cr\u00e9er des syst\u00e8mes de cryptomonnaie. Elle contient toute l'historique de la transmission de crypto-fonds entre diff\u00e9rents utilisateurs (comptes), chaque op\u00e9ration \u00e9tant tra\u00e7able.<\/p>\n<p>Bien que les op\u00e9rations au sein des syst\u00e8mes de cryptomonnaie puissent \u00eatre anonymes, le retrait de cryptomonnaie et l'\u00e9change contre de l'argent fiduciaire entra\u00eenent g\u00e9n\u00e9ralement la r\u00e9v\u00e9lation de l'identit\u00e9 du propri\u00e9taire de l'actif cryptographique. <\/p>\n<p>Les soi-disant contrats intelligents, qui sont des logiciels fonctionnant sur le r\u00e9seau Ethereum, permettent d'automatiser le processus de conclusion des affaires et le contr\u00f4le de leur ex\u00e9cution. C'est particuli\u00e8rement efficace si le paiement de l'affaire est effectu\u00e9 en cryptomonnaie Ether.<\/p>\n<p>La blockchain Ethereum et les contrats intelligents Ethereum, \u00e9crits en langage de programmation Solidity, peuvent \u00eatre utilis\u00e9s, par exemple, dans les domaines suivants :<\/p>\n<ul>\n<li>alternative \u00e0 la certification notariale des documents ;<\/li>\n<li>stockage du registre des biens immobiliers et des informations sur les op\u00e9rations concernant ces biens ;<\/li>\n<li>stockage d'informations sur les droits d'auteur pour des \u0153uvres de propri\u00e9t\u00e9 intellectuelle (livres, images, \u0153uvres musicales, etc.) ;<\/li>\n<li>cr\u00e9ation de syst\u00e8mes de vote ind\u00e9pendant ;<\/li>\n<li>secteur financier et bancaire ;<\/li>\n<li>logistique \u00e0 l'\u00e9chelle internationale, suivi du d\u00e9placement des marchandises ;<\/li>\n<li>stockage de donn\u00e9es personnelles en tant qu'analogue au syst\u00e8me d'identification ;<\/li>\n<li>transactions s\u00e9curis\u00e9es dans le domaine commercial ;<\/li>\n<li>stockage des r\u00e9sultats des examens m\u00e9dicaux, ainsi que de l'historique des proc\u00e9dures prescrites<\/li>\n<\/ul>\n<p><\/p>\n<h4>Probl\u00e8mes li\u00e9s \u00e0 la blockchain<\/h4>\n<p>\nMais, bien s\u00fbr, tout n'est pas si simple qu'il pourrait sembler ! <\/p>\n<p>Il existe des probl\u00e8mes de v\u00e9rification des donn\u00e9es avant leur ajout \u00e0 la blockchain (par exemple, ne sont-elles pas falsifi\u00e9es ?), des probl\u00e8mes de s\u00e9curit\u00e9 des logiciels syst\u00e8me et applicatifs utilis\u00e9s pour travailler avec la blockchain, des probl\u00e8mes li\u00e9s \u00e0 la possibilit\u00e9 d'utiliser des m\u00e9thodes d'ing\u00e9nierie sociale pour acc\u00e9der aux portefeuilles de cryptomonnaie, etc.<\/p>\n<p>Encore une fois, s'il ne s'agit pas d'une blockchain publique dont les n\u0153uds sont dispers\u00e9s dans le monde entier, mais d'une blockchain priv\u00e9e appartenant \u00e0 une personne ou \u00e0 une organisation, alors le niveau de confiance ici ne sera pas sup\u00e9rieur \u00e0 celui de la personne ou de l'organisation en question.<\/p>\n<p>Il convient \u00e9galement de consid\u00e9rer que les donn\u00e9es enregistr\u00e9es dans la blockchain deviennent accessibles \u00e0 tous. En ce sens, la blockchain (surtout publique) n'est pas adapt\u00e9e au stockage d'informations confidentielles. Cependant, le fait que les informations sur la blockchain ne peuvent pas \u00eatre modifi\u00e9es peut aider \u00e0 pr\u00e9venir ou \u00e0 enqu\u00eater sur divers types de fraudes.<\/p>\n<p>Les applications d\u00e9centralis\u00e9es d'Ethereum seront pratiques si elles sont pay\u00e9es en cryptomonnaie. Plus il y a de personnes poss\u00e9dant des cryptomonnaies ou pr\u00eates \u00e0 en acheter, plus les applications DApp et les contrats intelligents gagneront en popularit\u00e9.<\/p>\n<p>Parmi les probl\u00e8mes g\u00e9n\u00e9raux de la blockchain qui compliquent son application pratique, on peut mentionner la vitesse limit\u00e9e d'ajout de nouveaux blocs et le co\u00fbt relativement \u00e9lev\u00e9 des transactions. Mais les technologies dans ce domaine \u00e9voluent rapidement, et il est \u00e0 esp\u00e9rer que les probl\u00e8mes techniques seront r\u00e9solus avec le temps.<\/p>\n<p>Un autre probl\u00e8me est que les contrats intelligents de la blockchain Ethereum fonctionnent dans un environnement isol\u00e9 de machines virtuelles et n'ont pas acc\u00e8s aux donn\u00e9es du monde r\u00e9el. En particulier, le programme d'un contrat intelligent ne peut pas lui-m\u00eame lire les donn\u00e9es depuis des sites ou des dispositifs physiques (capteurs, contacts, etc.), ni transmettre des donn\u00e9es \u00e0 des dispositifs externes. Ce probl\u00e8me et les moyens de le r\u00e9soudre seront abord\u00e9s lors de la le\u00e7on consacr\u00e9e aux soi-disant Oracles \u2014 des interm\u00e9diaires d'information pour les contrats intelligents.<\/p>\n<p>Il existe \u00e9galement des restrictions l\u00e9gislatives. Dans certains pays, par exemple, il est interdit d'utiliser la cryptomonnaie comme moyen de paiement, mais il est possible de la poss\u00e9der en tant qu'actif num\u00e9rique, semblable \u00e0 des valeurs mobili\u00e8res. Ces actifs peuvent \u00eatre achet\u00e9s et vendus sur une bourse. Quoi qu'il en soit, lors de la cr\u00e9ation d'un projet li\u00e9 aux cryptomonnaies, il est essentiel de se familiariser avec la l\u00e9gislation du pays sous la juridiction duquel votre projet tombe.<\/p>\n<h3>Comment la cha\u00eene de blocs est-elle form\u00e9e ?<\/h3>\n<p>\nComme nous l'avons d\u00e9j\u00e0 mentionn\u00e9, la blockchain est simplement une cha\u00eene de blocs de donn\u00e9es. D'abord, le premier bloc de cette cha\u00eene est form\u00e9, puis le deuxi\u00e8me lui est ajout\u00e9, et ainsi de suite. Les donn\u00e9es des transactions sont suppos\u00e9es \u00eatre stock\u00e9es dans les blocs et ajout\u00e9es au dernier bloc.<\/p>\n<p>Sur la figure 1.1, nous avons montr\u00e9 le cas le plus simple de s\u00e9quence de blocs, o\u00f9 le premier bloc r\u00e9f\u00e9rence le suivant. <\/p>\n<p><img decoding=\"async\" alt=\"Livre \u00abCr\u00e9er des contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figure 1.1. S\u00e9quence simple de blocs<\/i><\/p>\n<p>Dans ce cas, cependant, il est tr\u00e8s facile de falsifier le contenu de n'importe quel bloc de la cha\u00eene, car les blocs ne contiennent aucune information pour prot\u00e9ger contre les modifications. \u00c9tant donn\u00e9 que la blockchain est destin\u00e9e \u00e0 des utilisateurs et entreprises n'ayant pas confiance entre eux, on peut conclure que cette m\u00e9thode de stockage des donn\u00e9es n'est pas adapt\u00e9e \u00e0 la blockchain.<\/p>\n<p>S'attaquons \u00e0 la protection des blocs contre la falsification. Dans un premier temps, nous allons essayer de prot\u00e9ger chaque bloc avec une somme de contr\u00f4le (figure 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Livre \u00abCr\u00e9er des contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figure 1.2. Ajout d'une protection des donn\u00e9es des blocs par une somme de contr\u00f4le<\/i><\/p>\n<p>Maintenant, un attaquant ne peut pas simplement modifier un bloc, car celui-ci contient la somme de contr\u00f4le des donn\u00e9es du bloc. La v\u00e9rification de la somme de contr\u00f4le montrera que les donn\u00e9es ont \u00e9t\u00e9 modifi\u00e9es.<\/p>\n<p>Pour calculer la somme de contr\u00f4le, l'une des fonctions de hachage peut \u00eatre utilis\u00e9e, telle que MD-5, SHA-1, SHA-256, etc. Les fonctions de hachage calculent une certaine valeur (par exemple, sous la forme d'une cha\u00eene de caract\u00e8res de longueur constante) \u00e0 la suite d'op\u00e9rations irr\u00e9versibles sur le bloc de donn\u00e9es. Les op\u00e9rations d\u00e9pendent du type de fonction de hachage. <\/p>\n<p>M\u00eame une petite modification du contenu du bloc de donn\u00e9es entra\u00eenera \u00e9galement un changement de la valeur de la fonction de hachage. En analysant la valeur de la fonction de hachage, il est impossible de reconstruire le bloc de donn\u00e9es pour lequel elle a \u00e9t\u00e9 calcul\u00e9e.<\/p>\n<p>Une telle protection sera-t-elle suffisante ? Malheureusement, non.<\/p>\n<p>Dans ce sch\u00e9ma, la somme de contr\u00f4le (fonction de hachage) prot\u00e8ge uniquement des blocs individuels, mais pas toute la cha\u00eene de blocs. En connaissant l'algorithme de calcul de la fonction de hachage, un attaquant peut facilement remplacer le contenu d'un bloc. Rien ne l'emp\u00eache de supprimer des blocs de la cha\u00eene ou d'en ajouter de nouveaux.<\/p>\n<p>Pour prot\u00e9ger toute la cha\u00eene dans son ensemble, on peut stocker dans chaque bloc, en plus des donn\u00e9es, le hachage des donn\u00e9es du bloc pr\u00e9c\u00e9dent (figure 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Livre \u00abCr\u00e9er des contrats intelligents Solidity pour la blockchain Ethereum. Guide pratique\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figure 1.3. Ajout dans le bloc de donn\u00e9es du hachage du bloc pr\u00e9c\u00e9dent<\/i><\/p>\n<p>Dans ce sch\u00e9ma, pour modifier un bloc, il est n\u00e9cessaire de recalculer les fonctions de hachage de tous les blocs suivants. On pourrait se demander o\u00f9 est le probl\u00e8me ?<\/p>\n<p>Dans les blockchains r\u00e9elles, des difficult\u00e9s artificielles ont \u00e9t\u00e9 ajout\u00e9es pour l'ajout de nouveaux blocs \u2014 des algorithmes n\u00e9cessitant beaucoup de ressources de calcul sont utilis\u00e9s. \u00c9tant donn\u00e9 que pour apporter des modifications \u00e0 un bloc, il faut recalculer non seulement ce bloc mais tous les suivants, cela rend la t\u00e2che extr\u00eamement difficile.<\/p>\n<p>Rappelons \u00e9galement que les donn\u00e9es de la blockchain sont stock\u00e9es (dupliqu\u00e9es) sur de nombreux n\u0153uds du r\u00e9seau, c'est-\u00e0-dire qu'un stockage d\u00e9centralis\u00e9 est utilis\u00e9. Cela complique consid\u00e9rablement la falsification d'un bloc, car les modifications doivent \u00eatre apport\u00e9es sur tous les n\u0153uds du r\u00e9seau.<\/p>\n<p>Puisque les blocs conservent des informations sur le bloc pr\u00e9c\u00e9dent, il est possible de v\u00e9rifier le contenu de tous les blocs de la cha\u00eene.<\/p>\n<h3>Blockchain Ethereum<\/h3>\n<p>\nLa blockchain Ethereum est une plateforme sur laquelle il est possible de cr\u00e9er des applications d\u00e9centralis\u00e9es DApp. Contrairement \u00e0 d'autres plateformes, Ethereum permet d'utiliser ce que l'on appelle des contrats intelligents (smart contracts), \u00e9crits dans le langage de programmation Solidity.<\/p>\n<p>Cette plateforme a \u00e9t\u00e9 cr\u00e9\u00e9e en 2013 par Vitalik Buterin, fondateur du magazine Bitcoin Magazine, et lanc\u00e9e en 2015. Tout ce que nous \u00e9tudierons ou ferons dans notre cours a trait \u00e0 la blockchain Ethereum et aux contrats intelligents Solidity.<\/p>\n<h3>Minage ou comment les blocs sont cr\u00e9\u00e9s<\/h3>\n<p>\nLe minage (mining) est un processus assez complexe et gourmand en ressources pour ajouter de nouveaux blocs \u00e0 la cha\u00eene de blockchain, et ne consiste pas simplement \u00e0 \u00ab extraire des cryptomonnaies \u00bb. Le minage assure le bon fonctionnement de la blockchain, car c'est ce processus qui est responsable de l'ajout des transactions \u00e0 la blockchain Ethereum.<\/p>\n<p>Les personnes et organisations qui se chargent d'ajouter des blocs sont appel\u00e9es mineurs (miner).<br \/>\nLe logiciel (SO) fonctionnant sur les n\u0153uds des mineurs tente de trouver pour le dernier bloc le param\u00e8tre de hachage appel\u00e9 Nonce, afin d'obtenir une certaine valeur de fonction de hachage, comme sp\u00e9cifi\u00e9 par le r\u00e9seau. L'algorithme de hachage Ethash, utilis\u00e9 dans Ethereum, permet d'obtenir la valeur du Nonce uniquement par essais successifs. <\/p>\n<p>Si un n\u0153ud de mineur a trouv\u00e9 la bonne valeur de Nonce, cela repr\u00e9sente ce qu'on appelle une preuve de travail (PoW, Proof-of-work). Dans ce cas, si le bloc est ajout\u00e9 au r\u00e9seau Ethereum, le mineur re\u00e7oit une certaine r\u00e9compense en devise du r\u00e9seau \u2014 Ether. Au moment de la r\u00e9daction de notre livre, la r\u00e9compense est de 5 Ether, mais elle sera r\u00e9duite avec le temps.<\/p>\n<p>Ainsi, les mineurs Ethereum assurent le fonctionnement du r\u00e9seau en ajoutant des blocs et re\u00e7oivent pour cela une r\u00e9mun\u00e9ration en cryptomonnaie. Vous trouverez de nombreuses informations sur les mineurs et le minage sur Internet, mais nous allons nous concentrer sur la cr\u00e9ation de contrats Solidity et d'applications d\u00e9centralis\u00e9es DApp sur le r\u00e9seau Ethereum.<\/p>\n<h3>R\u00e9sum\u00e9 de la le\u00e7on<\/h3>\n<p>\nLors de la premi\u00e8re le\u00e7on, vous avez \u00e9t\u00e9 introduit au blockchain et appris que celui-ci est une s\u00e9quence de blocs structur\u00e9e de mani\u00e8re particuli\u00e8re. Le contenu des blocs pr\u00e9c\u00e9demment enregistr\u00e9s ne peut pas \u00eatre modifi\u00e9, car cela n\u00e9cessiterait de recalculer tous les blocs suivants sur de nombreux n\u0153uds du r\u00e9seau, ce qui n\u00e9cessite beaucoup de ressources et de temps.<\/p>\n<p>Le blockchain peut \u00eatre utilis\u00e9 pour conserver les r\u00e9sultats des transactions. Sa principale fonction est d'organiser l'ex\u00e9cution s\u00e9curis\u00e9e des transactions entre des parties (personnes et organisations) entre lesquelles il n'y a pas de confiance. Vous avez appris dans quels domaines sp\u00e9cifiques du commerce et quels secteurs le blockchain Ethereum et les contrats intelligents Solidity peuvent \u00eatre utilis\u00e9s. Cela inclut le secteur bancaire, l'enregistrement des droits de propri\u00e9t\u00e9, des documents, etc.<\/p>\n<p>Vous avez \u00e9galement appris que l'utilisation du blockchain peut entra\u00eener divers probl\u00e8mes. Il s'agit de probl\u00e8mes de v\u00e9rification de l'information ajout\u00e9e au blockchain, de la vitesse de traitement du blockchain, du co\u00fbt des transactions, de la probl\u00e9matique de l'\u00e9change de donn\u00e9es entre les contrats intelligents et le monde r\u00e9el, ainsi que des attaques potentielles des malfaiteurs destin\u00e9es \u00e0 d\u00e9rober des fonds en cryptomonnaie des comptes utilisateurs.<\/p>\n<p>Nous avons \u00e9galement bri\u00e8vement \u00e9voqu\u00e9 le minage en tant que processus d'ajout de nouveaux blocs au blockchain. Le minage est n\u00e9cessaire pour effectuer des transactions. Ceux qui s'occupent du minage assurent le bon fonctionnement du blockchain et re\u00e7oivent pour cela une r\u00e9compense en cryptomonnaie.<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 2. Pr\u00e9paration de l'environnement de travail sous Ubuntu et Debian<\/b>Choix du syst\u00e8me d'exploitation<br \/>\nInstallation des utilitaires n\u00e9cessaires<br \/>\nInstallation de Geth et Swarm sous Ubuntu<br \/>\nInstallation de Geth et Swarm sous Debian<br \/>\nPr\u00e9paration pr\u00e9alable<br \/>\nT\u00e9l\u00e9chargement du distributeur Go<br \/>\nConfiguration des variables d'environnement<br \/>\nV\u00e9rification de la version Go<br \/>\nInstallation de Geth et Swarm<br \/>\nCr\u00e9ation d'une blockchain priv\u00e9e<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCr\u00e9ation d'un r\u00e9pertoire de travail<br \/>\nCr\u00e9ation d'un compte<br \/>\nD\u00e9marrage de l'initialisation du n\u0153ud<br \/>\nOptions de d\u00e9marrage du n\u0153ud<br \/>\nConnexion \u00e0 notre n\u0153ud<br \/>\nGestion du minage et v\u00e9rification du solde<br \/>\nFin de la console Geth<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 3. Pr\u00e9paration de l'environnement de travail sur Raspberry Pi 3<\/b>Pr\u00e9paration de Raspberry Pi 3 pour le travail<br \/>\nInstallation de Raspbian<br \/>\nInstallation des mises \u00e0 jour<br \/>\nActivation de l'acc\u00e8s SSH<br \/>\nConfiguration d'une adresse IP statique<br \/>\nInstallation des utilitaires n\u00e9cessaires<br \/>\nInstallation de Go<br \/>\nT\u00e9l\u00e9chargement du distributeur Go<br \/>\nConfiguration des variables d'environnement<br \/>\nV\u00e9rification de la version Go<br \/>\nInstallation de Geth et Swarm<br \/>\nCr\u00e9ation d'une blockchain priv\u00e9e<br \/>\nV\u00e9rification du compte et du solde<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 4. Comptes et transfert de fonds entre comptes<\/b>Affichage et ajout de comptes<br \/>\nAffichage de la liste des comptes<br \/>\nAjout d'un compte<br \/>\nOptions de la commande geth account<br \/>\nMots de passe des comptes<br \/>\nCryptomonnaie dans Ethereum<br \/>\nUnit\u00e9s mon\u00e9taires Ethereum<br \/>\nD\u00e9termination du solde actuel de nos comptes<br \/>\nTransfert de fonds d'un compte \u00e0 un autre<br \/>\nM\u00e9thode eth.sendTransaction<br \/>\nAffichage de l'\u00e9tat de la transaction<br \/>\nRe\u00e7u de la transaction<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 5. Publication du premier contrat<\/b>Contrats intelligents dans Ethereum<br \/>\nEx\u00e9cution d'un contrat intelligent<br \/>\nMachine virtuelle Ethereum<br \/>\nEnvironnement de d\u00e9veloppement int\u00e9gr\u00e9 Remix Solidity IDE<br \/>\nD\u00e9marrer la compilation<br \/>\nAppel des fonctions du contrat<br \/>\nPublication du contrat dans un r\u00e9seau priv\u00e9<br \/>\nObtenir la d\u00e9finition de l'ABI et le code binaire du contrat<br \/>\nPublication du contrat<br \/>\nV\u00e9rification de l'\u00e9tat de la transaction de publication du contrat<br \/>\nAppel des fonctions du contrat<br \/>\nCompilateur de paquet solc<br \/>\nInstallation de solc sur Ubuntu<br \/>\nInstallation de solc sur Debian<br \/>\nCompilation du contrat HelloSol<br \/>\nPublication du contrat<br \/>\nInstallation de solc sur Raspbian<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">\u0423\u0440\u043e\u043a 6. \u0421\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0438 Node.js<\/b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js<br \/>\nInstallation sur Ubuntu<br \/>\nInstallation sur Debian<br \/>\nInstallation et d\u00e9marrage de Ganache-cli<br \/>\nInstallation de Web3<br \/>\nInstallation de solc<br \/>\nInstallation de Node.js sur Raspbian<br \/>\nScript pour obtenir la liste des comptes dans la console<br \/>\nScript pour publier un contrat intelligent<br \/>\nD\u00e9marrage et r\u00e9cup\u00e9ration des param\u00e8tres<br \/>\nR\u00e9cup\u00e9ration des param\u00e8tres de d\u00e9marrage<br \/>\nCompilation du contrat<br \/>\nD\u00e9bloquer le compte<br \/>\nChargement de l'ABI et du code binaire du contrat<br \/>\nEstimation du nombre de gaz n\u00e9cessaire<br \/>\nCr\u00e9ation d'un objet et d\u00e9marrage de la publication du contrat<br \/>\nD\u00e9marrage du script de publication du contrat<br \/>\nAppel des fonctions du contrat intelligent<br \/>\nEst-il possible de mettre \u00e0 jour un contrat intelligent publi\u00e9<br \/>\nTravailler avec Web3 version 1.0.x<br \/>\nObtenir la liste des comptes<br \/>\nPublication du contrat<br \/>\nAppel des fonctions du contrat<br \/>\nTransfert de fonds d'un compte \u00e0 un autre<br \/>\nTransfert de fonds vers le compte du contrat<br \/>\nMise \u00e0 jour du contrat intelligent HelloSol<br \/>\nCr\u00e9ation d'un script pour afficher le solde du compte<br \/>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getBalance \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 call_contract_get_promise.js<br \/>\nApprovisionnement du contrat intelligent<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 7. Introduction \u00e0 Truffle<\/b>Installation de Truffle<br \/>\nCr\u00e9ation du projet HelloSol<br \/>\nCr\u00e9ation du r\u00e9pertoire et des fichiers du projet<br \/>\nCatalogue des contrats<br \/>\nCatalogue des migrations<br \/>\nCatalogue de test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompilation du contrat HelloSol<br \/>\nLancement de la publication du contrat<br \/>\nAppel des fonctions du contrat HelloSol dans l'invitation Truffle<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 HelloSol \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 JavaScript \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Node.js<br \/>\nInstallation du module truffle-contract<br \/>\nAppel des fonctions du contrat getValue et getString<br \/>\nAppel des fonctions du contrat setValue et setString<br \/>\nModification du contrat et nouvelle publication<br \/>\nTravailler avec Web3 version 1.0.x<br \/>\nApporter des modifications au contrat intelligent HelloSol<br \/>\nScripts pour appeler les m\u00e9thodes du contrat<br \/>\nTests dans Truffle<br \/>\nTest sur Solidity<br \/>\nTest sur JavaScript<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 8. Types de donn\u00e9es Solidity<\/b>Contrat pour l'\u00e9tude des types de donn\u00e9es<br \/>\nTypes de donn\u00e9es bool\u00e9ens<br \/>\nEntiers non sign\u00e9s et entiers sign\u00e9s<br \/>\nNombres \u00e0 virgule fixe<br \/>\nAdresse<br \/>\nVariables de types complexes<br \/>\nTableaux de taille fixe<br \/>\nTableaux dynamiques<br \/>\n\u00c9num\u00e9ration<br \/>\nStructures<br \/>\nDictionnaires mapping<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 9. Migration des contrats dans un r\u00e9seau priv\u00e9 et dans le r\u00e9seau Rinkeby<\/b>Publication du contrat depuis Truffle dans un r\u00e9seau priv\u00e9 Geth<br \/>\nPr\u00e9paration d'un n\u0153ud de r\u00e9seau priv\u00e9<br \/>\nPr\u00e9paration du contrat pour fonctionner<br \/>\nCompilation et migration du contrat dans le r\u00e9seau Truffle<br \/>\nLancement de la migration dans le r\u00e9seau local geth<br \/>\nExtraction des artefacts Truffle<br \/>\nPublication du contrat depuis Truffle dans le r\u00e9seau de test Rinkeby<br \/>\nPr\u00e9paration d'un n\u0153ud Geth pour travailler avec Rinkeby<br \/>\nSynchronisation du n\u0153ud<br \/>\nAjout de comptes<br \/>\nAlimentation d'un compte Rinkeby avec de l'Ether<br \/>\nLancement de la migration du contrat dans le r\u00e9seau Rinkeby<br \/>\nConsultation des informations sur le contrat dans le r\u00e9seau Rinkeby<br \/>\nConsole Truffle pour le r\u00e9seau Rinkeby<br \/>\nUne mani\u00e8re plus simple d'appeler les fonctions du contrat<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Node.js<br \/>\nTransfert de fonds entre comptes dans la console Truffle pour Rinkeby<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 10. Stockage d\u00e9centralis\u00e9 des donn\u00e9es Ethereum Swarm<\/b>Comment fonctionne Ethereum Swarm<br \/>\nInstallation et lancement de Swarm<br \/>\nOp\u00e9rations avec des fichiers et des r\u00e9pertoires<br \/>\nT\u00e9l\u00e9chargement d'un fichier dans Ethereum Swarm<br \/>\nLecture d'un fichier depuis Ethereum Swarm<br \/>\nConsultation du manifeste du fichier t\u00e9l\u00e9charg\u00e9<br \/>\nT\u00e9l\u00e9chargement de r\u00e9pertoires avec des sous-r\u00e9pertoires<br \/>\nLecture d'un fichier depuis le r\u00e9pertoire t\u00e9l\u00e9charg\u00e9<br \/>\nUtilisation d'une passerelle publique Swarm<br \/>\n\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a Swarm \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Node.js<br \/>\nModule Perl Net::Ethereum::Swarm<br \/>\nInstallation du module Net::Ethereum::Swarm<br \/>\n\u00c9criture et lecture de donn\u00e9es<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 11. Cadre Web3.py pour travailler avec Ethereum en Python<\/b>Installation de Web3.py<br \/>\nMise \u00e0 jour et installation des packages n\u00e9cessaires<br \/>\nInstallation du module easysolc<br \/>\nPublication du contrat avec Web3.py<br \/>\nCompilation du contrat<br \/>\nConnexion au fournisseur<br \/>\nEx\u00e9cution de la publication du contrat<br \/>\nSauvegarde de l'adresse du contrat et abi dans un fichier<br \/>\nD\u00e9marrage du script de publication du contrat<br \/>\nAppel des m\u00e9thodes du contrat<br \/>\nLecture de l'adresse et abi du contrat \u00e0 partir du fichier JSON<br \/>\nConnexion au fournisseur<br \/>\nCr\u00e9ation d'un objet contrat<br \/>\nAppel des m\u00e9thodes du contrat<br \/>\nTruffle et Web3.py<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p><b class=\"spoiler_title\">Le\u00e7on 12. Oracles<\/b>Un contrat intelligent peut-il avoir confiance dans les donn\u00e9es du monde ext\u00e9rieur?<br \/>\nLes oracles en tant qu'interm\u00e9diaires d'information de la blockchain<br \/>\nSource de donn\u00e9es<br \/>\nCode pour repr\u00e9senter les donn\u00e9es de la source<br \/>\nOracle pour enregistrer le taux de change dans la blockchain<br \/>\nContrat USDRateOracle<br \/>\nMise \u00e0 jour du taux de change dans le smart contract<br \/>\nUtilisation d'un fournisseur Web Socket<br \/>\nAttente d'un \u00e9v\u00e9nement RateUpdate<br \/>\nTraitement de l'\u00e9v\u00e9nement RateUpdate<br \/>\nInitiation de la mise \u00e0 jour des donn\u00e9es dans le smart contract<br \/>\nR\u00e9sum\u00e9 de la le\u00e7on<\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467347\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043a\u043d\u0438\u0433\u043e\u0439 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb, \u0438 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0430 \u043a\u043d\u0438\u0433\u0430 \u0438\u0437\u0434\u0430\u043d\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u041b\u0438\u0442\u0440\u0435\u0441\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043e\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 Solidity \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 DApp \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 \u0443\u0440\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Livre \u00ab Cr\u00e9er des smart contracts Solidity pour la blockchain Ethereum. Guide pratique \u00bb | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:27:25+00:00","article:modified_time":"2019-10-31T19:27:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39018","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 00:24:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:58:39","updated":"2026-01-24 00:24:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}