Passer au contenu principal

Un 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 de la blockchain et que vous ne savez pas par où commencer, ou si vous voulez simplement comprendre comment déployer des contrats intelligents et interagir avec, 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 en utilisant un portefeuille virtuel MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab) et Alchemy (opens in a new tab) (ne vous inquiétez pas si vous ne comprenez pas encore ce que tout cela signifie, nous vous l'expliquerons).

Dans la partie 2 (opens in a new tab) de ce tutoriel, nous verrons comment interagir avec notre contrat intelligent une fois qu'il sera déployé, et dans la partie 3 (opens in a new tab), nous aborderons la façon de le publier sur Etherscan.

Si vous avez des questions à un moment ou à un autre, n'hésitez pas à nous contacter sur le Discord d'Alchemy (opens in a new tab) !

Étape 1 : Se connecter au réseau Ethereum

Il existe de nombreuses façons de faire des requêtes sur la chaîne Ethereum. Pour des raisons de simplicité, nous utiliserons un compte gratuit sur Alchemy, une plateforme de développement blockchain 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 coulisses lors du déploiement de notre contrat intelligent. Si vous n'avez pas encore de compte Alchemy, vous pouvez vous inscrire gratuitement ici (opens in a new tab).

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

Une fois votre compte Alchemy créé, vous pouvez générer une clé API en créant une application. Cela va nous permettre d'émettre 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" dans votre tableau de bord Alchemy en sélectionnant "Select an app" dans la barre de navigation et en cliquant sur "Create new app".

Création de l'application Hello world

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

Vue de création de l'application Hello world

  1. Cliquez sur "Next" pour continuer, puis sur “Create app” et c'est tout ! Votre application devrait apparaître dans le menu déroulant de la barre de navigation, avec une clé API que vous pouvez copier.

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

Nous avons besoin d'un compte Ethereum pour effectuer des transactions (envoyer et recevoir). Pour ce tutoriel, nous allons utiliser MetaMask, un portefeuille virtuel intégré au navigateur, servant à gérer les adresses de votre compte Ethereum. En savoir plus sur les transactions.

Vous pouvez télécharger MetaMask et créer gratuitement un compte Ethereum ici (opens in a new tab). Lorsque vous créez un compte, ou si vous en avez déjà un, veillez à basculer sur le réseau de test "Sepolia" à l'aide du menu déroulant du réseau (afin de ne pas utiliser d'argent réel).

Si Sepolia n'est pas listé, allez dans le menu, puis dans « Advanced » et faites défiler vers le bas pour activer l'option "Show test networks". Dans le menu de sélection du réseau, choisissez l'onglet "Custom" pour trouver une liste de réseaux de test et sélectionnez "Sepolia."

Exemple de MetaMask Sepolia

Étape 4 : Ajouter de l'ether depuis 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 accéder à la page des détails du réseau Sepolia pour consulter une liste de différents faucets. Si l'un d'eux ne fonctionne pas, essayez-en un autre, car ils peuvent parfois être à sec. La réception de vos faux ETH peut prendre un certain temps en raison du trafic réseau. Vous devriez voir les ETH apparaître dans votre compte Metamask peu de temps après !

Étape 5 : Vérifier votre solde

Pour vérifier notre solde, effectuons une requête eth_getBalance en utilisant l'outil de composition d'Alchemy (opens in a new tab). Cela va renvoyer la quantité d'ETH dans notre portefeuille. Après avoir entré l'adresse de votre compte MetaMask et cliqué sur « Send Request », vous devriez voir une réponse comme celle-ci :

1{ "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 d'ether. La conversion de 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 fausse monnaie est bien là .

Étape 6 : Initialiser notre projet

Pour commencer, nous allons devoir créer un dossier pour notre projet. Ouvrez votre ligne de commande et tapez :

1mkdir hello-world
2cd hello-world

Maintenant que nous sommes dans notre dossier de projet, nous allons utiliser npm init pour initialiser le projet. Si vous n'avez pas encore installé npm, suivez ces instructions (opens in a new tab) (nous aurons également besoin de Node.js, alors téléchargez-le aussi !).

1npm 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 :

1package name: (hello-world)
2version: (1.0.0)
3description: hello world smart contract
4entry point: (index.js)
5test command:
6git repository:
7keywords:
8author:
9license: (ISC)
10About to write to /Users/.../.../.../hello-world/package.json:
11
12{
13 "name": "hello-world",
14 "version": "1.0.0",
15 "description": "hello world smart contract",
16 "main": "index.js",
17 "scripts": {
18 "test": "echo \"Error: no test specified\" && exit 1"
19 },
20 "author": "",
21 "license": "ISC"
22}
Afficher tout

Approuvez le fichier package.json et nous sommes prêts !

Étape 7 : Télécharger Hardhat (opens in a new tab)

Hardhat est un environnement de développement qui permet de compiler, déployer, tester et déboguer votre logiciel Ethereum. Il aide les développeurs à construire des contrats intelligents et des dApps localement avant de les déployer sur la chaîne en production.

Dans notre projet hello-world, exécutez :

1npm install --save-dev hardhat

Consultez cette page pour plus de détails sur les instructions d'installation (opens in a new tab).

Étape 8 : Créer le projet Hardhat

Dans notre dossier de projet, exécutez :

1npx hardhat

Vous devriez maintenant voir un message de bienvenue ainsi qu'une option pour sélectionner ce que vous voulez faire. Sélectionnez : « create an empty hardhat.config.js » :

1888 888 888 888 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Welcome to Hardhat v2.0.11 👷‍?
11
12What do you want to do? …
13Create a sample project
14❯ Create an empty hardhat.config.js
15Quit
Afficher tout

Cela générera pour nous un fichier hardhat.config.js, dans lequel nous spécifierons toute la configuration de notre projet (à l'étape 13).

Étape 9 : Ajouter des dossiers de projet

Pour garder notre projet organisé, nous allons créer deux nouveaux dossiers. Naviguez vers le répertoire racine de votre projet dans votre invite de commande en ligne et tapez :

1mkdir contracts
2mkdir 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 notre contrat et interagir avec lui.

Étape 10 : Rédiger notre contrat

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

Ouvrez le projet hello-world dans votre éditeur de code favori (nous aimons VSCode (opens in a new tab)). 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 nommé 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 :
1// Spécifie la version de Solidity, en utilisant le versionnage sémantique.
2// En savoir plus : https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Définit un contrat nommé `HelloWorld`.
6// Un contrat est un ensemble de fonctions et de données (son état). Une fois déployé, un contrat réside à une adresse spécifique sur la blockchain Ethereum. En savoir plus : https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Déclare une variable d'état `message` de type `string`.
10 // Les variables d'état sont des variables dont les valeurs sont stockées en permanence dans le stockage du contrat. Le mot-clé `public` rend les variables accessibles depuis l'extérieur d'un contrat et crée une fonction que d'autres contrats ou clients peuvent appeler pour accéder à la valeur.
11 string public message;
12
13 // Semblable à de nombreux langages orientés objet basés sur des classes, un constructeur est une fonction spéciale qui n'est exécutée qu'à la création du contrat.
14 // Les constructeurs sont utilisés pour initialiser les données du contrat. En savoir plus :https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Accepte un argument de chaîne de caractères `initMessage` et définit la valeur dans la variable de stockage `message` du contrat).
18 message = initMessage;
19 }
20
21 // Une fonction publique qui accepte un argument de chaîne de caractères et met à jour la variable de stockage `message`.
22 function update(string memory newMessage) public {
23 message = newMessage;
24 }
25}
Afficher tout

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 rédigé notre contrat intelligent. Il est maintenant temps de connecter les trois.

Chaque transaction envoyée depuis votre portefeuille virtuel nécessite une signature en utilisant votre clé privée unique. Pour donner cette permission à 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 ce tutoriel sur l'envoi de transactions à l'aide de web3.

Premièrement, installez le paquet dotenv dans votre dossier de projet :

1npm install dotenv --save

Ensuite, créez un fichier .env à la racine de notre projet, et ajoutez-y votre clé privée MetaMask et votre URL d'API HTTP Alchemy.

obtenir la clé api alchemy

Copiez l'URL de l'API Alchemy

Votre .env devrait ressembler à ceci :

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

Pour les relier à notre code, nous ferons référence à ces variables dans notre fichier hardhat.config.js à l'étape 13.

Étape 12 : Installer Ethers.js

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

Hardhat facilite grandement l'intégration de plugins (opens in a new tab) pour des outils supplémentaires et des fonctionnalités étendues. Nous allons profiter du plugin Ethers (opens in a new tab) pour le déploiement du contrat (Ethers.js (opens in a new tab) a des méthodes de déploiement de contrat très propres).

Dans votre dossier de projet, tapez :

1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

Nous aurons également besoin d'ethers dans notre hardhat.config.js à l'étape suivante.

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

À ce stade, nous avons ajouté plusieurs dépendances et plugins. Nous devons maintenant mettre à jour hardhat.config.js pour que notre projet les reconnaisse.

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

1require('dotenv').config();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
9module.exports = {
10 solidity: "0.7.3",
11 defaultNetwork: "sepolia",
12 networks: {
13 hardhat: {},
14 sepolia: {
15 url: API_URL,
16 accounts: [`0x${PRIVATE_KEY}`]
17 }
18 },
19}
Afficher tout

Étape 14 : Compiler notre contrat

Pour s’assurer à ce stade que tout fonctionne, 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 :

1npx hardhat compile

Vous pourriez voir un avertissement du type SPDX license identifier not provided in source file (identifiant de licence SDPX non fourni dans le fichier source), mais nul besoin de vous inquiéter — espérons que tout le reste fonctionne ! Sinon, vous pouvez toujours envoyer un message sur le Discord d'Alchemy (opens in a new tab).

Étape 15 : Rédiger notre script de déploiement

Maintenant que notre contrat est codé et que notre fichier de configuration est bon, il est temps d’écrire notre script de déploiement pour notre contrat.

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

1async function main() {
2 const HelloWorld = await ethers.getContractFactory("HelloWorld");
3
4 // Lancer le déploiement, renvoyant une promesse qui se résout en un objet de contrat
5 const hello_world = await HelloWorld.deploy("Hello World!");
6 console.log("Contrat déployé à l'adresse :", hello_world.address);}
7
8main()
9 .then(() => process.exit(0))
10 .catch(error => {
11 console.error(error);
12 process.exit(1);
13 });
Afficher tout

Hardhat explique très bien ce que fait chacune de ces lignes de code dans son tutoriel sur les contrats (opens in a new tab), nous avons repris leurs explications ici.

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

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

1const hello_world = await HelloWorld.deploy();

L'appel de deploy() sur un ContractFactory lancera 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.

Étape 16 : Déployer notre contrat

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

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

Vous devriez maintenant voir quelque chose comme :

1Contrat déployé à l'adresse : 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Si nous allons sur l'Etherscan Sepolia (opens in a new tab) et que nous recherchons l'adresse de notre contrat, nous devrions être en mesure de voir qu'il a été déployé avec succès. La transaction ressemblera à quelque chose comme :

Contrat Etherscan

L'adresse From devrait correspondre à l'adresse de votre compte MetaMask et l'adresse To indiquera « Contract Creation » mais si nous cliquons sur la transaction, nous verrons l'adresse de notre contrat dans le champ To :

Transaction Etherscan

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

Pour comprendre ce qui se passe en coulisses, allons dans l'onglet Explorer de notre tableau de bord Alchemy (opens in a new tab). Si vous disposez de plusieurs applications Alchemy, assurez-vous de filtrer par application et sélectionnez « Hello World ». Explorateur Hello World

Vous verrez ici un certain nombre d'appels JSON-RPC que Hardhat/Ethers ont effectués en coulisses pour nous lorsque nous avons appelé la fonction .deploy(). Deux appels importants à mentionner ici sont eth_sendRawTransaction (opens in a new tab), qui est la requête pour réellement écrire notre contrat sur la chaîne Sepolia, et eth_getTransactionByHash (opens in a new tab) qui est une requête pour lire des informations sur notre transaction en fonction du hachage (un modèle typique lors des transactions). Pour en savoir plus sur l'envoi de transactions, consultez ce tutoriel sur l'envoi de transactions à l'aide de Web3

C'est tout pour la première partie de ce tutoriel. Dans la deuxième partie, nous allons interagir avec notre contrat intelligent (opens in a new tab) en mettant à jour notre message initial et, dans la troisième partie, nous publierons notre contrat intelligent sur Etherscan (opens in a new tab) afin que tout le monde sache comment interagir avec lui.

Vous voulez en savoir plus sur Alchemy ? Consultez notre site web (opens in a new tab). Ne ratez plus jamais une mise à jour ? Inscrivez-vous à notre newsletter ici (opens in a new tab) ! Assurez-vous également de rejoindre notre Discord (opens in a new tab)..

Dernière mise à jour de la page : 5 décembre 2025

Ce tutoriel vous a été utile ?