diff --git a/docs/pedagogie/fiche-soutenance-tokenizer.md b/docs/pedagogie/fiche-soutenance-tokenizer.md index 6eddeec..c772d6d 100644 --- a/docs/pedagogie/fiche-soutenance-tokenizer.md +++ b/docs/pedagogie/fiche-soutenance-tokenizer.md @@ -3,7 +3,7 @@ > Fichier **perso**, hors dépôt école. Il sert à **réexpliquer le projet à voix haute** après une pause. > Le correcteur, lui, ne voit que `tokenizerRendu/` (README, `code/`, `deployment/`, `documentation/`). -Lis les sections 1 à 4 pour le récit. La section 5 pose le vocabulaire. Les sections 6 à 9 détaillent Solidity, chaque outil, et la fabrication du jeton dans l’ordre. La section 12 est le script de démo. La section 13 est la revue de code, fichier par fichier. +Lis les sections 1 à 4 pour le récit. La section 5 pose le vocabulaire. La section **6.5** résume **toute la stack** (définition + emboîtement). Les sections 6 à 10 détaillent choix, Solidity, outils et fabrication. La section 12 est le script de démo. La section 13 est la revue de code, fichier par fichier. --- @@ -155,6 +155,145 @@ npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts **BscScan.** Explorateur. Il montre l’adresse, le bytecode, les transactions, et, une fois la vérif faite, le Solidity lisible. Le sujet demande de publier le contrat sur un explorateur et de mettre l’adresse dans Git. La vérification du source n’est pas écrite mot pour mot dans le PDF ; c’est la preuve que tu montres en review. +→ Détail outil par outil et **emboîtement** : section **6.5** ci-dessous (à réviser avant la soutenance). + +--- + +## 6.5 Stack complète — définition, rôles, emboîtement + +Cette section reprend chaque brique du projet : **ce que c’est**, **son rôle pour FGC42Forge**, **où ça vit dans le dépôt**, et **comment ça s’enchaîne** avec le reste. Tu peux t’en servir comme trame si l’évaluateur demande « explique-moi ta toolchain ». + +### Vue d’ensemble (schéma) + +``` +Solidity (FGC42Forge.sol) → décrit le token (règles on-chain : supply, transfer…) + ↓ import +OpenZeppelin (ERC20, Ownable) → code standard audité, compilé avec ton fichier + ↓ compile / test / deploy +Hardhat 3 → atelier sur ta machine (Node.js) : solc, tests, réseau + ├─ Ignition → sous-partie Hardhat : déploiement reproductible + └─ toolbox → Mocha (lance les tests) + ethers (parle au contrat) + ↓ transaction signée +BSC Testnet (chainId 97) → enregistre le bytecode à l’adresse 0x0c76…0fF4 + ↓ lecture publique +BscScan → explorateur : tx, token, source vérifié +MetaMask → wallet utilisateur : import FG42, transfer, gas en tBNB +``` + +**Flux en une phrase :** tu **décris** le jeton en Solidity, tu **t’appuies** sur OpenZeppelin, **Hardhat** compile et teste hors ligne puis **déploie** via Ignition ; le résultat est **public** sur le testnet ; **BscScan** le prouve ; **MetaMask** montre l’usage réel sans Hardhat. + +**Point clé soutenance :** après le deploy, le token **ne dépend plus** de Hardhat ni de ton PC. Hardhat a servi à **fabriquer** le contrat ; MetaMask + BscScan servent à **montrer** qu’il vit on-chain. + +--- + +### Solidity — `code/contracts/FGC42Forge.sol` + +| | | +|---|---| +| **C’est quoi ?** | Langage des smart contracts **EVM**. Ton contrat est le **programme** exécuté par les nœuds de BSC. | +| **Rôle dans le projet** | Définit **FGC42Forge** : nom, symbole, supply fixe au constructeur, héritage ERC20 + Ownable. **C’est le cœur du sujet** (code review). | +| **Où / comment** | `pragma solidity ^0.8.34` ; une cinquantaine de lignes ; pas de `mint` public. | +| **Ce que ce n’est pas** | Pas le langage des tests (TypeScript) ni de la config Hardhat. | +| **Qui compile** | **Hardhat** appelle **solc** → bytecode + ABI. | +| **Phrase soutenance** | « Le livrable on-chain est un contrat Solidity minimal : constructeur qui mint une fois un million FG42 au déployeur, le reste c’est l’ERC-20 OpenZeppelin. » | + +--- + +### OpenZeppelin — `@openzeppelin/contracts` + +| | | +|---|---| +| **C’est quoi ?** | Bibliothèque Solidity **auditée**, installée via npm (`dependencies` dans `package.json`). | +| **Rôle dans le projet** | Fournit **`ERC20`** (BEP-20 fonctionnel) et **`Ownable`** (admin sans mint dans ton design). Tu n’as pas réécrit `transfer` / `balanceOf`. | +| **Où / comment** | `import {ERC20} from "..."` et `import {Ownable} from "..."` dans `FGC42Forge.sol`. | +| **Ce que ce n’est pas** | Pas un outil qui tourne à part : du **code source** fusionné au tien à la compilation. | +| **Lien suivant** | Le compilateur (via Hardhat) inclut ces fichiers ; **BscScan** voit tout via `FGC42Forge_flat.sol`. | +| **Phrase soutenance** | « J’ai choisi OpenZeppelin pour respecter le standard sans réinventer les fonctions sensibles. » | + +--- + +### Hardhat 3 — dossier `code/` + +| | | +|---|---| +| **C’est quoi ?** | **Toolchain** Node.js pour smart contracts EVM : compiler, tester, connecter aux RPC, tâches CLI. | +| **Rôle dans le projet** | Compile `FGC42Forge.sol`, lance **2 tests** locaux, configure **bscTestnet**, supporte **Ignition** et **flatten** pour BscScan. | +| **Où / comment** | `hardhat.config.ts` ; commandes depuis **`code/`** uniquement (`npx hardhat build`, `test`, `ignition deploy`). | +| **Ce que ce n’est pas** | Ni wallet, ni blockchain, ni explorateur. **Pas nécessaire** pour utiliser FG42 après deploy. | +| **Alternatives (sujet)** | Remix (navigateur), Truffle (legacy), Foundry (Rust) — tu as gardé Hardhat pour tests + deploy dans un repo Git. | +| **Phrase soutenance** | « Hardhat est mon atelier : compile, teste sur chaîne simulée, et envoie le deploy sur le testnet avec ma clé dans le .env local. » | + +--- + +### Hardhat Ignition — `code/ignition/modules/FGC42Forge.ts` + +| | | +|---|---| +| **C’est quoi ?** | Sous-système **Hardhat** de déploiement **déclaratif** (module TypeScript = « quoi déployer »). | +| **Rôle dans le projet** | Une ligne : `m.contract("FGC42Forge")`. Pas d’args → constructeur Solidity vide de paramètres. Produit la tx de **création** du contrat. | +| **Où / comment** | `npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts` | +| **Ce que ce n’est pas** | Pas le contrat lui-même ; pas l’adresse officielle dans Git (c’est **`deployment/addresses.json`**). | +| **Piège** | Redéployer = **nouvelle** adresse. En eval, tu montres le contrat **déjà** à `0x0c76…`. | +| **Phrase soutenance** | « Ignition automatise le deploy : le même module peut le reproduire, mais mon rendu documente l’adresse déjà en production sur le testnet. » | + +--- + +### ethers.js + Mocha — `code/test/FGC42Forge.ts` + +| | | +|---|---| +| **C’est quoi ?** | **Mocha** : framework qui exécute les tests (`describe` / `it`). **ethers** : bibliothèque pour déployer et appeler des contrats (adresses, signatures, appels de fonctions). | +| **Rôle dans le projet** | Hardhat 3 les branche via `hardhat-toolbox-mocha-ethers`. Tests : métadonnées + supply au deployer + **transfer** + événement `Transfer`. | +| **Où / comment** | `await network.create()` puis `ethers.deployContract("FGC42Forge")` ; `npx hardhat test --grep FGC42Forge` → **2 passing**. | +| **Ce que ce n’est pas** | Pas on-chain pendant les tests : chaîne **simulée** dans le processus Hardhat, **sans** tBNB. | +| **Lien avec MetaMask** | Même logique d’appel (`transfer`), mais en test c’est **ethers** qui signe avec des comptes fictifs Hardhat. | +| **Phrase soutenance** | « Les tests Mocha + ethers valident le comportement ERC-20 avant ou en parallèle du deploy réel, sans coût de gas. » | + +--- + +### MetaMask — hors dépôt Git + +| | | +|---|---| +| **C’est quoi ?** | Extension **wallet** : comptes `0x…`, réseaux (chainId), signature de transactions, affichage des tokens. | +| **Rôle dans le projet** | **Démo utilisateur** : réseau BSC Testnet (97), import FG42 par **adresse du contrat**, **transfer** entre comptes (ex. FGC_account → demo). Gas en **tBNB**, pas en FG42. | +| **Où / comment** | Procédure dans `tokenizerRendu/documentation/README.md`. Même RPC que `BSC_TESTNET_RPC` dans `.env`. | +| **Ce que ce n’est pas** | Pas utilisé pour compiler ni pour le premier deploy (Hardhat + `PRIVATE_KEY` dans `.env`). | +| **Lien avec Hardhat** | Peut être le **même** compte (FGC_account) : clé dans MetaMask **et** dans `.env` pour Ignition — jamais la clé dans Git. | +| **Phrase soutenance** | « MetaMask prouve qu’un utilisateur peut importer FG42 et transférer ; Hardhat, lui, prouve que le code est correct en amont. » | + +--- + +### BscScan — explorateur testnet + +| | | +|---|---| +| **C’est quoi ?** | **Explorateur de blocs** pour BNB Chain : adresses, transactions, contrats, pages **token** BEP-20. | +| **Rôle dans le projet** | Preuve **publique** : tx de création, supply 1M, transfers ; onglet **Contract** avec **source vérifié** (flatten + optimizer 200). | +| **Où / comment** | URLs dans README et `deployment/addresses.json` ; fiche technique `deployment/BSCSCAN_VERIFICATION.md`. | +| **Ce que ce n’est pas** | Pas un outil de développement : tu ne « codes » pas dessus ; tu **publies** et **montres**. | +| **Lien avec Hardhat** | `npx hardhat flatten` → `FGC42Forge_flat.sol` pour le formulaire « Verify & Publish ». | +| **Phrase soutenance** | « BscScan est la vitrine du sujet : adresse dans Git, contrat visible et vérifié, historique des transfers pour la démo. » | + +--- + +### Tableau récap — qui fait quoi, quand ? + +| Étape | Outil(s) | Machine / lieu | +|-------|----------|----------------| +| Écrire le token | Solidity + OpenZeppelin | Fichiers dans `code/contracts/` | +| Vérifier sans gas | Hardhat + Mocha + ethers | Local, `npx hardhat test` | +| Mettre en ligne | Hardhat + Ignition + `.env` | Tx vers BSC Testnet | +| Enregistrer la preuve | `addresses.json`, README | Git rendu | +| Prouver le source | Hardhat flatten + BscScan | Web | +| Montrer l’usage | MetaMask + BscScan | Navigateur, soutenance | + +--- + +### Phrase d’ensemble (45 s) — toolchain complète + +« Mon token est défini en **Solidity** dans `FGC42Forge.sol`, en m’appuyant sur **OpenZeppelin** pour l’ERC-20 et Ownable. **Hardhat** compile ce code, **Mocha** et **ethers** passent deux tests sur une chaîne locale, puis **Ignition** a déployé sur **BSC Testnet**. L’adresse est dans le README et `deployment/addresses.json`. **BscScan** affiche le contrat vérifié et les transfers. Pour la démo, **MetaMask** importe FG42 et envoie des jetons ; le gas reste en tBNB. Une fois déployé, le jeton vit sur la chaîne : Hardhat n’est plus nécessaire pour l’utiliser. » + --- ## 7. Solidity, le langage du contrat