Prise en main de Truffle : l’outil indispensable pour communiquer avec une blockchain

0

Même si il est possible d’utiliser l’IDE Remix pour développer et déployer ses smart contracts , il est parfois compliquer de gérer les mises à jours et déploiement en ligne. Le framework Truffle vient alors aider car il facilite le déploiement des contrats :

  • Il permet d’écrire des scripts de migration et de déploiement en ligne des contrats, tout en choisissant un réseau sur lequel le déploiement a lieu (développement ou production).
  • Il permet grâce à une console de compiler ses contrats, mais aussi d’exécuter les fonctions qu’on a prévues, c’est donc un indispensable outil pour communiquer avec sa blockchain.
  • Il permet en plus une utilisation avancée : test unitaire, installation de package, outil de débogage…

Utilisation de Ganache en tant que blockchain de développement.

Pour ce tutorial, nous allons installer Ganache, qui permet en 1 click d’avoir un environnement de développement complet avec une blockchain Ethereum et une dizaine de comptes configuré avec 100 ethers chacun, tout cela avec un minage automatique. Ganache nous permet donc de nous concentrer sur le développement de notre application et pas sur la partie configuration/réseau.

L’énorme avantage de Ganache est aussi de pouvoir visualiser l’état de nos contrats, ce qui est stocké dedans notamment.

Vous pouvez télécharger Ganache pour Windows ici : https://www.trufflesuite.com/ganache

C’est également disponible sur Mac et Linux à cette adresse : https://github.com/trufflesuite/ganache/releases

Une fois téléchargé, il suffit de l’exécuter et vous devriez voir apparaitre l’écran suivant :

ganache capture écran

Vous voyez ainsi la liste des adresses, la ‘balance’ associée, et les différents blocks et transactions dans les onglets du haut.

Installation d’un IDE local

Puisque nous n’utiliserons plus Remix comme dans les précédents tutoriaux, je vous conseille d’installer Atom avec le plugin language-solidity pour avoir les codes couleurs adéquates.

Installation de Truffle

Maintenant que nous avons une blockchain fonctionnelle localement et un IDE qui prend en charge Solidity, il faut installer le framework Truffle avec la commande suivante (il faut au préalable avec installé NodeJS v8.9.4 ou supérieur) :

npm install -g truffle


Ensuite, depuis un répertoire vide, nous allons initialiser un projet truffle avec la commande suivante :

truffle init

Ce qui aura pour effet de créer dans votre répertoire les dossiers suivants :

contracts/: Le répertoire avec le code des contrats
migrations/: Le répertoire pour stocker les migrations de nos contrats (et notamment l’ordre)
test/: le répertoire pour les tests unitaire
truffle-config.js: Le fichier Truffle pour les différents réseaux

Configuration du réseau de développement

La première chose à faire est maintenant de configurer truffle-config.js pour lui indiquer la blockchain de Ganache, il faut donc ajouter le network development dans la partie « networks »


      development: {
        host: "127.0.0.1",
        port: 7545,
        network_id: "*"
      },

Un smart contract à déployer

Nous allons repartir du code du contrat du tutorial pour les structs en Solidity, pour rappel il était ainsi : (vous pouvez aussi le télécharger sur Github)

pragma solidity >=0.4.22 <0.9.0;

contract GestionProduit {

    constructor() public {
    }

    struct Produit {
        uint idProduit;
        string nomProduit;
        uint Prix;
    }

    Produit[] private produits;

    function ajouterProduit (uint _id, string memory _nomProduit, uint _prix) public {
        Produit memory nouveauProduit = Produit(_id, _nomProduit, _prix);
        produits.push(nouveauProduit);
    }

    function totalProduit() public view returns (uint)  {
        return produits.length;
    }

    function voirUnProduit(uint i) public view returns (string memory)  {
        return produits[i].nomProduit;
    }

}

Le fichier .sol avec ce code est à placer dans le répertoire ‘contracts’

Compiler le contrat avant déploiement

Pour compiler le contrat et qu’il puisse être interprété par la Blockchain, il faut utiliser la commande suivante :

truffle compile

Cette commande va créer le répertoire Builds qui va contenir les fichiers json qui seront interprétés par l’EVM (la machine virtuelle ethereum). Vous ne devez surtout pas toucher à ces fichiers qui sont gérés automatiquement par Truffle.

Mise en ligne du contrat

Avant de mettre en ligne le contrat, il est nécessaire de configurer une migration dans le répertoire correspondant.

Si vous allez dans migration vous trouverez le fichier 1_initial_migration.js qu’il n’est pas utile de modifier pour l’instant, il est généré automatiquement par Truffle

Nous allons par contre créer un fichier 2_deploy_contracts.js avec le code suivant pour indiquer à Truffle de migrer notre contrat sur la blockchain

const GestionProduit = artifacts.require("GestionProduit");

module.exports = function(deployer) {
  deployer.deploy(GestionProduit);
};

Pour déployer notre contrat sur la blockchain, il suffit maintenant de lancer la commande suivante :

truffle migrate

Vous devriez alors avoir l’écran suivant (sur Windows Powershell) :

Dans Ganache, vous pouvez aussi constater dans les onglets « Blocks » et « Transactions » que tout s’est bien passé.

Utilisation de la console Truffle

Maintenant que le contrat est opérationnel sur la bockchain, nous pouvons commencer à l’utiliser, ce que Truffle nous permet aussi.
Commenez par vous connecter à la console :

truffle console

Vous pouvez alors entrer vos commandes à la suite de truffle(development)>

Nous allons commencer par initialiser dans une variable une instance de notre contrat déployé précédemment avec la commande .deployed de Truffle :

var instance = GestionProduit.deployed().then(a => { instance = a; }) 

Pas d’inquiétude si vous voyez s’afficher « undefined » dans la console, il vous suffit de taper « instance » pour constater que vous avez bien récupéré l’instance de votre contrat, qui affichera alors TruffleContract {
constructor: [Function: TruffleContract] {
…….. si tout s’est bien passé.

Nous allons ajouter un produit comme déjà fait depuis Remix dans les précédents tutoriaux, mais cette fois avec la console Truffle, il faut taper par exemple la commande suivante :

instance.ajouterProduit(1,"lunette",45) 

La transaction sera alors minée automatiquement par Ganache et s’afficher aussi bien dans la console que dans l’onglet transactions de Ganache.

On peut aussi tester la fonction pour vérifier que notre produit s’est bien enregistré :

instance.voirUnProduit(0)

Si tout s’est bien passé vous devriez voir s’afficher lunette indiquant que tout s’est bien passé.

C’est terminé !

Vous avez désormais un environnement de développement complet avec une blockchain locale sans configuration particulière, et avec laquelle vous pouvez communiquer grâce à Truffle, aussi bien pour déployer des smarts contracts que les utiliser.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.