L’apport essentiel d’Ethereum, lorsqu’on la compare aux autres blockchain existantes, se résume dans sa capacité à être programmée à l’aide d’un langage dédié (Solidity). Ce langage est dit « turing-complete », ce qui signifie qu’il permet d’exécuter l’ensemble des fonctions utilisés pour développer une application moderne : c’est un langage de programmation « complet »[1].
La possibilité de programmer simplement des « contrats »…
Cette caractéristique permet d’envisager la programmation d’engagements, simples ou complexes, sur la blockchain Ethereum. Ces engagements sont appelés par les créateurs d’Ethereum « smart contracts ». Ils sont dits « smarts », intelligents, car lorsque les conditions d’exécution de ces engagements sont réunies, ceux-ci s’exécutent automatiquement sur la blockchain, en prenant en compte l’ensemble des conditions et des limitations qui avaient été programmés dans le contrat à l’origine.
L’un des exemples le plus simple d’un « smart contract » est celui d’un contrat de prestation entre deux personnes. La première (A) souhaite rémunérer la seconde (B) pour l’exécution de cette prestation. Cet engagement est formalisé dans la blockchain Ethereum par la création d’un smart-contrat. Lors de la formalisation de ce smart-contract, A met en gage sur la blockchain le montant de la rémunération prévue pour B. Lorsque la prestation est réalisée, l’une des parties exécute le contrat. Celui-ci vérifie automatiquement que la prestation a bien été effectuée. Si tel est le cas, B reçoit la rémunération prévue. Dans le cas contraire, A récupère le montant de son gage.
Mais le langage Solidity permet d’envisager :
- Des engagements entre deux ou plusieurs parties beaucoup plus complexes, à l’image des contrats existants à ce jour : des contrats-cadre, des contrats de distribution, des contrats de royalties, des contrats de société, des pactes d’actionnaire, des gages…
Dans ce contexte, l’intérêt de formaliser le contrat dans la blockchain Ethereum apparaît plus significatif dans le cadre des contrats dont l’exécution peut être source de difficulté : la mise en œuvre d’une caution, les contrats comprenant un droit de préemption d’une partie, etc.
- Des programmes qui vont bien au-delà de simples engagements contractuels. Le site officiel de la Fondation Ethereum comprend plusieurs exemples d’applications simples et pratiques de Solidity, qui ne manquent pas d’ambition :
- La création d’une monnaie (ou actif virtuel) spécifique à un projet, qui peut s’échanger entre les participants au projet et dont la détention est susceptible de permettre l’obtention d’avantages.
- La mise en place d’une plateforme de financement décentralisée pour un projet en particulier.
- La création d’une organisation autonome décentralisée (DAO), dont le principe est décrit succinctement dans l’article qui lui est dédié sur ce site.
La liste ne s’arrête pas là. De nombreuses applications décentralisées sont aujourd’hui développés sur la base de ces « smart-contrats » : Augur, Slock.it, Maker, Digix…
…qui s’exécutent une fois leurs conditions d’exécution remplies…
Comme il l’a été précisé, ces « contrats » (ou programmes) s’exécutent en examinant l’ensemble des conditions d’exécution qui ont été définies à l’avance dans le code. Par exemple, si le code comprend comme condition de s’exécuter après le 1er janvier 2017, il sera impossible de l’exécuter avant cette date.
Le problème se pose alors, naturellement, de la validation de ces conditions d’exécution. Deux cas de figure sont alors envisageables :
- Les conditions d’exécution sont liées à d’autres écritures dans la blockchain ou sont de simples repères temporels. Dans ce cas, la vérification de ces conditions exécution est très facile : le code est défini pour vérifier que ces écritures existent ou que le délai d’exécution est passé, et il s’exécute lorsque c’est le cas.
- Les conditions d’exécution du code sont extérieures à la blockchain (réalisation d’une prestation, survenance d’un événement…). Dans ce cas, l’exécution nécessite le recours à un tiers de confiance, appelé dans le jargon Ethereum un « oracle ». L’oracle est chargé d’entrer dans la blockchain l’information de façon fiable afin que le code puisse s’exécuter correctement. Cet oracle peut être constitué de plusieurs façons :
- Désignation préalable d’un tiers de confiance connu des deux parties ;
- Référence à une base de données considérée comme « de confiance » (par exemple dans le cas d’un paris sportif, possibilité de se référer au résultat enregistré sur le site d’un journal sportif) ;
- Utilisation d’un service d’Oracle décentralisé. Il s’agit d’un service existant sur la blockchain faisant appel à de nombreux participants. Chacun des participants vote pour le résultat qu’il considère comme exact et c’est le consensus entre les participants qui détermine le résultat final envoyé au contrat. Des projets d’oracles décentralisés existent déjà, notamment le projet Oraclize.
…de façon simple, fiable, peu onéreuse et sécurisée.
Une fois les conditions du code validées, il peut s’exécuter comme programmé. Cette exécution est en pratique réalisée en envoyant une transaction spécifique à la blockchain qui provoque l’exécution du smart-contract.
L’exécution du code nécessite un paiement en « gaz », qui constitue le carburant des smart-contracts. Celui-ci est peu onéreux : l’exécution d’un code simple nécessite quelques centimes tout au plus, celle d’un code complexe jusqu’à quelques euros.
Enfin, puisque le code est enregistré et exécuté sur la blockchain, il bénéficie des avantages de celle-ci, à savoir :
- Publicité : les transactions effectuées dans la blockchain sont publiques. Il est possible de vérifier la bonne exécution du code. De plus, n’importe quelle partie qui dispose du code source peut vérifier que le code d’exécution a bien été enregistré de façon conforme.
- Sécurité : l’ensemble de la blockchain fonctionne avec un protocole chiffré puissant qui la rend également très difficile à altérer. Pour effectuer une modification dans la blockchain, il faut réussir une attaque simultanée sur plus de 50 % des participants.
- Immuabilité : les données qui sont enregistrées dans la blockchain y sont a priori enregistrées pour toujours : la blockchain garde l’historique de toutes les modifications qui y ont été apportées depuis l’origine. Le contrat est donc enregistré de façon irrémédiable dans la blockchain.
- Fiabilité : Il est virtuellement impossible d’arrêter simultanément tous les ordinateurs participants à la blockchain. Par conséquent, cette base de données est toujours en ligne et son fonctionnement ne s’arrête jamais.
En synthèse, les « smart-contrats » offrent de nombreuses opportunités. Ils permettent d’exécuter automatiquement des accords préalablement formalisés entre deux parties, sans que l’une des parties ne puisse faire obstacle à son exécution. Ils permettent aussi d’envisager le développement d’applications complexes décentralisées. Ces contrats ou applications s’exécutent de façon sécurisée, publique et fiable, sans qu’il soit possible de les altérer.
Mais la grande force de ces « smart contrats » est aussi leur faiblesse : il est en pratique impossible, sauf à l’avoir prévu dès le départ, de modifier un contrat existant dans la blockchain après qu’il ait été enregistré dans celle-ci. La phase de conception de ces contrats nécessitera donc une particulière attention pour éviter toute déconvenue future…
[1] Théoriquement, il est donc possible de programmer des fonctions très complexes sur la blockchain Ethereum. Un programme comme un traitement de texte pourrait fonctionner exclusivement sur la blockchain. En pratique, les limitations inhérentes à la technologie (c’est-à-dire principalement sa lenteur et son coût d’exécution) rendent cette idée impraticable. Tel n’est d’ailleurs pas son objet, car on voit mal l’intérêt d’exécuter un traitement de texte de façon décentralisée…
[…] est en effet facile. D’ailleurs, comme l’explique François Polrot, dans son article « Smart contract » ou le contrat auto-exécutant, publié sur le site Ethereum France, il s’agit, ni plus ni moins, de programmer simplement […]
[…] (5) Loi 2016-925 du 7-7- 2016 (6) Bitcoin.org, article de Satoshi Nakamoto (7) Ethereum-france.com, article du 20-3-2016 (8) Site internet PledgeMusic (9) Cuepoint, How the Blockchain and VR Can Change the […]
Je ne comprend vraiment pas comment on peut empêcher les malversation. Le but d’un contrat et justement de prévenir une ou l’autre partie qui voudrait frauder.
Si j’envoie un colis pour de l’argent et que le contrat stipule que l’argent me sera donner à la réception du colis. Qu’est-ce qui empêche la personne de dire qu’il n’a jamais reçu le colis ? Le contrat ne sera donc jamais exécuté. Je ne recevrait donc jamais l’argent mais j’ai perdu mon bien. Et lui l’aura reçu et probablement l’argent en retour dû à « l’échec » de l’exécution du contrat.
Et vu qu’il n’y a aucun recours légal puisque c’est décentralisé, je ne pourrais rien y faire. Et ce problème sera rencontré pour absolument tous les échange de biens ou services.
Une start-up vient de lancer des smart contrat pour les testaments. On remplis les conditions et elles s’appliquent automatiquement à la réception d’un avis de décès de l’office compétent. Qu’arrive-t-il si l’office compétente se trompe ? Le contrat est exécuté alors que la personne est encore en vie… Ou pire, il ne sera jamais exécuté et personne ne pourra plus modifier le contrat…
C’est donc encore pire qu’avant comme situation, non ? Aurais-je mal compris ?
Je crois que vous avez bien compris le problème, mais que l’intérêt des smart contracts se situe ailleurs. Le problème dont vous parlez est légitime (sur leboncoin, sur amazon, …) et il est à prendre en compte pour ne pas se retrouver piégé par un smart contract. C’est pour cette raison que le « tiers de confiance » est parfois nécessaire (et il ne semble pas possible d’en désigner un dans le cas que vous décrivez).
En revanche, si le colis est délivré contre signature et que le site web de la poste est utilisé comme un tiers de confiance (qui indique sans erreur possible si le colis a été délivré ou non), alors le smart contract devient possible.
Mais c’est vrai que dans pas mal de cas il faut faire attention pour ne pas risquer de voir la somme d’argent bloquée pour toujours.
[…] : intéressez-vous à la technologie blockchain et le smart contract par exemple, ils devraient révolutionner dans les prochaines décennies nos moyens d’échanges, […]
[…] « Smart contract », où le contrat auto-exécutant […]
Modél de contrats. » Smart-contract «
[…] C’est la première plateforme à avoir permis les smart contracts, les DAPP. Le potentiel des contrats intelligents et des applications décentralisées est […]
[…] Les contrats intelligents ou Smart contracts […]
[…] Selon l’entreprise, l’attaque aurait permis à un cybercriminel de voler des fonds aux utilisateurs avec lesquels l’attaquant s’est engagé dans un smart contract Ethereum. […]
[…] Selon l’entreprise, l’attaque aurait permis à un cybercriminel de voler des fonds aux utilisateurs avec lesquels l’attaquant s’est engagé dans un smart contract Ethereum. […]
[…] ↑ https://www.ethereum-france.com/smart-contract-ou-le-contrat-auto-executant/ %5Barchive%5D […]
[…] : intéressez-vous à la technologie blockchain et le smart contract par exemple, ils devraient révolutionner dans les prochaines décennies nos moyens […]
[…] contrat de token déployé sur Ethereum est un smart-contract comme un autre, contenant simplement un registre désignant les propriétaires de tokens du contrat et gérant […]