Il y a un peu plus d’un an à présent, nous avons développé une solution d’horodatage basée sur une blockchain. Elle permet de prouver l’antériorité d’un contenu (une idée ou une création par exemple) via l’utilisation d’une blockchain publique Ethereum directement depuis son navigateur. Donc sans organe central de contrôle. Il s’agit d’un cas d’usage simple mais parfaitement applicable aux besoins métiers des applications de nos clients : sceller un contenu et ses métadonnées de manière sûre et pérenne. Le code source est publié sous la licence Apache 2.

Pour faciliter la lecture, nous vous proposons une série de cinq articles qui présentent trois points de vue complémentaires de l’outil :

  1. Point de vue conceptuel : 🎨 Comprendre les notions de base d’une blockchain publique
  2. Point de vue utilisateur : 🕺 Interagir avec l’application décentralisée
  3. Point de vue développeur : 🏭 Configurer son environnement de développement
  4. Point de vue développeur : 🤝 Comprendre le développement du smart contract
  5. Point de vue développeur : 💻 Comprendre le développement du client

Dans ce troisième article nous proposons une mise en route sur le projet de développement. A la fin de celui-ci, vous aurez normalement récupéré les sources, installé les outils nécessaires à la compilation, créé une blockchain de tests dans laquelle vous aurez déployé un smart contract et démarré l’interface utilisateur locale. En quelque sorte, il s’agit d’être en ordre de marche !

# Articulation du projet opensource

Les sources du projet sont sous licence opensource Apache 2 dans le projet blckchn-ant-prover :

On retrouve deux sous-projets :

  • smart-contracts : code source des smart contracts qui seront compilĂ©s et intĂ©grĂ©s dans la blockchain
  • front : code source de l’interface utilisateur qui sera compilĂ©e et exĂ©cutĂ©e cĂ´tĂ© client, dans un navigateur

# DĂ©marrage rapide

La page principale README.md décrit comment démarrer rapidement le développement avec une blockchain locale puis comment déployer les smart contracts dans une blockchain.

Avant toute chose, nous récupérons les sources. Pour des raisons de simplicité, nous travaillerons dans le répertoire créé par la première commande :

# CrĂ©ation d’une blockchain de dĂ©veloppements

Ganache est un outil de la suite Truffle qui permet de créer très rapidement une blockchain Ethereum locale afin d’effectuer des tests et inspecter l’état de celle-ci : l’état des blocs, les transactions, les smart contracts, les événement, etc.

Nous commençons par mettre en place notre blockchain locale.

L’installation reste simple : on télécharge le binaire qu’on exécute et on se laisse guider. Par exemple sous Linux :

L’application se lance :

Commençons par créer un nouvel espace de travail (workspace) avec le bouton “New Workspace”. Parmi les options définies par défaut, celles-ci nous intéressent particulièrement :

Pour être en mesure d’inspecter les futurs contrats déployés, nous référençons la configuration truffle du projet (fichier ~/projets/atolcd/blckchn-ant-prover/smart-contracts/truffle-config.js ) dans le workspace.

La blockchain portera l’identifiant 5777 et sera accessible en local sur le port 7545.

Notons également le mnemonic qui pourrait être utile ultérieurement : muffin robot prevent globe plunge today foster shrug pave giraffe okay virtual . Il s’agit d’une passphrase permettant d’accéder à la configuration de la blockchain qu’il convient de conserver à l’abri des regards indiscrets.

Dès qu’on sauvegarde le workspace, la blockchain est disponible. Chacun des 10 comptes créés dispose de 100 ETH.

Pour la suite de l’article, nous récupérons la clé privée du premier compte utilisateur créé. Ce compte servira à la fois au déploiement des smart contracts et à la manipulation des données depuis l’application décentralisée.

On peut rĂ©cupĂ©rer l’adresse et la clĂ© privĂ©e d’un compte en cliquant sur l’icĂ´ne “clé” :

# DĂ©ploiement des smart contracts

Pour le déploiement, nous utilisons l’outil truffle. Celui s’installe avec npm :

Puis on se place dans le sous-projet smart-contracts et on lance la migration via truffle :

Deux smart contracts sont compilés et déployés dans la blockchain “development”. Exemple de sortie :

Le premier contrat Migrations sert à déployer le second AntProver.

On retrouve 4 transactions dans Ganache. Deux créations de contrats et deux appels :

On constate que 4 blocs ont été minés à la suite du bloc initial :

En effet, pour des raisons de simplification, chaque bloc dans Ganache ne contient qu’une transaction.

Les deux contrats sont bien visibles :

Pour le moment, le contrat AntProver n’a aucune donnée hormis les structures initialisées. Nous verrons ces dernières plus tard :

# Configuration de Metamask

En temps normal, on crée son compte Metamask pour interagir avec une blockchain. Le processus est inversé avec Ganache : on importe un ou plusieurs des comptes créés dans la blockchain de développements.

Par exemple on importe le premier compte Ganache adressé par 0x7E9532e2CF6bc267bcb21180DAED88D7Ff2Cdc1B dont la clé privée est fb582632b2b01046cd68d5cad00105e9035c640bb8974fdde3a1c530d9cacb28 :

Puis on sélectionne le réseau “development” http://localhost:7545, en cohérence avec le port défini lors de la configuration du workspace Ganache.

On constate que Metamask s’est bien connecté à la blockchain puisqu’il affiche le solde du compte (les 100 ETH initiaux imputés des frais liés au déploiement des deux smart contracts) :

# Exécution de l’interface utilisateur

On se place dans le sous-projet front et on démarre serveur de développements via npm :

Après quelques secondes, l’application est accessible à l’adresse http://localhost:8080 :

En particulier, le bloc “Statut de connexion” confirme que le réseau sélectionné est le bon (5777) ainsi que contrat utilisé (0x5950D4482B9f535C1D6555aD9D91c329c897DF50) :

On peut dès à présent référencer un fichier et vérifier l’empreinte enregistrée.

# Pour continuer

Dans cet article, nous avons déroulé les étapes permettant d’avoir un environnement de développement opérationnel en mettant en place une blockchain de tests, en y déployant un smart contract et en exécutant l’interface utilisateur.

Les deux articles suivants feront un focus sur le code source du projet smart-contract puis du projet front utilisateur.