Découvrez comment le développement d’une DApp pour la gestion des déclarations minières intègre des contrats intelligents, des technologies blockchain et des processus d’exploitation minière en Ethereum.
Ganache: votre blockchain Ethereum personnelle: découvrez comment Ganache, un composant du pack Truffle Suite, vous permet de créer votre propre blockchain Ethereum avec des comptes préconfigurés en 100 ETH.
Chapitre IV :
IMPLÉMENTATION DE DAPP
Nous allons présenter dans ce chapitre le composant du système et le diagramme de conception de contrats intelligence en y insérant les interfaces de prototype y compris les fonctionnalités et outils voire technologie utilisée pour développer l’application.
Présentation du comportement du système
Analyse et conception du système
La réalisation de notre application décentralisée procède par une succession logique de phases et d’étapes, depuis la spécification des besoins fonctionnels jusqu’à l’implémentation ou la réalisation (écriture et test des programmes).
Cette conception laisse apparaitre les contrats qui entrent en jeu et leurs comportements.
Spécification des besoins fonctionnels
Nous procédons à cette étape par l’identification des acteurs du système et leurs rôles. En outre, il y a lieu de faire une conception des contrats décrivant le fonctionnement du système dans le but de faciliter la réalisation de l’application.
Identification des acteurs et leurs
Un acteur représente une entité qui définit le rôle joué par un utilisateur ou par un système qui interagit avec le système modélisé. Après la phase d’analyse, nous avons recensé les acteurs qui interagissent avec le système.
Les comptes de propriété externe (EOA) : les entreprises minières et l’Etat Congolais sont considérées comme des comptes de propriété externe. Ces comptes sont contrôlés par des clés privées. Ces acteurs peuvent créer des déclarations minières.
Les comptes des contrats (CA) : les contrats ont chacun un compte caractérisé par une adresse. A chaque fois que le contrat reçoit un message, son code s’exécute, permettant aux CA de lire et d’écrire dans la mémoire interne et d’envoyer des messages à d’autres contrats ou de créer des contrats en retour. Nous avons deux principaux contrats pour assurer les rôles des comptes externes.
Les mineurs : ils valident les transactions et les blocs ; les transactions sont regroupées dans un bloc et une preuve de travail sera fournie pour ce bloc. Après le processus de minage, le mineur reçoit une récompense.
Tableau 2. Les comptes pour DAPP Mining
Une fois les entités identifiées et les comptes établis, la conception des contrats intelligents sera développée. Les principales composantes du contrat intelligent, telles que décrites précédemment, sont les fonctions, les processus, les variables d’état, les événements et les transactions.
La conception de notre DAPP fait l’objectif de la conception des contrats intelligents qui décrivent le fonctionnement de l’application.
Diagramme de conception des contrats intelligents
Notre DApp est constitué de deux grands contrats pour stocker les déclarations minières. Chaque détenteur minier a un livret qui le répertoriera tout au long de la validité de son contrat.
Ainsi le contrat « LivretDéclarationsMinier » est caractérisé par un mappage de déclarations et un nombre incrémental à chaque enregistrement d’une nouvelle déclaration. Une déclaration ou livret contient les informations (RCCM, IdNAT, désignation, type_produit_exploiter, …) de l’opérateur et les identifiants de l’agent de l’Etat.
Le contrat « OperateurMinier » permet d’enregistrer les opérateurs miniers. Il est caractérisé par un mot clé, qui sert de mot passe d’authentification des opérateurs miniers, et d’un tableau d’opérateurs.
Chaque opérateur possède une adresse de compte unique (cette adresse est associée à l’enregistrement des déclarations) et ses informations d’identification. Les données stockées par ces contrats permettent de construire le livret minier d’un opérateur sous forme de fichier PDF imprimable.
Ce fichier est utilisé pour vérifier (par comparaison) la conformité d’un livret issu du mécanisme sécurisé basé sur la blockchain pour une gestion transparente et optimale des chaînes logistiques minières.
Diagramme d’interaction des contrats intelligents
Les EOA communiquent avec les contrats en appelant leurs fonctions. En ce sens, le contrat « OpérateurMinier » dispose de ces fonctions ayant une visibilité publique.
addOperateurMinier() : cette fonction intervient lorsqu’on veut ajouter un opérateur minier dans le registre minier. Elle prend en entrée les références du dit Opérateur Minier et l’adresse du compte. L’exécution complète de la transaction déclenche alors l’évènement addOperateurMineirEvent(). Une telle transaction coûte environ 0.004023 ETH.
getOperateurMinier() : cette fonction permet de retourner un opérateur minier (sous forme JSON) à partir de son identifiant(ID) ou IdNAT. Elle n’est pas coûteuse car ne modifie pas l’état de la blockchain.
Le contrat « LivretDéclarationsMinier » possède les fonctions suivantes :
AddDeclarationMinier() : permet d’enregistrer une nouvelle déclarations dans le livret minier comprend des informations de l’opérateur minier, de type de minerais exploités, quantité exploitée, agent validateur, … l’exécution complète de cette transaction active l’événement addDeclarationMinierEvent.
getDeclarationMinier() : permet de retourner une déclaration minière bien spécifiée (sous forme JSON) à partir de son identifiant(ID) ou de son hache. Elle n’est pas couteuse car ne modifie pas l’état de la blockchain.
addSemestr() : cette fonction permet d’ajouter un semestre dans le contrat. Elle prend en entrée la date de début, celle de la fin et la description de cette période. Pour enregistrer les semestres, elle est appelée sous forme de transaction qui déclenche l’évènement AddSemestreEvent.
Figure 15 : Diagramme de conception des contrats
Propriétaire de contrat
Transaction : Création de
Transaction :
Création de contrat
Propriétaire de contrat
Figure 16 : Diagramme d’interaction avec les contrats
Découpage de réseau
La configuration des nœuds Ethereum constitue l’étape initiale dans la conception des contrats intelligents. La définition des services métiers prend place. Enfin, les processus entre les utilisateurs sont décrits. Ceci laisse apparaitre les trois composants essentiels pour le fonctionnement d’une application décentralisée.
Les nœuds Etherum constituent les comptes interagissent avec les contrats. On a quatre types de nœuds :
- Le compte de contrat
- Le compte d’Opérateur Minier
- Le compte d’Agent Etat
- Et le compte de mineur
Les services et fonctions métiers offerts par le contrat intelligent sont les suivants :
- Créer des transactions : par exemple l’importation, sous forme de transaction des déclarations depuis la base de données du système central des déclarations des opérateurs miniers ;
- Créer des contrats intelligents : le chargement des Livrets de déclarations nécessite l’initialisation du contrat « LivretDeclaractionsMinieres » ;
- Envoyer des messages : qui est matérialisé par la communication entre deux contrats ; en recourant par l’appel de fonction ;
- Le minier de l’Ether : réservé au mineur, cette fonctionnalité permet aux mineurs conquérir la validation des blocs pour recevoir la récompense (en Ether). Ce qui assure l’existence de réseau.
L’ensemble de ces services permettent de déclencher des processus de la plateforme Etherum. Nous en avons quatre principaux que sont :
Validation : un processus permettant de valider un bloc.
Découverte du réseau : ce processus est nécesaire pour qu’un nouveau nœud rejoigne le réseau P2P de la Blockchain.
Exploitation minière : ce processus décrit le processus minier et la diffusion d’un nouveau bloc sur le réseau.
Figure 17 : Composants proposés pour le cas d’utilisation du système des déclarations Minières
Architecture du système
Les applications décentralisées (ou dApps) est une interface qui connecte un utilisateur à un fournisseur de service au travers d’un réseau peer to peer fonctionnant sur la Blockchain. Une application décentralisée (DApp) est composée d’applications front-end et back-end. Les utilisateurs interagissent avec la DAPP à partir la front-end qui, elle-même communique avec la partie back-end de l’application.
Ce dernier entre en contact avec les nœuds d’Ethereum (la machine virtuelle) grâce à l’interface RPC. Cette architecture décrit ci-bas montre les composants logiciels de notre système décentralisé pour la sécurisation des déclarations Minières (SGDMC).
Mais le fonctionnement de ce système est étroitement lié au comportement du SGDMC (Système de gestion de déclarations Minière en RDC). En effet, pour fournir les entrées des fonctions des contrats, l’application décentralisée dans sa couche métier doit interroger la base de données du système centralisé. Ainsi nous avons décidé de l’importation des données soit faite semestriellement.
Une telle décision est prise dans le but d’optimiser le nombre de transactions afin de réduire les coûts. En ce sens, il y a belle et bien un compromis entre la sécurité et cout : « il n’existe pas sécurité gratuit ».
Figure 18 : Architecture de l’application
Implémentation proprement dite
Lors de la phase de conception, nous avons défini des fonctions et processus qui sont traduits en code définissant les contrats intelligents mise en place.
L’implémentation du système est en ce sens le codage des spécifications techniques de la conception. Ainsi nous présentons dans cette partie les codes clés pour le fonctionnement du système ; les détails seront donnés en annexes. Mais avant cela, voyons les technologies et langages de programmations utilisés pour le codage.
Outils et technologies de développement utilisés
Notre DApp des livrets de déclarations minières
Pour parvenir à sa réalisation, nous avons fait intervenir les technologies nécessaires pouvant nous permettre de réaliser notre contrat intelligent. Nous avons fait intervenir implicitement l’API JavaScript Web3, l’API JSON RPC et le langage de programmation Solidity. En effet, l’API Web3Js, un SDK JavaScript est utilisé pour interagir avec un nœud Ethereum.
L’API JSON RPC quant à lui sert d’interface entre les utilisateurs et les nœuds ; elle est utilisée par le Web3. Cette interface permet d’accéder aux données stockées par les Smarts Contracts et de réagir à des événements survenus dans la Blockchain.
L’interface JSON RPC qui est une interface RPC qui utilise JSON comme structure de données pour modéliser les données à envoyer à la blockchain. Solidity est le langage de programmation pour coder les contrats intelligent.
En outre, pour son développement, nous avons eu à effectuer le choix entre plusieurs outils et technologies que nous vous présentons les plus en actualité et présentant des solutions suivant les besoins exprimés. Pour la réalisation de notre DAPP SGDMC, nous avons utilisé les outils et/ou langages ci-dessous.
Remix-IDE : un remplacement de Mix-IDE, remix est un environnement de développement de contrats intelligents en Solidity. Il intègre un compilateur, un environnement d’exécution, de débogage et de test.
Embark Framework : permet de développer et de déployer facilement des applications décentralisées (DApps). Il intègre actuellement la machine virtuelle Ethereum (EVM), des stockages décentralisés (IPFS) et des plateformes de communication décentralisées (Whisper et Orbit).
Truffle Framework : est un environnement de développement intégré, une infrastructure de test et un portefeuille d’actifs de classe mondiale pour les blockchains utilisant la machine virtuelle Ethereum (EVM), dans le but de faciliter la vie des développeurs.
Il génère le squelette d’une application Ethereum et d’un smart contract ainsi qu’un front-end. Truffle permet le déploiement des Dapps sur le client qui s’exécute sur la machine (la blockchain locale). Cette blockchain locale peut être un client Ethereum ou celle lancée par GANACHE (qui fait partie de la suite Truffle).
Ganache permet d’avoir une blockchain Ethereum sur sa machine pour l’exécution des tests, des commandes et l’inspection des états de la blockchain. Par ailleurs, Truffle framework assure les Test RPC en exécutant en local la Dapp.
Ces packages NPM offrent un outillage classique pour les développeurs : l’automatisation de la compilation Solidity, l’intégration aux outils de tests unitaires, l’automatisation du déploiement et la communication avec la blockchain. Ces nombreuses caractéristiques ont motivé notre choix pour ce Framework.
Par ailleurs, la front-end du système est développé grâce au Framework Laravel (version 5.1.0). Pour assurer la communication entre la partie front-end et la base de données des E-livrets de déclaration minière, nous avons utilisé PHP/SQL et JAVASCRIPT à travers le Framework Laravel.
Configurations requises
La Figure 24 montre la structure de notre projet :
Le dossier build contient les fichiers Json des contrats qui sont générés lors du déploiement (avec la commande « Truffle migrate »).
Le dossier contracts comme son nom l’indique contient les contrats intelligents.
Src est le dossier principal du projet ; il contient les classes, les services, les components repartis en modules. Les classes servent de facilitateurs de la manipulation de données reçues soit de la base de données soit de la blockchain par les services.
Figure 19 : Structure du projet
Le composant du pack Truffle Suite, Ganache permet de faire tourner notre blockchain Ethereum personnelle. Il génère les comptes avec un montant initial de 100 ETH. Le fichier truffle-config.js assure la liaison entre ganache et notre application. La Figure 25 montre quelques interfaces du fonctionnement de ganache.