Fermer

juin 8, 2018

Présentation de Truffle, une suite de contrats intelligents Blockchain –


Dans les débuts du développement smart contract (vers 2016), le chemin à parcourir était d'écrire des contrats intelligents dans votre éditeur de texte favori et de les déployer en appelant directement geth et solc .

La façon de rendre ce processus un peu plus convivial était de faire des scripts bash qui pouvaient d'abord compiler puis déployer le contrat … ce qui était mieux, mais encore joli rudimentaire – le problème avec les scripts, bien sûr, étant le manque de standardisation et l'expérience sous-optimale de bash scripting.

La réponse est venue en deux saveurs distinctes – Truffle and Embark – Truffle étant le plus populaire des deux (et celui dont nous parlerons dans cet article)

Pour comprendre le raisonnement derrière Truffle, nous devons comprendre les problèmes qu'il essaie de résoudre, qui sont détaillés ci-dessous. [19659003] Compilation
Multiple les versions du compilateur solc devraient être supportées en même temps, avec une indication claire de celle utilisée

Environnements
Les contrats doivent avoir des environnements de développement, d'intégration et de production, chacun avec leur propre adresse de nœud Ethereum, comptes, etc.

Tests
Les contrats doivent être testables. L'importance du logiciel de test ne peut pas être surestimée. Pour les contrats intelligents, l'importance est infiniment plus importante. Alors. Tester. Votre. Contrats

Configuration
Vos environnements de développement, d'intégration et de production doivent être encapsulés dans un fichier de configuration afin qu'ils puissent être validés et réutilisés par leurs coéquipiers

Web3js Integration
Web3 .js est un framework JavaScript pour faciliter la communication avec les contrats intelligents des applications Web. Truffle va encore plus loin et active l'interface Web3.js depuis la console Truffle, de sorte que vous pouvez appeler des fonctions web en mode développement, en dehors du navigateur.

Installation de Truffle

La meilleure façon d'installer Truffle est en utilisant le gestionnaire de paquets de nœud (npm). Après avoir installé NPM sur votre ordinateur, installez Truffle en ouvrant le terminal et en tapant ceci:

 npm install -g truffle

Note: le préfixe sudo peut être requis sur les machines Linux.

Mise en route

Une fois Truffle installé, le meilleur moyen d'avoir une idée de son fonctionnement est de configurer Projet de démonstration de truffes appelé "MetaCoin".

Ouvrez l'application terminal (littéralement Terminal sur Linux et macOS, ou Git Bash, Powershell, Cygwin ou similaire sous Windows) et positionnez-vous dans le dossier où vous souhaitez initialiser le projet. 19659003] Ensuite, exécutez ce qui suit:

 mkdir MetaCoin
cd MetaCoin
truffe unbox metacoin

Vous devriez voir une sortie comme celle-ci:

 Téléchargement ...
Déballage...
Mise en place ...
Unbox réussi. Doux!

Commandes

  Compiler les contrats: compiler les truffes
  Migrer les contrats: la truffe migre
  Contrats d'essai: test à la truffe

Si vous obtenez des erreurs, il se peut que vous utilisiez une version différente de Truffle. La version pour laquelle ce tutoriel a été écrit est Truffle v4.1.5 mais les instructions doivent rester pertinentes pour au moins quelques versions

La ​​structure du projet Truffle

Votre dossier Truffle devrait avoir l'air un peu un peu comme ceci:

.
├── contrats
│ ├── ConvertLib.sol
Met ├── MetaCoin.sol
Mig └── Migrations.sol
Mig── migrations
│ ├── 1_initial_migration.js
│ └── 2_deploy_contracts.js
├── test
Test ├── TestMetacoin.sol
Met └── metacoin.js
├── truffle-config.js
└── truffle.js

Dossier Contrats

Voici le dossier dans lequel vous allez placer tous vos contrats intelligents.

Dans votre dossier des contrats, il y a aussi un fichier Migrations.sol qui est un fichier spécial – mais plus à ce sujet dans la section suivante.

Lorsque Truffle compile le projet, il passe par le dossier contracts et compile tous les fichiers compatibles. Pour l'instant, les fichiers les plus utilisés sont les fichiers Solidity avec l'extension .sol .

A l'avenir, cela pourrait se transformer en Vyper ou SolidityX (tous deux meilleurs pour le développement de contrats intelligents, mais moins utilisés pour le moment)

Dossier Migrations

Qu'est-ce qu'une migration de truffes? Essentiellement, c'est un script qui définit comment les contrats seront déployés dans la blockchain

Pourquoi avons-nous besoin de migrations?

Alors que votre projet devient de plus en plus complexe, la complexité de vos déploiements devient Prenons un exemple:

  • Vous avez des contrats intelligents Un Deux et Trois
  • Le contrat intelligent Trois contient une référence au contrat intelligent One et requiert l'adresse du contrat Two dans son constructeur

Cet exemple exige que les contrats ne soient pas seulement déployés séquentiellement, mais aussi qu'ils se croisent mutuellement. Les migrations, en un mot, nous permettent d'automatiser ce processus.

Voici un bref aperçu de la façon dont vous feriez ceci:

 var One = artefacts.require ("One");
var Deux = artefacts.require ("Deux");
var Trois = artefacts.require ("Trois");

module.exports = function (déployer) {
  deployer.deploy (One) .then (function () {
    deployer.deploy (Two) .then (function () {
      deployer.deploy (Three, One.address);
    })
  });
}

Au-delà, les migrations vous permettent de faire beaucoup d'autres choses sympas comme:

  • définir le gaz max pour les déploiements
  • changer le depuis adresse des déploiements
  • déployer les bibliothèques
  • appel de fonctions de contrat arbitraires

Migration initiale

Comme vous l'avez remarqué dans votre projet MetaCoin vous avez un fichier appelé 1_initial_migration.js . Ce que ce fichier fait est de déployer le contrat Migrations.sol dans la blockchain.

Habituellement, vous n'avez rien à faire dans ce fichier une fois qu'il est initialisé, donc nous ne nous concentrerons pas trop sur ce

Dossier de test

Comme je l'ai dit: VOUS! DOIT! TESTER! INTELLIGENT! CONTRATS Pas de mais, pas de si, pas de maybes: vous devez le faire.

Mais si vous le faites, il serait cool d'avoir un outil automatique pour vous permettre de le faire de façon transparente.

Truffle permet cela en ayant un cadre de test intégré. Il vous permet d'écrire des tests dans Solidity ou JavaScript.

Les exemples du projet MetaCoin parlent d'eux-mêmes, donc nous n'allons pas trop en parler.

La clé est, si vous écrivez Solidity tests, vous importez vos contrats dans les tests avec la directive d'importation Solidity :

 import "../contracts/MetaCoin.sol";

Et si vous les écrivez en JavaScript, vous les importez avec la fonction d'assistance artifacts.require () :

 var MetaCoin = artefacts.require ("./ MetaCoin.sol") ;

Fichier de configuration

Le fichier de configuration est appelé truffle.js ou truffle-config.js . Dans la plupart des cas, il s'appellera truffle.js mais la solution de repli est là à cause de règles de préséance de commandes bizarres sur les machines Windows.

Sachez juste que, quand vous voyez truffle.js ou truffle-config.js ils sont la même chose, fondamentalement. (De plus, n'utilisez pas CMD sur Windows, PowerShell est nettement meilleur.)

Le fichier de configuration définit quelques éléments, détaillés ci-dessous.

Environnements
Développer, TestNet, Live (Production). Vous pouvez définir l'adresse de la note Geth, le network_id le gaz maximum pour le déploiement, le prix du gaz que vous êtes prêt à payer.

Structure du projet
Vous pouvez changer les fichiers sont construits et localisés, mais ce n'est pas nécessaire ni même recommandé

Version et paramètres du compilateur
Correction de la version solc et définition du -O

Gestion de paquets

  • Truffle peut fonctionner avec EthPM (le gestionnaire de paquets Ethereum), mais il est encore très incertain.
  • Vous pouvez configurer des dépendances pour EthPM à utiliser dans votre projet Truffle

Description du projet
Qui a réalisé le projet, quel est le nom du projet, les adresses de contact, etc.

Licence
Utiliser GPLv3 . [19659080] Exécution du code

Pour compiler vos contrats, exécutez ceci:

 compilation de truffes

Pour lancer des migrations, vous pouvez simplement utiliser ceci:

 truffle migrate

Ou vous pouvez le faire en spécifiant un environnement:

 truffle migrate --network live

Pour tester vos contrats, lancez ceci:

 test à la truffe

Ou vous pouvez exécuter un test spécifique en exécutant ce test:

 truffle test ./path/to/FileTest.sol

Conclusion

Truffle est un outil très pratique qui facilite le développement de cet écosystème flambant neuf. Il vise à amener les normes et les pratiques communes du reste du monde du développement dans un petit coin d'expérimentation blockchain.

Ce tutoriel rapide a démontré et expliqué les bases, mais pour vraiment comprendre Truffle, vous aurez besoin de plonger plus profondément et expérimenter sur des projets concrets. C'est ce que nous allons explorer dans le hub de blockchain de SitePoint . Nous étudierons un peu plus en détail les tests de contrats intelligents et les migrations de truffes