17/09/2019 6 Minutes read Blockchain 

Comment détecter plus facilement les fake news grâce à la blockchain ? Une expérience menée par ekino

À l’ère des réseaux sociaux, les informations non vérifiées se diffusent toujours plus vite, car il n’est pas possible pour chaque internaute de les inspecter. La conséquence : 75 % des Français considèrent avoir été influencé par des Fake News sur les réseaux sociaux (Source : Science 2018). Fort de ce constat et de la difficulté de lutter contre ce phénomène, ekino a développé la solution ekiCheck. L’objectif de ce PoC est la réalisation d’un mini trustware, logiciel basé sur des algorithmes de confiance et cela sans tiers de confiance, via un bot Slack et des smart contracts utilisant la blockchain Ethereum. La principale user story de ce PoC est qu’en tant qu’utilisateur de l’outil collaboratif Slack, je souhaitais connaître la véracité d’un lien web via un système de vote et de réputation pondérée, et ainsi m’assurer de ne pas être exposé à une fake news.

Cet article fait suite à celui sur l’industrialisation de smart contracts avec truffle.

Notre projet

Pour répondre à ce besoin, nous avons écrit un scénario Gherkin (Gherkin est le langage utilisé pour décrire les tests fonctionnels), qui est le suivant :

Étant donné que je suis connecté sur Slack.

Et que je vois un lien : je me demande s’il est valide ou non.

Et que le lien n’a pas encore été traité par ekiCheck.

Quand j’ajoute /ekicheck http://ekino.com au message contenant le lien.

Alors je devrais recevoir une réponse d’ekiCheck me disant que ce lien n’est pas encore validé.

Et ekiCheck devrait demander des votes.

Qu’est-ce qu’un smart contract ?

“Un smart contract est un ensemble de promesses, spécifiées sous forme numérique, y compris les protocoles dans lesquels les parties exécutent ces promesses.” C’est la définition établie par Nick Szabo, scientifique et cryptographe en 1996.

Un smart contract est l’équivalent informatique d’un contrat traditionnel/papier. Il exécute automatiquement des conditions et règles définies au préalable et inscrites dans une blockchain. C’est une nouvelle façon de formaliser les relations entre institutions. Ils sont appelés “smart” car ils sont beaucoup plus fonctionnels que les anciens contrats inanimés sur papier. Cependant, à la différence d’un contrat traditionnel, dont l’exécution est régie par un cadre juridique, celle du smart contract ne nécessite l’intervention d’aucun tiers de confiance et est, en tant que protocole informatique, régie par le code informatique. Un smart contract est un logiciel qui ne dispose en tant que tel d’aucune autorité juridique. Le smart contract s’appuie sur la technologie blockchain pour sécuriser et rendre infalsifiables les termes et les conditions de son exécution.

Sous le capot

Pour mener à bien ce projet, nous avons dans un premier temps réalisé un état de l’art des différentes blockchains. A l’origine, nous avons pensé à une architecture orientée Bitcoin avec Rootstock. Après avoir benchmarké les avantages et inconvénients d’une architecture basée sur Rootstock et Bitcoin nous nous sommes orientés sur une architecture reposant sur la blockchain Ethereum avec le langage Solidity : une architecture plus mature, avec davantage d’outils, qui répondait mieux à notre besoin de déployer rapidement nos smarts contracts afin de valider notre idée.

ethereum blockchain

Nous avons décidé d’utiliser le langage Solidity pour notre PoC et de faire évoluer notre infrastructure en s’articulant autour d’un environnement local, comme celui ci-dessous :

ekicheck schema

Pour avoir un cadre de travail plus organisé, nous avons utilisé le framework Truffle qui permet de développer et de déployer des applications décentralisées. Il intègre l’Ethereum Virtual Machine (EVM), la machine virtuelle d’ethereum, et gère différentes chaînes (testrpc, testnet, livenet..). Il comporte aussi un tableau de bord pour connaître l’état des contrats.

framework-truffle

Le premier outil que nous avons utilisé pour les tests et le développement en local est un client Ethereum basé sur Node.js, le testrpc. Afin de confronter le smart contrat et son comportement à une chaîne de blocs, nous nous sommes servis du Testnet. Cette chaîne de blocs alternative est utilisée pour les tests, et permet entre autres d’ajuster le coût de déploiement du contrat (gaz price) avant de déployer sur le réseau principal. Les Ethers testnet sont séparés et distincts des Ethers réels, ils ne sont jamais censés avoir de valeur. Finalement, lors des développements, nous avons estimé le coût de migration et de déploiement des smarts contracts. Lorsque les smart contracts sont stables et que nous connaissons le coût du déploiement, nous pouvons alors déployer notre smart contract sur la chaîne de blocs Ethereum avec le livenet.

Le déploiement des smart contracts

Étape 1 : Ecrire les smart contracts

Pour répondre à notre besoin, nous avons rédigé un smart contract “Votes” qui comporte la liste des identifiants slacks définis avec, pour chaque utilisateur, son score de confiance, la liste des liens internet et leur véracité (valide ou invalide).

Étape 2 : Compiler les smart contracts avec solc

Nous avons ensuite compilé notre smart contract et récupéré un fichier JSON contenant un ABI, dont nous nous sommes servi dans notre app Node.js. Une Application Binary Interface (interface binaire-programme), décrit une interface entre l’application et le smart contract.

Étape 3 : Migration sur le Testnet avec ropsten

  1. Synchronisation d’un noeud ropsten

Dans un premier temps nous avons dû télécharger un noeud de testnet ropsten qui fait environ 20Go, avec les commandes :

carbon5 (1)

Cette commande permet de créer un noeud Ethereum ropsten en local. C’est à travers ce noeud que l’on pourra interroger en lecture et écriture le testnet ropsten pour déployer nos smart contracts ou bien réaliser des transactions. Premièrement, nous utilisons l’option testnet, cette option précise que l’on souhaite le réseau de test de preuve du travail préconfiguré ropsten. De plus, l’option fast permet d’effectuer la synchronisation plus rapidement. Et enfin, nous ajoutons l’option bootnodes qui permet de configurer une valeur de démarrage pour les nœuds.

Puis nous ajoutons des peers sur notre console Geth :

carbon6

Nous avons ensuite, créé un compte sur le testnet Ropsten avec la commande :

carbon7

Enfin, nous avons vérifié, l’état de synchronisation du noeud testnet avec :

carbon8
carbon
  1. Nous avons envoyé des ETH Testnet de test sur le portefeuille à l’aide d’un faucet ropsten en se connectant sur https://faucet.ropsten.be/ et en saisissant notre adresse ethereum de testnet.
  2. Enfin, nous avons migré les contrats sur le testnet :
carbon2
carbon3
carbon4

Pour aller plus loin avec Infura

Après coup, nous avons décidé de mettre en ligne le PoC en prenant parti d’utiliser une instance amazon AWS EC2. Nous avons rencontré des difficultés de synchronisation avec le testnet : la commande échouait de temps à autre, créant des instabilités. Nous avons donc choisi d’utiliser Infura. Infura est une infrastructure blockchain avec une API et des outils de développement faciles à utiliser qui fournissent un accès sécurisé, fiable et évolutif à Ethereum et IPFS. Cette dernière permet aux développeurs d’applications décentralisées d’accéder aux informations d’Ethereum sans avoir à exécuter un noeud complet et donc de se concentrer sur les fonctionnalités. Ce changement d’infrastructure nous demande d’adapter notre code, notamment sur l’écriture et la signature d’une transaction.

diagramaws

Avant d’opter pour Infura, nous avions créé un compte directement dans le node Ethereum. Avec Infura, nous avons dû utiliser la méthode sendRawTransaction et signer directement la transaction avec la clé privée de notre wallet.

Conclusion

L’utilisation des tableaux de chaîne de caractères avec solidity devient rapidement fastidieux. Par ailleurs, cette technologie est très jeune et manque d’un environnement pour le débogage, ce qui devient très compliqué pour un novice. Cette nouveauté de la technologie nous pose aussi des limites de sécurité au niveau des smart contracts et d’optimisation des coûts. Avec l’instance AWS, nous avons finalement rencontré des instabilités du noeud Ethereum. La solution a donc été d’utiliser Infura.

Bienvenue dans le web 3.0 !

Ressources utiles