Pensez Blockchain

La référence en chaîne de blocs au Québec

 
Capture d’écran 2020-03-28 à 12.48.47.png
 

Le réseau Ethereum a vu le jour en 2015 et est désormais la deuxième chaîne de blocs en termes d’utilisateurs et de capitalisation de marché. Contrairement au réseau Bitcoin,  qui a pour but d’échanger de la valeur de manière décentralisée, le réseau Ethereum a une vision plus large. C’est un ordinateur décentralisé sur lequel n’importe quel programme peut être conçu. Ces programmes, plus communément appelés contrats intelligents, vont être enregistrés dans un bloc puis répliqués sur les différents nœuds du réseau Ethereum. Ils pourront ainsi être exécutés de manière décentralisée. 

Le langage utilisé par Ethereum le rend complet au sens de Turing. Pour simplifier, cela veut dire qu’il est possible de tout programmer. Cependant, cela pose un problème. En effet, il est possible de faire un programme qui ne s’arrête pas et, la seule manière de savoir si un programme s’arrête ou non est de le lancer. Lorsque cela se produit sur un ordinateur standard, il est possible (dans le pire des cas) de redémarrer l’ordinateur pour arrêter le programme qui tourne en boucle. Cela n’est cependant pas possible sur un ordinateur décentralisé comme Ethereum. 

C’est pourquoi la plateforme Ethereum a introduit le concept d’essence (“ gas ”). Lorsqu’un programme est appelé ou déployé, la personne effectuant cette action envoie du “ gas ” avec sa transaction. Chaque action, chaque calcul effectué pour exécuter le contrat intelligent, consomme du “ gas ”. Si tout le “ gas ” est consommé et que le calcul du contrat n’est pas terminé, le programme est alors arrêté (et chacune des actions du programme déjà accomplies est annulée). Le “ gas ” lui est cependant conservé par les mineurs possédant les nœuds du réseau qui font les calculs. S’il y a suffisamment de “ gas ”, le surplus sera renvoyé à l’utilisateur qui a actionné le contrat.

À noter que Bitcoin n’est pas complet au sens de Turing et ce, volontairement pour ne pas avoir ce problème.

Comment obtenir du “ gas ” ? Le “ gas ” s’achète avec de l’ether au moment de la transaction ou de l’exécution du contrat (cela se fait automatiquement par les portefeuilles). Le “ gas ” n’est pas une cryptomonnaie. Cependant, son cours varie en fonction du nombre de transactions ou de contrats en attente d’exécution sur la chaîne de blocs. 

Sur Ethereum, il existe deux types de comptes : les utilisateurs et les contrats intelligents. 

Les comptes utilisateurs (en anglais EOA pour " Externally Owned Account ") sont créés par et pour des humains. Ils possèdent une clé privée ce qui leur permet d’initier des transactions vers d’autres utilisateurs ou vers des contrats intelligents. Dans la partie « message » d’une transaction, un utilisateur peut mettre le nom d’une fonction et de ses paramètres lorsqu’il appelle un contrat. 

Les contrats intelligents (“ smart contract ”) sont créés et déployés par des comptes utilisateurs (un contrat n’appartient pas à l’utilisateur qui l’a déployé sauf si cela est spécifié lors de sa programmation). Les contrats intelligents ne possèdent pas de clé privée et ne peuvent donc pas spontanément s’exécuter ou effectuer spontanément une transaction vers un autre contrat intelligent. Il faut absolument qu’un compte utilisateur effectue la première transaction pour exécuter un contrat. Ce contrat pourrait alors à son tour exécuter un contrat qui pourrait en appeler un autre et ainsi de suite. 

Contrats Intelligents

Tel qu’expliqué précédemment, un contrat intelligent est simplement un programme informatique déployé dans un bloc du réseau Ethereum. Ce dernier possède des fonctions qui peuvent être appelées par un compte utilisateur ou un contrat (lui-même inclus). Pour un exemple simple de contrat, vous pouvez regarder le tutoriel : Réaliser votre premier contrat intelligent!.

Un contrat intelligent est visible par tout le monde et peut être exécuté par tout le monde. Il est possible de donner des droits privilégiés à un compte utilisateur (cela doit être spécifié dans le contrat au moment de sa création). 

Il faut faire très attention à chacune des lignes de code qui sont ajoutées, car une petite faille dans la sécurité d’un contrat pourrait le compromettre totalement. Un utilisateur malveillant pourrait le pirater, subtiliser l’ether qui le contient ou le détruire. Étant donné qu’il est déployé sur la chaîne de blocs, il ne sera pas possible de revenir en arrière et de récupérer les fonds.

Token ERC20 et ERC721

Certaines applications sur la chaîne de blocs Ethereum fonctionnent avec des jetons (ou “ token ”). Il existe plusieurs standards de contrats intelligents pour créer ces jetons. Les plus connus sont ERC20 et ERC721. ERC signifie “ Ethereum Request for Comment ”, ces standards sont issus de commentaires sur la plateforme de programmation GitHub (le numéro est celui de la demande de commentaire).

Les jetons ERC20 sont des jetons fongibles. Ainsi, deux jetons du même contrat sont identiques et ne peuvent pas être différenciés. 

Par exemple, dans le top 10 des cryptomonnaies (en termes de capitalisation de marché), Tether, Binance Coin, Eos ou Tezos sont ou ont été des jetons ERC20 (à l’heure actuelle, seul Tether est toujours un ERC20). Beaucoup d’entreprises dans le domaine de la chaîne de blocs créent un jeton ERC20 pour faire un ICO puis créent leur propre chaîne de blocs qui est séparée de la plateforme Ethereum et transforment les ERC20 en cryptomonnaie adaptée à leur plateforme.

À l’inverse, les jetons ERC721 ne sont pas fongibles. Ils peuvent être différenciés et peuvent être par exemple utilisés pour tokenizer, des cartes de baseball ou des oeuvres d’art.

Pour simplifier, un contrat intelligent ERC20 est une base de données qui associe des jetons à des adresses de comptes Ethereum (adresse d’utilisateur ou de contrat).

Un contrat ERC721 est une base de données qui associe un numéro de série (correspondant à une oeuvre d’art par exemple) à une adresse Ethereum. 

Ainsi, un compte utilisateur ne possède pas directement les jetons (ERC20 ou ERC721), mais il peut appeler une fonction du contrat du jeton pour effectuer une transaction. Un contrat intelligent, quant à lui, doit avoir été conçu pour pouvoir envoyer des jetons sans quoi les jetons qui lui sont transférés seront perdus.

Oracle

Pour certains contrats intelligents, il est parfois nécessaire d’obtenir des informations situées en dehors de la chaîne de blocs. Par exemple, un contrat qui permettrait de faire des paris sportifs a besoin d’accéder aux résultats des matchs.

Pour résoudre ce problème, des oracles sont utilisés. Un oracle est un contrat intelligent qui peut dialoguer avec une application externe à la chaîne de blocs. En reprenant l’exemple précédent, un oracle pourrait se connecter à un ou plusieurs site(s) de paris en ligne pour obtenir les résultats d’un match.

Cela peut bien sûr poser des problèmes de sécurité. Si les données reçues par l’oracle ne sont pas correctes, le contrat intelligent qui l’a appelé sera exécuté avec des résultats erronés. Pour remédier partiellement à ce problème, il existe des protocoles qui permettent de prouver que les données n’ont pas étés compromises, mais l’oracle dépend toujours d’un service centralisé.

Il existe néanmoins des oracles décentralisés qui permettent de mieux pallier les contraintes des oracles standards. Un oracle décentralisé est un contrat intelligent qui va faire appel à plusieurs oracles standards et qui va pondérer leurs réponses en fonction de la confiance qu’il a en eux. Ce type d’oracle est donc à privilégier, car il est beaucoup plus fiable.

Enfin, il existe aussi des oracles de calcul ou de stockage. Comme nous l’avons expliqué précédemment, un contrat intelligent a besoin de “ gas ” pour être exécuté. Plus le calcul sera long ou plus le contrat aura besoin d’espace de stockage, plus le coup en “ gas ” sera élevé. Les oracles de calcul ou de stockage sont des contrats qui font appel à des serveurs externes (et centralisés) pour effectuer un calcul très coûteux en “ gas ” ou pour stocker des données qui prennent beaucoup d’espace. Ces oracles font donc confiance à un service centralisé afin que le coût lié à l’exécution d’un contrat soit plus faible.

Dapp

L’objectif ultime de la plateforme Ethereum est de permettre à ces utilisateurs de créer des Dapps. Les Dapps, pour application décentralisée, (“ decentralized application ” en anglais) sont, comme leur nom l’indique, des applications (ou site web) totalement décentralisées qui fonctionnent sur la plateforme Ethereum.

Le programme du site web (le back-end) sera constitué d’un ou de plusieurs contrats intelligents qui seront stockés et exécutés sur la chaîne de blocs Ethereum.

La partie visible par l’utilisateur (le front-end) ainsi que les données qui prennent plus d’espaces pourront être stockées de manière décentralisée sur Swarm.

Swarm est un réseau P2P (peer-to-peer) décentralisé créé par la Fondation Ethereum. Ce réseau a pour but de stocker des données qui seraient trop volumineuses pour la chaîne de blocs Ethereum.

Il est ensuite possible d’acheter un nom de domaine décentralisé sur Ethereum Name Service (ENS) pour héberger son site web : pensezblockchain.eth par exemple. 

Enfin, il est possible d’utiliser Whisper afin de permettre aux utilisateurs de dialoguer entre eux de manière décentralisée.

Une Dapp a pour objectif d’être totalement décentralisée et donc non censurable et impossible à arrêter.

Ainsi, nous avons présenté le réseau Ethereum qui a pour but d’être un ordinateur dans une chaîne de blocs sur lequel des programmes (plus communément appelés contrats intelligents) peuvent être exécutés de manière décentralisée. Pour ne pas qu’un contrat puisse tourner indéfiniment et ainsi bloquer un noeud du réseau, le concept de “ gas ” a été introduit dans cette chaîne de blocs.

Les contrats intelligents doivent être programmés avec soin, car ils sont visibles par tous et s’ils possèdent une faille, un utilisateur malveillant peut tenter de l’exploiter. 

Certains contrats peuvent être utilisés pour faire des jetons. Il existe différents types de standards, les plus communs étant ERC20 (pour les jetons fongibles) et ERC721 (pour les jetons non fongibles).

Pour obtenir des données en dehors de l’écosystème de la chaîne de blocs, il est possible d’utiliser un oracle. 

Enfin, il existe différents systèmes comme Swarm, Whisper et ENS qui gravitent autour de la chaîne de blocs Ethereum afin de rendre possible la création d’applications totalement décentralisées communément appelées Dapp.