Les contrats intelligents sur le réseau principal Ethereum utilisent de l'argent réel, donc la construction de contrats intelligents sans erreur est cruciale et nécessite des outils spéciaux comme les débogueurs.
Remix IDE est l'IDE pour Solidity le plus complet. Parmi d'autres outils, il a un excellent débogueur étape par étape. Vous pouvez effectuer diverses tâches telles que le déplacement dans le temps, la modification de l'étape en cours, l'exploration des variables locales et l'état actuel en développant plusieurs panneaux.
Vous pouvez également définir des points d'arrêt pour vous déplacer entre différents points du code. Et le terminal vous permet d'afficher les transactions exécutées à partir de Remix et de les déboguer.
Tout au long de ce tutoriel, nous utiliserons Truffle et OpenZeppelin pour créer un simple jeton personnalisé. Nous verrons pourquoi et comment aplatir le contrat, et finalement nous utiliserons l'EDI Remix pour débuter le débogage du contrat
Pourquoi aplatir un contrat intelligent?
Aplatir un contrat intelligent fait référence à la combinaison de toutes les solidités. code dans un fichier au lieu de plusieurs fichiers sources de sorte que, au lieu d'avoir des importations, le code importé est incorporé dans le même fichier. Nous devons aplatir les contrats intelligents pour diverses raisons, telles que la révision manuelle du contrat, la vérification du contrat sur Etherscan ou le débogage du contrat avec Remix IDE, car il ne prend pas en charge les importations.
Un jeton simple utilisant Truffle et OpenZeppelin
Remix IDE est officiellement recommandé pour construire de petits contrats ou pour apprendre Solidité, mais une fois que vous avez besoin de construire un contrat plus grand ou besoin d'options de compilation avancées, vous devrez utiliser Solidity. compilateur ou d'autres outils / frameworks tels que Truffle.
Outre les contrats sans erreur, la sécurité est également un élément crucial de la construction d'un contrat intelligent. Pour cette raison, l'utilisation de frameworks testés au combat comme OpenZeppelin qui fournit des contrats intelligents réutilisables, bien testés et revus par la communauté, vous aidera à réduire les vulnérabilités de vos Dapps.
Voyons maintenant comment nous pouvons utilisez Truffle et OpenZeppelin pour créer un jeton personnalisé simple qui étend le jeton standard d'OpenZeppelin.
Conditions préalables
Ce tutoriel requiert des connaissances sur Truffle, Ethereum et Solidity. Vous pouvez lire le Blockchain Introduction et Ethereum Introduction .
Vous devez également avoir Node.js 5.0+ et npm installé sur votre système. Pour plus d'informations, reportez-vous à leur page de téléchargement .
Installation de Truffle
À l'aide de votre terminal, exécutez la commande suivante pour installer Truffle:
npm install -g truffle
Création d'un nouveau projet de truffe
Commencez par créer un nouveau répertoire pour votre projet. Appelons-le simpletoken
et naviguez dedans:
mkdir simpletoken
cd simpletoken
Ensuite, créez les fichiers du projet en utilisant:
truffle init
Cette commande créera plusieurs dossiers, tels que contracts /
et migrations /
et les fichiers qui seront utilisés lors du déploiement du contrat dans la blockchain.
Ensuite, nous va installer OpenZeppelin:
npm install openzeppelin-solidity
Création d'un contrat de jeton simple
Dans le dossier contracts /
créez un fichier nommé SimpleToken.sol
et ajoutez le contenu suivant:
pragma solidity ^ 0.4. 23;
import 'openzeppelin-solidity / contracts / jeton / ERC20 / StandardToken.sol';
contrat SimpleToken est StandardToken {
adresse publique propriétaire;
string public name = 'SimpleToken';
chaîne public symbol = 'STt';
uint8 décimales publiques = 2;
uint public INITIAL_SUPPLY = 10000;
constructeur () public {
totalSupply_ = INITIAL_SUPPLY;
soldes [owner] = INITIAL_SUPPLY;
}
}
C'est le contrat que nous allons aplanir et déboguer. Nous importons le contrat OpenZeppelin StandardToken.sol
et déclarons notre contrat SimpleToken
qui étend StandardToken.sol
en utilisant l'opérateur is
. 19659003] Notre contrat héritera d'un tas de variables et de fonctions, qui doivent être remplacées afin de personnaliser le contrat.
Pour compléter notre projet Truffle, dans le dossier migrations /
de votre projet, créez un fichier appelé 2_deploy_contract.js
et ajoutez le contenu suivant:
var SimpleToken = artefacts.require ("SimpleToken");
module.exports = function (déployer) {
deployer.deploy (SimpleToken);
}
En utilisant ce fichier, nous pouvons déployer / migrer notre contrat intelligent dans la blockchain, mais nous n'en avons pas réellement besoin pour cet exemple, car nous allons utiliser Remix IDE pour déployer le contrat intelligent après l'avoir aplatit. 19659033] Aplatissement du contrat à l'aide de l'aplatissement des truffes
Truffle Flattener est un utilitaire nPM qui aplatit ou combine les fichiers Solidity développés sous Truffle avec toutes leurs dépendances dans le bon ordre.
Commencez par installer aplatisseur de truffes
à partir de npm en utilisant:
npm install -g truffle-flattener
Ensuite, dans votre projet Truffle, exécutez la commande suivante pour aplatir le fichier SimpleToken.sol
:
truffle-flattener contracts / SimpleToken.sol> FlattenedSimpleToken.sol
truffle-flattener
sort le contrat aplati dans la sortie standard ou le terminal. En utilisant l'opérateur >
nous enregistrons la sortie dans le fichier FlattenedSimpleToken.sol
dans le dossier actuel.
Compiler et déployer le contrat avec IDE Remix
Vous pouvez accéder à votre aplatissement contrat intelligent du fichier FlattenedSimpleToken.sol
. Ouvrez le fichier et copiez son contenu.
Ensuite, ouvrez l'IDE Remix à partir de https://remix.ethereum.org et collez le contrat smart aplati dans un nouveau fichier dans l'EDI.
Si vous obtenez une erreur indiquant Compilateur simulé: Source non trouvée assurez-vous de sélectionner une nouvelle version du compilateur depuis onglet Paramètres> volet version Solidité> sélectionnez la nouvelle liste déroulante du compilateur .
Si Compilation automatique est désactivé, cliquez sur le bouton Commencer à compiler dans le panneau Compiler .
Ensuite, activez la édition panneau. Assurez-vous d'abord que JavaScript VM a été sélectionné pour l'environnement. Dans la deuxième case, sélectionnez le contrat SimpleToken dans la liste déroulante, puis cliquez sur le bouton rouge Déployer juste en dessous de la liste déroulante.
Votre contrat est déployé et s'exécutant sur la machine virtuelle JavaScript, qui simule une chaîne de blocs. Nous pouvons maintenant commencer à le déboguer de différentes manières.
Déboguer le contrat de jeton personnalisé
Pour voir comment nous pouvons déboguer le contrat, nous allons d'abord introduire quelques erreurs.
Vous pouvez commencer à déboguer des contrats intelligents dans Remix IDE en utilisant deux manières différentes, selon le cas d'utilisation.
Lorsque vous déployez votre contrat intelligent pour la première fois ou effectuez une transaction par la suite, certaines informations sont consignées dans le terminal et vous pouvez commencer à le déboguer du débogage ] à côté du journal. Voyons cela en action.
Utiliser assert ()
SafeMath est une bibliothèque OpenZeppelin pour les opérations mathématiques avec des vérifications de sécurité qui génèrent une erreur. La fonction sous (a, b)
soustrait deux nombres et renvoie un nombre non signé. Le premier paramètre devrait être plus grand que le deuxième paramètre afin que nous puissions toujours obtenir un nombre positif. La fonction applique cette règle à l'aide d'une fonction assert () . C'est le code pour la fonction sub :
fonction sub (uint256 a, uint256 b) retours internes purs (uint256) {
affirmer (b <= a);
retourner a - b;
}
Tant que vous fournissez des valeurs pour a et b qui vérifient la condition b <= a l'exécution se poursuit sans problème, mais une fois que vous fournissez une valeur de b plus grande que a la fonction assert () lancera une erreur qui dit:
Erreur VM: opcode invalide. Opcode invalide L'exécution peut avoir été levée. Déboguez la transaction pour obtenir plus d'informations.
Ajoutons donc un appel au sub () avec de mauvais paramètres dans le contrat SimpleToken :
constructor () public {
totalSupply_ = INITIAL_SUPPLY;
soldes [owner] = INITIAL_SUPPLY;
SafeMath.sub (10, 1000);
}
Si vous redéployez le contrat, vous obtiendrez l'erreur d'opcode invalide dans le terminal:
Une fois que vous cliquez sur le débogage bouton vous serez dirigé vers le panneau Débogueur où vous pourrez commencer à déboguer votre code
Dans l'éditeur de code, la première ligne / instruction soit en surbrillance indiquant où se trouve actuellement le code
Cliquer sur le bouton Faire un pas en avant pour parcourir le code.
Vous pouvez également sauter directement à l'exception en utilisant le bouton Aller à l'exception .
Quelle que soit la méthode utilisée, le débogueur vous amènera au code à l'origine du problème et s'arrêtera.
Vous pouvez inspecter l'état des variables locales à l'étape actuelle.
Les Solidité Locals ]
Du code source et Solidity Locals vous pouvez conclure que la source du problème est liée au assert () La méthode et la valeur de b étant supérieure à la valeur de a .
Vous pouvez arrêter le débogage en utilisant le bouton arrêter le débogage .
Il vaut également la peine de regarder les autres panneaux du débogueur
Instructions
Le panneau Instructions affiche le byte-code du contrat débogué. Le code octet de l'étape en cours est mis en surbrillance
État de solidité
Le panneau État de solidité affiche les variables d'état du contrat actuellement débogué. 19659083] Panneaux de bas niveau
Ces panneaux affichent des informations de bas niveau sur l'exécution telles que les détails des étapes, la mémoire, la pile et la valeur de retour des fonctions. Dans ce tutoriel, nous avons utilisé Truffle et OpenZeppelin pour construire un simple jeton, puis utilisé truffle-flattener pour aplatir le contrat personnalisé et Remix IDE pour débuter le débogage du contrat pour les erreurs.
J'espère que cela vous aidera à plonger sans crainte dans l'étape débogage de vos propres contrats. Faites-nous savoir comment cela fonctionne pour vous!