Je suis développeur depuis plus de 10 ans maintenant. J'ai eu la chance de devenir un committer Apache et PPMC, de parler chez Google, d'écrire un livre pour Manning Publications et quelques autres choses. Comme le marché du travail n'est pas formidable et que les gens ont du mal à trouver un bon travail, je commence à voir des opportunités commerciales dans la blockchain, plus particulièrement - je vois de grandes opportunités pour aider les autres à créer leur propre entreprise. J'aimerais partager quelques choses techniques que j'ai apprises au cours des dernières semaines.
J'ai travaillé sur la compréhension des avantages et des inconvénients des applications distribuées (DApps). Il existe de nombreux outils parmi lesquels vous pouvez choisir pour commencer à les créer. Dans cet article, je vous propose une approche avisée pour créer, déployer et interagir localement avec des contrats intelligents. Pas d'outils Web, uniquement une ligne de commande.
Prérequis :
J'utilise Node 18.17, cependant, cela devrait fonctionner avec une version ultérieure de Node.
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
$ npm init -y
$ npm install --save-dev hardhat
npx est utilisé pour exécuter les exécutables installés localement dans votre projet. Il est recommandé d'installer Hardhat localement dans chaque projet afin de pouvoir contrôler la version projet par projet.
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
Vous verrez cela lors d'une création réussie.
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
Pour vérifier que tout a été exécuté comme prévu, vous devriez maintenant voir deux champs dans votre répertoire actuel.
$ ls -lta package.json hardhat.config.js
Lorsque vous utilisez Hardhat, vous pouvez stocker les fichiers sources Solidity (.sol) dans un répertoire de contrats. Nous allons écrire notre premier contrat intelligent simple, appelé Storage : il permettra aux utilisateurs de stocker une valeur qui pourra être récupérée ultérieurement. Il s'agit d'une variante d'un autre contrat de démarrage avec Hardhat. Je travaille manuellement sur le processus afin que nous comprenions toutes les pièces en mouvement.
$ mkdir contracts && vim contracts/Storage.sol
// contracts/Storage.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Storage { uint256 private _value; // Emitted when the stored value changes event ValueChanged(uint256 value); // Stores a new value in the contract function store(uint256 value) public { _value = value; emit ValueChanged(value); } // Reads the last stored value function retrieve() public view returns (uint256) { return _value; } }
Après avoir écrit ce qui précède dans le fichier, fermez vim avec :wq ou :x
La machine virtuelle Ethereum (EVM) ne peut pas exécuter directement le code Solidity : nous devons d'abord le compiler dans le bytecode EVM. Notre contrat Storage.sol utilise Solidity 0.8, nous devons donc d'abord configurer Hardhat pour utiliser une version solc appropriée. Nous spécifions une version solc Solidity 0.8 dans notre hardhat.config.js.
$ nvm install 18.17
$ mkdir hello-world && cd hello-world
Nous allons créer un script pour déployer notre contrat de stockage. Nous enregistrerons ce fichier sous scripts/deploy.js.
$ npm init -y
$ npm install --save-dev hardhat
Nous utilisons des ethers dans notre script, nous devons donc l'installer ainsi que le plugin @nomicfoundation/hardhat-ethers.
$ npm install --save-dev @nomicfoundation/hardhat-ethers ethers
Nous devons ajouter dans notre configuration que nous utilisons le plugin @nomicfoundation/hardhat-ethers.
Notre configuration de casque de sécurité devrait maintenant ressembler à ceci ;
$ npx hardhat init Need to install the following packages: hardhat@2.22.15 Ok to proceed? (y) You should see the option show up. Select “ Create an empty hardhat.config.js”
Nous avons besoin d'un environnement dans lequel nous pouvons déployer nos contrats. La blockchain Ethereum (souvent appelée « mainnet », pour « réseau principal ») nécessite de dépenser de l'argent réel pour l'utiliser, sous forme d'Ether (sa monnaie native). Cela en fait un mauvais choix lorsque vous essayez de nouvelles idées ou de nouveaux outils.
Pour résoudre ce problème, un certain nombre de « testnets » (pour « réseaux de test ») existent : cependant, vous devrez toujours vous occuper de la gestion des clés privées, des temps de blocage de 12 secondes ou plus et obtenir cet Ether gratuit.
Pendant le développement, il est préférable d'utiliser une blockchain locale. Il fonctionne sur votre machine, vous fournit tout l’éther dont vous avez besoin et extrait les blocs instantanément.
✔ What do you want to do? · Create an empty hardhat.config.js ✨ Config file created ✨
Déployez votre contrat intelligent
$ ls -lta package.json hardhat.config.js
Avec notre contrat de stockage déployé, nous pouvons commencer à l'utiliser immédiatement.
Nous utiliserons la console Hardhat pour interagir avec notre contrat de stockage déployé sur notre réseau localhost.
Nous devons préciser l'adresse de notre contrat de stockage que nous avons affiché dans notre script de déploiement.
Il est important que nous définissions explicitement le réseau auquel Hardhat doit connecter notre session de console. Si nous ne le faisons pas, Hardhat utilisera par défaut un nouveau réseau éphémère, sur lequel notre contrat de stockage ne sera pas déployé.
$ mkdir contracts && vim contracts/Storage.sol
La première fonction, store, reçoit une valeur entière et la stocke dans le stockage du contrat. Parce que cette fonction modifie l'état de la blockchain, nous devons envoyer une transaction au contrat pour l'exécuter.
Nous enverrons une transaction pour appeler la fonction store avec une valeur numérique :
$ nvm install 18.17
L'autre fonction s'appelle retrieve et renvoie la valeur entière stockée dans le contrat. Il s'agit d'une requête sur l'état de la blockchain, nous n'avons donc pas besoin d'envoyer de transaction :
$ mkdir hello-world && cd hello-world
Étant donné que les requêtes lisent uniquement l'état et n'envoient pas de transaction, il n'y a pas de hachage de transaction à signaler. Cela signifie également que l'utilisation des requêtes ne coûte aucun Ether et peut être utilisée gratuitement sur n'importe quel réseau.
Nous avons créé un contrat intelligent minimal et l'avons déployé sur une instance de blockchain locale pour démontrer comment nous pouvons écrire et lire des valeurs à partir de la blockchain. Si vous avez trouvé cet article utile, n'hésitez pas à l'aimer et/ou à le partager.
N'hésitez pas à commenter avec des suggestions ou des corrections que vous jugez appropriées. J'écris ces articles avant et après le travail, je les publie le plus vite possible.
Merci !
Référence :
Documents sur le casque
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!