Files
tokenizer/docs/pedagogie/etapes/etape-02-init-hardhat.md
2026-10-20 12:30:12 +02:00

11 KiB
Raw Permalink Blame History

Étape 2 — Initialiser Hardhat dans tokenizerRendu/code/

Sujet (ch. IV) : dossier code/ à la racine du dépôt école ; maîtriser la toolchain (Hardhat cité) ; code commenté plus tard (étape 3).
Prérequis : étape 1 ✅ (réseau BSC Testnet 97, tBNB sur FGC_account).
Lire d’abord (recommandé) : Hardhat et alternatives · Ressources Solidity / Hardhat (§ 2 + § 8 plan minimum).


Objectif (en une phrase)

Tu installes sur ta machine une chaîne d’outils (Node + Hardhat) qui va compiler du Solidity, lancer des tests et déployer sur BSC Testnet — sans écrire encore ton token FGC42Forge (étape 3).

Rappel pédagogique : qui fait quoi ?

Élément Rôle
Solidity Langage des contrats (FGC42Forge.sol, plus tard).
Hardhat Programme Node.js : compile, tests, scripts de déploiement.
OpenZeppelin Bibliothèque de contrats éprouvés (ERC20, Ownable) — installée maintenant, utilisée à l’étape 3.
.env Fichier local avec RPC + clé privée — lu par hardhat.config.js, jamais dans Git.

Vue d’ensemble des sous-étapes

  1. A — Vérifier Node.js et se placer dans tokenizerRendu/code/
  2. B — Créer package.json et installer Hardhat
  3. C — Lancer npx hardhat init (assistant interactif)
  4. D — Installer OpenZeppelin + dotenv
  5. E — Configurer hardhat.config.js pour BSC Testnet (chainId 97)
  6. F — Créer .env (secret) et .env.example (modèle pour le rendu)
  7. G — npx hardhat compile (preuve que tout fonctionne)
  8. H — Compléter code/README.md

Durée indicative : 30–45 min la première fois (surtout la lecture des menus hardhat init).


A. Environnement

Où travailler ?

Le sujet demande le code dans tokenizerRendu/code/ (dépôt de rendu), pas à la racine tokenizer/ du dépôt de travail.

cd /home/fgras-ca/projets/42School/tokenizer/tokenizerRendu/code
pwd   # doit finir par .../tokenizerRendu/code

Node.js

node -v   # idéalement ≥ 18 (ex. v20, v22)
npm -v

Si node est introuvable : installer Node.js LTS ou utiliser nvm.

Checklist :

  • node -v OK
  • Tu es dans tokenizerRendu/code/

B. Créer le projet npm

npm init -y crée un package.json minimal : nom du projet, scripts, liste des dépendances.

npm init -y

Tu dois voir un fichier package.json apparaître dans code/.

Puis installer Hardhat et le toolbox (plugins officiels : tests, Ethers, etc.) :

npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
  • --save-dev = outils de développement uniquement (pas besoin sur la blockchain).
  • Première install : téléchargement depuis le registre npm → connexion Internet requise.

Checklist :

  • package.json présent
  • Dossier node_modules/ créé (ignoré par Git via .gitignore parent)

C. Assistant d’initialisation Hardhat

Tu as installé Hardhat 3 (ex. 3.20.x via npm install hardhat). À partir de la v3, la commande a changé :

npx hardhat --init

Erreur HHE3 avec npx hardhat init ? C’est normal : l’ancienne sous-commande init n’existe plus. Le message te dit d’utiliser --init (avec deux tirets).

Lance npx hardhat --init dans ton terminal (pas dans un environnement non interactif) : Hardhat affiche le logo et te pose des questions.

npx exécute le binaire Hardhat sans l’installer globalement.

Variante (tutos Hardhat 2 uniquement)

Si tu veux coller aux vieux tutos (hardhat init + hardhat.config.js + npx hardhat compile), tu peux épingler Hardhat 2 avant d’initialiser :

npm uninstall hardhat @nomicfoundation/hardhat-toolbox
npm install --save-dev hardhat@2.22.19 @nomicfoundation/hardhat-toolbox@5
npx hardhat init

Pour ce projet 42, Hardhat 3 + --init convient très bien ; on adaptera la config réseau BSC après l’assistant (souvent hardhat.config.ts + npx hardhat build au lieu de compile).

Choix recommandés (JavaScript, plus simple pour ce projet)

Les libellés peuvent varier légèrement selon la version de Hardhat ; l’idée :

Question Choix conseillé Pourquoi
Type de projet Create a JavaScript project Moins de config TypeScript pour commencer
Emplacement du config Oui / racine de code/ hardhat.config.js à côté de package.json
Projet vide ou exemple ? Oui, exemple (Lock) Tu vérifies compile + tests ; Lock supprimé à l’étape 3
.gitignore dans code/ ? Non si déjà couvert par tokenizerRendu/.gitignore Évite les doublons ; le parent ignore déjà node_modules, cache, artifacts

Arborescence typique après init

tokenizerRendu/code/
├── contracts/
│   └── Lock.sol          # exemple — temporaire
├── test/
│   └── Lock.js           # tests de l’exemple
├── scripts/
│   └── (deploy Lock, etc.)
├── hardhat.config.js
├── package.json
└── package-lock.json

Checklist :

  • hardhat.config.js existe
  • contracts/Lock.sol existe (pour l’instant)

D. OpenZeppelin et dotenv

npm install @openzeppelin/contracts
npm install dotenv
  • OpenZeppelin : tu n’importes rien encore ; c’est pour l’étape 3 (import "@openzeppelin/contracts/...").
  • dotenv : charge les variables du fichier .env dans process.env au lancement de Hardhat.

Checklist :

  • Les deux paquets listés dans package.json → dependencies ou devDependencies

E. Configurer BSC Testnet dans hardhat.config.js

Ouvre hardhat.config.js et remplace son contenu par (ou fusionne proprement si tu préfères) :

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.24",
  networks: {
    bscTestnet: {
      url: process.env.BSC_TESTNET_RPC || "https://data-seed-prebsc-1-s1.binance.org:8545/",
      chainId: 97,
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
    },
  },
};

Ce que signifient les lignes importantes

  • solidity: "0.8.24" : version du compilateur pour tous les contrats (alignée avec OpenZeppelin récent).
  • bscTestnet : nom local du réseau ; tu l’utiliseras plus tard avec --network bscTestnet.
  • chainId: 97 : identifiant officiel BNB Smart Chain Testnet (doit correspondre à MetaMask).
  • accounts : si PRIVATE_KEY est vide, tableau vide → compile/tests locaux OK ; déploiement testnet nécessitera la clé (étape déploiement).

Tu ne déploies pas sur le testnet dans cette étape : tu prépares seulement la config.

Checklist :

  • require("dotenv").config(); présent
  • chainId: 97 présent

F. Fichiers .env et .env.example

Sécurité (à lire une fois pour toute la suite)

  • La clé privée = contrôle total du compte → compte de test uniquement (FGC_account).
  • Ne jamais : commit Git, capture d’écran publique, message Discord/chat avec la clé.
  • Si tu as un .env à la racine tokenizer/ (dépôt travail), le secret pour Hardhat doit vivre dans tokenizerRendu/code/.env (celui que lit hardhat.config.js).

tokenizerRendu/code/.env (local, ignoré par Git)

Crée le fichier à la main :

BSC_TESTNET_RPC=https://data-seed-prebsc-1-s1.binance.org:8545/
PRIVATE_KEY=0x................................................................

Obtenir la clé (MetaMask) : compte FGC_account → ⋮ → Détails du compte → Afficher la clé privée (mot de passe MetaMask) → copier avec le préfixe 0x.

tokenizerRendu/code/.env.example (à committer)

Même structure, sans vraie clé :

BSC_TESTNET_RPC=https://data-seed-prebsc-1-s1.binance.org:8545/
PRIVATE_KEY=

Le .gitignore du rendu (tokenizerRendu/.gitignore) contient déjà .env et autorise .env.example via !.env.example.

Checklist :

  • .env créé dans code/ (pas seulement à la racine tokenizer)
  • .env.example créé
  • git status ne liste pas .env comme fichier à committer

G. Vérifier la compilation

npx hardhat compile

Sortie attendue (succès)

Quelque chose comme :

Compiled 1 Solidity file successfully (evm target: paris).

Des dossiers cache/ et artifacts/ apparaissent (déjà ignorés par Git).

Tests optionnels (exemple Lock)

npx hardhat test

Si les tests passent, Hardhat + toolbox sont bien branchés. Ce n’est pas obligatoire pour valider l’étape 2, mais c’est rassurant.

Dépannage rapide

Problème Piste
HHE3 — No Hardhat config + « run with --init » Utiliser npx hardhat --init (Hardhat 3), pas npx hardhat init
HHE11 — pas de shell interactif Lancer --init dans ton terminal Cursor / système
Cannot find module '@nomicfoundation/hardhat-toolbox' Relancer npm install dans code/
Erreur Solidity / version Vérifier solidity dans hardhat.config.js et la version en tête de Lock.sol
PRIVATE_KEY / invalid account Normal si clé mal formatée ; compile ne nécessite pas la clé. Corriger avant déploiement.
Permission réseau npm Vérifier proxy / réseau ; réessayer npm install

Checklist :

  • npx hardhat compile sans erreur

H. Mettre à jour code/README.md

Ajoute une section courte (en français pour ton suivi ; README école final plus tard si besoin) :

  • Prérequis : Node ≥ 18
  • cd code && npm install
  • Copier .env.example → .env et remplir PRIVATE_KEY
  • npx hardhat compile
  • Prochaine étape : contrat FGC42Forge (étape 3)

Livrable pour vérification (dans le chat)

  1. « Étape 2 terminée »
  2. Copier uniquement la dernière ligne de succès de npx hardhat compile (pas de .env)
  3. Confirmer : .env.example présent, .env non commité

Ne pas envoyer la clé privée.


Après cette étape

  • Étape 3 : supprimer Lock.sol, ajouter FGC42Forge.sol (supply 1 000 000, pas de mint, Ownable), tests.
  • Déploiement testnet : plus tard, avec npx hardhat run scripts/... --network bscTestnet.

Références