Passer au contenu principal

Contrat intelligent Hello World pour les débutants

Solidity
Hardhat
Alchemy
contrats intelligents
déploiement
Débutant
elanh
31 mars 2021
14 minutes de lecture

Si vous débutez dans le développement sur chaîne de blocs et que vous ne savez pas par où commencer, ou si vous voulez simplement comprendre comment déployer et interagir avec des contrats intelligents, ce guide est fait pour vous. Nous allons vous guider dans la création et le déploiement d'un contrat intelligent simple sur le réseau de test Sepolia à l'aide d'un portefeuille virtuel MetaMask (s'ouvre dans un nouvel onglet), de Solidity (s'ouvre dans un nouvel onglet), de Hardhat (s'ouvre dans un nouvel onglet) et d'Alchemy (s'ouvre dans un nouvel onglet) (ne vous inquiétez pas si vous ne comprenez pas encore ce que tout cela signifie, nous vous l'expliquerons).

Une fois votre contrat déployé, vous pourrez créer une interface utilisateur pour celui-ci.

Si vous avez des questions à un moment donné, n'hésitez pas à nous contacter sur le Discord d'Alchemy (s'ouvre dans un nouvel onglet) !

Étape 1 : Se connecter au réseau Ethereum

Il existe de nombreuses façons d'effectuer des requêtes sur la chaîne Ethereum. Pour faire simple, nous utiliserons un compte gratuit sur Alchemy, une plateforme de développement de chaîne de blocs et une API qui nous permet de communiquer avec la chaîne Ethereum sans avoir à exécuter nos propres nœuds. La plateforme dispose également d'outils de développement pour la surveillance et l'analyse dont nous tirerons parti dans ce tutoriel pour comprendre ce qui se passe en interne lors du déploiement de notre contrat intelligent. Si vous n'avez pas encore de compte Alchemy, vous pouvez vous inscrire gratuitement ici (s'ouvre dans un nouvel onglet).

Étape 2 : Créer votre application (et votre clé API)

Une fois que vous avez créé un compte Alchemy, vous pouvez générer une clé API en créant une application. Cela nous permettra d'effectuer des requêtes sur le réseau de test Sepolia. Si vous n'êtes pas familier avec les réseaux de test, consultez cette page.

  1. Accédez à la page « Create new app » (Créer une nouvelle application) dans votre tableau de bord Alchemy en sélectionnant « Select an app » (Sélectionner une application) dans la barre de navigation et en cliquant sur « Create new app »

Hello world create app

  1. Nommez votre application « Hello World », proposez une brève description et choisissez un cas d'utilisation, par exemple « Infra & Tooling ». Ensuite, recherchez « Ethereum » et sélectionnez le réseau.

create app view hello world

  1. Cliquez sur « Next » (Suivant) pour continuer, puis sur « Create app » (Créer l'application) et c'est tout ! Votre application devrait apparaître dans le menu déroulant de la barre de navigation, avec une clé API disponible à copier.

Étape 3 : Créer un compte Ethereum (adresse)

Nous avons besoin d'un compte Ethereum pour envoyer et recevoir des transactions. Pour ce tutoriel, nous utiliserons MetaMask, un portefeuille virtuel dans le navigateur utilisé pour gérer l'adresse de votre compte Ethereum. Pour en savoir plus sur les transactions.

Vous pouvez télécharger MetaMask et créer un compte Ethereum gratuitement ici (s'ouvre dans un nouvel onglet). Lors de la création d'un compte, ou si vous en avez déjà un, assurez-vous de passer sur le réseau de test « Sepolia » à l'aide du menu déroulant des réseaux (afin de ne pas manipuler d'argent réel).

Si vous ne voyez pas Sepolia dans la liste, ouvrez le menu dans le coin supérieur droit, sélectionnez « Networks » (Réseaux) et activez « Show test networks » (Afficher les réseaux de test) au bas de la liste des réseaux (voir le guide de MetaMask pour afficher les réseaux de test (s'ouvre dans un nouvel onglet)). Sélectionnez ensuite « Sepolia » dans le menu de sélection du réseau.

metamask sepolia example

Étape 4 : Ajouter de l'ether à partir d'un faucet

Afin de déployer notre contrat intelligent sur le réseau de test, nous aurons besoin de faux ETH. Pour obtenir des ETH Sepolia, vous pouvez consulter les détails du réseau Sepolia pour voir une liste de différents faucets. Si l'un d'eux ne fonctionne pas, essayez-en un autre, car ils peuvent parfois être à sec. Certains faucets ont des règles d'éligibilité ; par exemple, le faucet Sepolia d'Alchemy exige que l'adresse de réception détienne au moins 0,001 ETH sur le réseau principal Ethereum. La réception de vos faux ETH peut prendre un certain temps en raison du trafic sur le réseau. Vous devriez voir des ETH dans votre compte MetaMask peu de temps après !

Étape 5 : Vérifier votre solde

Pour vérifier que notre solde est bien là, effectuons une requête eth_getBalance à l'aide de l'outil Composer d'Alchemy (s'ouvre dans un nouvel onglet). Cela renverra le montant d'ETH dans notre portefeuille. Après avoir saisi l'adresse de votre compte MetaMask et cliqué sur « Send Request » (Envoyer la requête), vous devriez voir une réponse comme celle-ci :

{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

REMARQUE : Ce résultat est en Wei et non en ETH. Le Wei est utilisé comme la plus petite dénomination de l'ether. La conversion du Wei en ETH est la suivante : 1 eth = 1018 Wei. Donc, si nous convertissons 0x2B5E3AF16B1880000 en décimal, nous obtenons 5*10¹⁸, ce qui équivaut à 5 ETH.

Ouf ! Notre faux argent est bien là .

Étape 6 : Initialiser notre projet

Tout d'abord, nous devrons créer un dossier pour notre projet. Accédez à votre ligne de commande et tapez :

mkdir hello-world
cd hello-world

Maintenant que nous sommes dans le dossier de notre projet, nous allons utiliser npm init pour initialiser le projet. Si npm n'est pas encore installé, suivez les instructions d'installation de Node.js (s'ouvre dans un nouvel onglet) (nous aurons besoin de Node.js et de npm pour ce tutoriel).

npm init

La façon dont vous répondez aux questions d'installation n'a pas vraiment d'importance, voici comment nous avons procédé à titre de référence :

Approuvez le fichier package.json. Hardhat 3, que nous installerons ensuite, ne prend en charge que les projets de modules ES, alors marquez le projet comme tel :

npm pkg set type=module

Et nous sommes prêts à commencer !

Étape 7 : Télécharger Hardhat (s'ouvre dans un nouvel onglet)

Hardhat est un environnement de développement pour compiler, déployer, tester et déboguer vos logiciels Ethereum. Il aide les développeurs lors de la création de contrats intelligents et d'applications décentralisées (dapps) localement avant de les déployer sur la chaîne en direct.

Hardhat 3 nécessite Node.js v22.13.0 ou une version ultérieure. Dans notre projet hello-world, exécutez :

npm install --save-dev hardhat

Consultez cette page pour plus de détails sur les instructions d'installation (s'ouvre dans un nouvel onglet).

Étape 8 : Créer un projet Hardhat

L'exécution de npx hardhat --init générerait un exemple de projet complet, mais pour ce tutoriel, nous allons tout configurer manuellement afin que vous puissiez voir chaque élément. À la racine du dossier de votre projet, créez un fichier appelé hardhat.config.js avec le contenu suivant :

import { defineConfig } from "hardhat/config"

export default defineConfig({
  solidity: "0.8.34",
})

C'est ici que nous spécifierons toute la configuration de notre projet (à l'étape 13). Pour l'instant, cela indique simplement à Hardhat quelle version du compilateur Solidity utiliser.

Étape 9 : Ajouter les dossiers du projet

Pour garder notre projet organisé, nous allons créer deux nouveaux dossiers. Accédez au répertoire racine de votre projet dans votre ligne de commande et tapez :

mkdir contracts
mkdir scripts
  • contracts/ est l'endroit où nous conserverons le fichier de code de notre contrat intelligent Hello World
  • scripts/ est l'endroit où nous conserverons les scripts pour déployer et interagir avec notre contrat

Étape 10 : Écrire notre contrat

Vous vous demandez peut-être quand diable allons-nous écrire du code ?? Eh bien, nous y sommes, à l'étape 10.

Ouvrez le projet hello-world dans votre éditeur préféré (nous aimons VSCode (s'ouvre dans un nouvel onglet)). Les contrats intelligents sont écrits dans un langage appelé Solidity, que nous utiliserons pour écrire notre contrat intelligent HelloWorld.sol.‌

  1. Accédez au dossier « contracts » et créez un nouveau fichier appelé HelloWorld.sol
  2. Vous trouverez ci-dessous un exemple de contrat intelligent Hello World de la Fondation Ethereum que nous utiliserons pour ce tutoriel. Copiez et collez le contenu ci-dessous dans votre fichier HelloWorld.sol, et assurez-vous de lire les commentaires pour comprendre ce que fait ce contrat :

Il s'agit d'un contrat intelligent très simple qui stocke un message lors de sa création et qui peut être mis à jour en appelant la fonction update.

Étape 11 : Connecter MetaMask et Alchemy à votre projet

Nous avons créé un portefeuille MetaMask, un compte Alchemy et écrit notre contrat intelligent, il est maintenant temps de connecter les trois.

Chaque transaction envoyée depuis votre portefeuille virtuel nécessite une signature à l'aide de votre clé privée unique. Pour fournir cette autorisation à notre programme, nous pouvons stocker en toute sécurité notre clé privée (et la clé API Alchemy) dans un fichier d'environnement.

Pour en savoir plus sur l'envoi de transactions, consultez la documentation sur les transactions.

Créez un fichier .env dans le répertoire racine de notre projet, et ajoutez-y votre clé privée MetaMask et l'URL de l'API HTTP Alchemy.

get alchemy api key

Copiez l'URL de l'API Alchemy

Votre fichier .env devrait ressembler à ceci :

API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY="your-metamask-private-key"

Pour les connecter réellement à notre code, nous ferons référence à ces variables dans notre fichier hardhat.config.js à l'étape 13. Node.js peut lire les fichiers .env par lui-même, il n'y a donc pas de paquet supplémentaire à installer.

Ne commitez pas .env ! Assurez-vous de ne jamais partager ou exposer votre fichier .env avec qui que ce soit, car vous compromettriez vos secrets en le faisant. Si vous utilisez un système de contrôle de version, ajoutez votre .env à un fichier gitignore.

Étape 12 : Installer Ethers.js

Ethers.js est une bibliothèque qui facilite l'interaction et l'envoi de requêtes à Ethereum en enveloppant les méthodes JSON-RPC standard avec des méthodes plus conviviales.

Hardhat facilite grandement l'intégration de plugins (s'ouvre dans un nouvel onglet) pour des outils supplémentaires et des fonctionnalités étendues. Nous tirerons parti du plugin Ethers (s'ouvre dans un nouvel onglet) pour le déploiement de contrats (Ethers.js (s'ouvre dans un nouvel onglet) dispose de méthodes de déploiement de contrats très propres).

Dans le répertoire de votre projet, tapez :

npm install --save-dev @nomicfoundation/hardhat-ethers ethers

Nous ajouterons également le plugin à notre fichier hardhat.config.js à l'étape suivante.

Étape 13 : Mettre à jour hardhat.config.js

Nous avons ajouté plusieurs dépendances et plugins jusqu'à présent, nous devons maintenant mettre à jour hardhat.config.js afin que notre projet les connaisse tous.

Mettez à jour votre fichier hardhat.config.js pour qu'il ressemble à ceci :

configVariable indique à Hardhat de lire chaque valeur à partir d'une variable d'environnement uniquement lorsque cela est nécessaire, de sorte que des commandes comme compile fonctionnent même avant que les valeurs ne soient définies. Si vous préférez ne pas conserver votre clé privée dans un fichier texte brut, Hardhat peut également lire les variables de configuration à partir d'un magasin de clés chiffré (s'ouvre dans un nouvel onglet).

Étape 14 : Compiler notre contrat

Pour nous assurer que tout fonctionne jusqu'à présent, compilons notre contrat. La tâche compile est l'une des tâches intégrées de Hardhat.

À partir de la ligne de commande, exécutez :

npx hardhat compile

La première fois que vous compilez, Hardhat télécharge le compilateur Solidity. Vous devriez ensuite voir quelque chose comme Compiled 1 Solidity file with solc 0.8.34. Si ce n'est pas le cas, vous pouvez toujours envoyer un message sur le Discord d'Alchemy (s'ouvre dans un nouvel onglet).

Étape 15 : Écrire notre script de déploiement

Maintenant que notre contrat est écrit et que notre fichier de configuration est prêt, il est temps d'écrire notre script de déploiement de contrat.

Accédez au dossier scripts/ et créez un nouveau fichier appelé deploy.js, en y ajoutant le contenu suivant :

Passons en revue ce que fait chacune de ces lignes de code.

const { ethers } = await network.create()

Dans Hardhat 3, un script ouvre explicitement une connexion à un réseau. network.create() se connecte au réseau que vous choisissez avec l'option --network lorsque vous exécutez le script, et le plugin hardhat-ethers ajoute un objet ethers à cette connexion.

const HelloWorld = await ethers.getContractFactory("HelloWorld")

Une ContractFactory dans Ethers.js est une abstraction utilisée pour déployer de nouveaux contrats intelligents, donc HelloWorld ici est une fabrique pour les instances de notre contrat hello world. Lors de l'utilisation du plugin hardhat-ethers, les instances ContractFactory et Contract sont connectées au premier signataire par défaut.

const hello_world = await HelloWorld.deploy("Hello World!")

L'appel de deploy() sur une ContractFactory démarrera le déploiement et renverra une Promise qui se résout en un Contract. C'est l'objet qui possède une méthode pour chacune des fonctions de notre contrat intelligent. Les arguments que vous passez à deploy() vont au constructeur du contrat, ici le message initial.

waitForDeployment() attend que la transaction de déploiement soit incluse dans un bloc, et getAddress() renvoie l'adresse du nouveau contrat. Consultez la documentation sur les contrats d'Ethers.js (s'ouvre dans un nouvel onglet) pour plus de détails.

Étape 16 : Déployer notre contrat

Nous sommes enfin prêts à déployer notre contrat intelligent ! Accédez à la ligne de commande et exécutez :

npx hardhat run scripts/deploy.js --network sepolia

Vous devriez ensuite voir quelque chose comme :

Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Si nous allons sur Etherscan Sepolia (s'ouvre dans un nouvel onglet) et recherchons l'adresse de notre contrat, nous devrions pouvoir voir qu'il a été déployé avec succès. La transaction ressemblera à ceci :

etherscan contract

L'adresse From (De) doit correspondre à l'adresse de votre compte MetaMask et l'adresse To (À) indiquera « Contract Creation » (Création de contrat), mais si nous cliquons sur la transaction, nous verrons l'adresse de notre contrat dans le champ To :

etherscan transaction

Félicitations ! Vous venez de déployer un contrat intelligent sur la chaîne Ethereum 🎉

Pour comprendre comment ça fonctionne techniquement, vous pouvez consulter les requêtes que votre application « Hello World » a reçues dans votre tableau de bord Alchemy (s'ouvre dans un nouvel onglet).

Vous y verrez une poignée d'appels JSON-RPC que Hardhat/Ethers a effectués en interne pour nous lorsque nous avons appelé la fonction .deploy(). Deux appels importants à souligner ici sont eth_sendRawTransaction, qui est la requête pour écrire réellement notre contrat sur la chaîne Sepolia, et eth_getTransactionByHash qui est une requête pour lire des informations sur notre transaction à partir du hash (un modèle typique lors de l'envoi de transactions). Pour en savoir plus sur l'envoi de transactions, consultez la documentation sur les transactions.

C'est tout pour ce tutoriel. Ensuite, vous pouvez créer une interface utilisateur pour votre contrat.