161 lines
7.2 KiB
Markdown
161 lines
7.2 KiB
Markdown
# Hardhat et alternatives (Remix, Truffle, Foundry…)
|
||
|
||
> **Contexte :** projet Tokenizer — dossier `code/` + `deployment/` ([sujet ch. IV](../sujets/tokenizer.md#chapitre-iv--partie-obligatoire)).
|
||
> **Choix projet :** [decisions-projet.md](decisions-projet.md) → **Hardhat** + OpenZeppelin.
|
||
|
||
---
|
||
|
||
## 1. Le problème que résout une « toolchain »
|
||
|
||
Écrire un fichier `.sol` ne suffit pas. Il faut :
|
||
|
||
| Besoin | Sans outil | Avec toolchain |
|
||
|--------|------------|----------------|
|
||
| Traduire Solidity en bytecode | Impossible à la main | **Compilation** |
|
||
| Vérifier que `transfer` marche | Deploy à chaque essai sur testnet (gas) | **Tests** locaux |
|
||
| Envoyer le contrat sur BSC testnet | Tx manuelle complexe | **Scripts de déploiement** |
|
||
| Reproduire le deploy pour l’éval | Oublis, « ça marche sur ma machine » | Scripts + config **versionnés** dans Git |
|
||
|
||
Le sujet cite explicitement : **IDE**, **Remix**, **Truffle** ou **Hardhat** — ce sont des **outils** pour compiler, tester et déployer, pas le standard BEP-20 lui-même.
|
||
|
||
---
|
||
|
||
## 2. C’est quoi Hardhat ?
|
||
|
||
**Hardhat** est un **environnement de développement** pour smart contracts sur chaînes **EVM** (Ethereum, BSC, etc.).
|
||
|
||
- Écrit en **JavaScript / TypeScript** (Node.js).
|
||
- Projet typique : `hardhat.config.js`, dossier `contracts/`, `scripts/`, `test/`.
|
||
- Commandes courantes :
|
||
- `npx hardhat compile` — compile Solidity → artefacts dans `artifacts/`
|
||
- `npx hardhat test` — lance les tests (souvent avec **ethers.js**)
|
||
- `npx hardhat run scripts/deploy.js --network bscTestnet` — déploie sur le testnet
|
||
- `npx hardhat node` — blockchain **locale** temporaire (0 tBNB réel, pour dev)
|
||
|
||
**Rôle dans Tokenizer :**
|
||
|
||
| Dossier sujet | Rôle Hardhat |
|
||
|---------------|--------------|
|
||
| **`code/`** | Sources `.sol`, config Hardhat, tests, `package.json` |
|
||
| **`deployment/`** | Scripts / notes de deploy (souvent `scripts/deploy.js` appelé depuis `code/`, ou copie documentée — l’important est que l’évaluateur retrouve **comment** redéployer) |
|
||
|
||
Hardhat ne remplace pas **MetaMask** : MetaMask **signe** ; Hardhat utilise ta **clé privée** (via `.env`) pour envoyer la transaction de deploy depuis le terminal.
|
||
|
||
---
|
||
|
||
## 3. Les briques autour de Hardhat (vocabulaire)
|
||
|
||
| Terme | Rôle |
|
||
|-------|------|
|
||
| **Solidity** | Langage du contrat (FGC42Forge.sol) |
|
||
| **OpenZeppelin** | Bibliothèque de contrats éprouvés (`ERC20`, `Ownable`) |
|
||
| **ethers.js** | Bibliothèque JS pour parler à la chaîne (lire balances, envoyer txs) |
|
||
| **RPC** | URL dans `hardhat.config` → même idée que MetaMask ([02-web3 § 3.9](02-web3-comprendre.md#39-réseau-rpc)) |
|
||
| **@nomicfoundation/hardhat-toolbox** | Pack plugins (tests, verify, etc.) recommandé par Hardhat |
|
||
| **artifacts/** | Sortie compilée (bytecode) — souvent **gitignoré**, régénéré par `compile` |
|
||
| **BscScan verify** | Publier le code source sur l’explorer (étape deploy, hors Hardhat strict mais complémentaire) |
|
||
|
||
---
|
||
|
||
## 4. Alternatives citées par le sujet (et autres)
|
||
|
||
### Remix (IDE navigateur)
|
||
|
||
| | |
|
||
|---|---|
|
||
| **C’est quoi** | Site [remix.ethereum.org](https://remix.ethereum.org) : éditeur + compile + deploy **dans le navigateur**. |
|
||
| **Pour** | Prototyper vite, premier contrat, démo visuelle, cours. |
|
||
| **Contre** | Moins pratique pour un **dépôt 42** structuré (`code/`, tests, CI, scripts reproductibles). |
|
||
| **Tokenizer** | Autorisé par le sujet ; beaucoup d’étudiants font un **premier test** sur Remix puis migrent vers Hardhat/Truffle pour le rendu. |
|
||
|
||
### Truffle
|
||
|
||
| | |
|
||
|---|---|
|
||
| **C’est quoi** | Framework Node.js **plus ancien** que Hardhat : Truffle Compile, Migrate, Ganache. |
|
||
| **Pour** | Cycle complet migrations + tests ; encore vu en entreprise / anciens tutos. |
|
||
| **Contre** | Écosystème moins « par défaut » qu’Hardhat aujourd’hui ; config parfois plus lourde. |
|
||
| **Exemple 42** | [BdClement/Tokenizer](https://github.com/BdClement/Tokenizer) a choisi **Truffle** + Alchemy RPC — **valide** si README explique les choix. |
|
||
|
||
### Foundry (forge / cast)
|
||
|
||
| | |
|
||
|---|---|
|
||
| **C’est quoi** | Toolchain en **Rust** : `forge` (compile/test), `cast` (CLI), très rapide, tests souvent **en Solidity**. |
|
||
| **Pour** | Perf, culture « smart contract pur », projets DeFi avancés. |
|
||
| **Contre** | Courbe d’apprentissage différente (moins JS) ; moins cité dans le PDF Tokenizer. |
|
||
| **Tokenizer** | Possible si BEP-20 + deploy testnet + doc — à **justifier** dans le README école. |
|
||
|
||
### Autres (hors PDF mais utiles à situer)
|
||
|
||
| Outil | Note |
|
||
|-------|------|
|
||
| **Ganache / `hardhat node`** | Blockchain locale pour tests |
|
||
| **Brownie** | Python — plutôt écosystème Ethereum historique |
|
||
| **Thirdweb, etc.** | Abstractions / SDK — le sujet demande de **comprendre** ce que tu déploies ; éviter le « tout no-code » en soutenance |
|
||
|
||
---
|
||
|
||
## 5. Tableau comparatif (révision soutenance)
|
||
|
||
| Critère | Hardhat | Remix | Truffle | Foundry |
|
||
|---------|---------|-------|---------|---------|
|
||
| Où ça tourne | Terminal + VS Code | Navigateur | Terminal | Terminal |
|
||
| Langage orchestration | JS/TS | GUI | JS | Rust + Solidity tests |
|
||
| Tests automatisés | ✅ (Mocha/Chai) | Limité | ✅ | ✅ (forge) |
|
||
| Scripts deploy reproductibles | ✅ | Manuel | ✅ (migrations) | ✅ |
|
||
| Cité sujet Tokenizer | ✅ | ✅ | ✅ | ❌ (mais EVM OK) |
|
||
| Fit dossiers `code/` + `deployment/` | ✅ très bon | Moyen seul | ✅ bon | ✅ bon |
|
||
|
||
Le sujet **n’impose pas** Hardhat : il impose de **maîtriser un outil** et de livrer du **code commenté** + deploy documenté.
|
||
|
||
---
|
||
|
||
## 6. Pourquoi Hardhat pour *ton* parcours FGC ?
|
||
|
||
| Raison | Détail |
|
||
|--------|--------|
|
||
| Alignement doc 42 / tutoriels BEP-20 | Beaucoup d’exemples OpenZeppelin + Hardhat |
|
||
| Un seul écosystème **Node** | `npm install`, proche d’autres stacks JS |
|
||
| Tests avant testnet | Économise tes **0,1 tBNB** |
|
||
| `hardhat.config.js` | Réseau **bscTestnet** chainId **97** = même logique que MetaMask |
|
||
| Séparation claire | `contracts/` + `scripts/` → facile à expliquer en **code review** |
|
||
|
||
Tu pourrais dire en soutenance :
|
||
|
||
> « J’ai choisi **Hardhat** pour compiler et tester **FGC42Forge** en local, puis déployer sur **BSC Testnet** avec un script reproductible dans le dépôt, comme le sujet le prévoit pour la partie deployment. »
|
||
|
||
---
|
||
|
||
## 7. Flux mental : de Hardhat à la chaîne
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
subgraph local [Machine dev]
|
||
SOL[FGC42Forge.sol]
|
||
HH[Hardhat compile / test]
|
||
SCRIPT[script deploy.js]
|
||
end
|
||
subgraph chain [BSC Testnet 97]
|
||
RPC[RPC URL]
|
||
SC[Adresse contrat]
|
||
end
|
||
SOL --> HH
|
||
HH --> SCRIPT
|
||
SCRIPT -->|tx signée PRIVATE_KEY| RPC
|
||
RPC --> SC
|
||
SC --> BSCScan[testnet.bscscan.com]
|
||
```
|
||
|
||
MetaMask reste utile pour **démos manuelles** (`transfer` FG42) ; Hardhat sert surtout au **deploy** et aux **tests**.
|
||
|
||
---
|
||
|
||
## 8. Liens
|
||
|
||
- **Index complet tutos & docs :** [ressources-solidity-hardhat.md](ressources-solidity-hardhat.md)
|
||
- [Hardhat — Getting started](https://hardhat.org/hardhat-runner/docs/getting-started)
|
||
- [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/)
|
||
- Étape suivante : [etape-02-init-hardhat.md](etapes/etape-02-init-hardhat.md)
|
||
- [guide-realisation.md](guide-realisation.md)
|