Les bons outils pour coder en Solidity
— Nicolas Zozol
- blockchain
- solidity
Mettez en place au plus vite un environnement professionnel pour apprendre à coder sur le web3.
Cet article explique aux développeurs classiques comment installer un environnement local pour coder, tester et déployer sur des blockchains de type Ethereum. Je vous donne quelques bonnes pratiques et des ressources web utiles, pour démarrer votre aventure Web3 confortablement.
TL;DR : regardez cette vidéo Truffle beginners d'EatTheBlocks.
Par où commencer
Vous pouvez démarrer très vite avec Remix IDE. C'est un outil en ligne. J'ai pu déployer mon premier token (RBTA) avec. C'est un shitcoin de plus, mais vous pouvez en acheter pour me laisser un pourboire 😊
Pour déployer le token RBTA, j'ai suivi ce tutoriel d'Ivan on Tech

Vous pouvez aussi apprendre Solidity et web3js avec Cryptozombies. C'est d'ailleurs assez poussé, mais sans créativité : il faut taper exactement la bonne ligne.

Utiliser un IDE local
Remix, c'est amusant une journée, mais vous voulez vos fichiers dans un outillage solide. Vous coderez du Solidity, mais aussi du React ou du Vue pour le web, et vous voulez sans doute garder vos outils préférés.
Fan de JetBrains, j'ai ajouté le plugin Solidity soutenu par JetBrains. Il a apporté quelques bugs, j'ai dû le désinstaller puis le réinstaller. C'est assez inhabituel... mais c'est arrivé.
Utiliser Truffle
Truffle est un framework d'outillage. Vous disposez d'un ensemble d'outils préconfigurés, sans ajouter leur code.
Installez-le avec yarn add truffle. J'éviterais de l'installer globalement, pour maîtriser exactement la version. Dans
ce cas, vous taperez node_modules/.bin/truffle au lieu de truffle tout court ; les pros de npm trouveront des astuces sur le web.
Vous pourrez :
- compiler votre code et créer les contrats :
truffle compile - tester automatiquement vos contrats :
truffle test - déployer les contrats :
truffle developdémarre la chaîne et ouvre une consoletruffle migrate --resetredéploie tous les contrats
L'équipe d'EatTheBlocks produit d'excellents contenus sur le code Solidity. Voici celui sur Truffle pour débutants. Cette vidéo est indispensable !
Utiliser Ganache
Ganache est un outil qui fait tourner une blockchain Ethereum avec plein d'options. Truffle utilise Ganache en coulisses, mais savoir le piloter soi-même est utile. Nous sommes codeurs, nous utiliserons donc la version CLI 😁.
Installez-le avec yarn add ganache-cli. Comme pour Truffle, évitez l'installation globale.
ganache-cli: démarre une toute nouvelle blockchainganache-cli -db "./db-path" -m "bread car ... color": démarre une blockchain persistante avec des comptes définis
Voici la vidéo Ganache d'EatTheBlocks.
Tests et mocks
Tester un contrat Solidity est assez simple. Il y a toutefois un problème majeur. On veut souvent injecter une adresse (celle de l'oracle dans mon cas), et seul le propriétaire du contrat doit pouvoir le faire. Mais pendant qu'on code, on ne connaît pas encore l'adresse du propriétaire.
L'idée est d'écrire un contrat mock. J'écris un fichier MockCodeFan.sol, copie du CodeFan.sol final, en
ajoutant ces lignes à la fin :
contract MockCodeFan {
// might be constant
address private OWNER = 0xf17f52151EbEF6C7334FAD080c5704D77216b732;
address private ORACLE = 0xf17f52151EbEF6C7334FAD080c5704D77216b732;
function setOracle(address oracle) public{
require(msg.sender == OWNER);
ORACLE = oracle;
}
// ....
/**
* TESTABLE FUNCTIONS and events - Should be deleted in deployment
*/
function setOwner(address owner) public{
OWNER = owner;
}
event Debug(address _from, string domain);
}
Dans le test, je peux alors commencer par
let [johndoe, nik, oracle ] = accounts;
await contract.setOwner(nik);
await contract.setOracle(oracle, {from: nik});
Débugger
Maintenant que vous avez du code Solidity, vous voulez comprendre ce qui se passe avant d'envoyer des millions dans le contrat. Mais
il n'y a ni console.log() ni débogueur à attacher en Solidity 🤷. Difficile de savoir ce qui se passe
dans la machine.
La technique consiste à créer un événement Debug et à l'écouter pendant les tests.
event Debug(address _from, string domain);
function addSite(address user, string calldata domain) external {
emit Debug(user, domain);
require(msg.sender == ORACLE);
// ...
}
Pour simplifier, j'ai utilisé la bibliothèque truffle-assertions :
const truffleAssert = require('truffle-assertions');
result = await contract.addSite(oracle, domainNames[0],
{from: oracle});
// -> will display the event
truffleAssert.prettyPrintEmittedEvents(result);
Et ensuite
J'ai utilisé Remix pour déployer mon premier token, Truffle pour mes premiers vrais projets. Et je vais sans doute bientôt essayer Hardhat.
La raison principale : on peut utiliser console.log() directement dans le code Solidity (wow 😁), et 0xGorilla a créé
Smock, un plugin de mock pour Hardhat. Preuve que Hardhat peut être bien plus flexible que
Truffle. Mais comme il propose beaucoup d'options et de plugins avant même de commencer, je ne démarrerais pas directement avec.
Voici le tableau d'adoption des outils chez les grandes entreprises du web3


