diff --git a/docs/pedagogie/00-reprise-et-etat.md b/docs/pedagogie/00-reprise-et-etat.md index 95642de..61b7fa8 100644 --- a/docs/pedagogie/00-reprise-et-etat.md +++ b/docs/pedagogie/00-reprise-et-etat.md @@ -1,83 +1,50 @@ # Reprise du projet — où nous en sommes -> Dernière mise à jour : démarrage parcours guidé — **étape 1 en cours**. +> Dernière mise à jour : **2026-10-20** — partie obligatoire Tokenizer **terminée** ; bonus multisig **non retenu**. ## En bref | | | |---|---| -| **Fait** | Dépôt de travail, sujet FR v1.1, captures PDF, plan pédagogique, paquet `tokenizerRendu/` | -| **Fait** | **Étape 1** — FGC42Forge / FG42, wallet **FGC_account**, **0,1 tBNB** (Telegram faucet) | -| **En cours** | **[Étape 2](etapes/etape-02-init-hardhat.md)** — projet Hardhat dans `tokenizerRendu/code/` | -| **Prochaine action** | Suivre le guide étape 2 puis demander vérification | +| **Fait** | Token **FGC42Forge** / **FG42**, BSC Testnet, deploy + BscScan vérifié | +| **Fait** | `code/` (contrat commenté, tests, Hardhat), `deployment/`, `documentation/` | +| **Fait** | Démo transfer MetaMask (FGC_account → demo_account) | +| **Non retenu** | Bonus multisig (manque de temps) | +| **Avant Vogosphere** | Push `tokenizerRendu/`, checklist [demo](checklist-demo-evaluation.md), pas de `.env` | -## Arborescence actuelle +## Contrat (référence rapide) -``` -tokenizer/ ← dépôt Git de TRAVAIL (perso) -├── README.md -├── .gitignore -├── tokenizer.pdf ← copie locale du sujet (optionnel) -├── docs/ -│ ├── README.md -│ ├── sujets/ -│ │ ├── tokenizer.md -│ │ ├── originaux/tokenizer_subject.pdf -│ │ └── captures/page-01.png … page-10.png -│ └── pedagogie/ -│ ├── README.md -│ ├── 00-reprise-et-etat.md ← ce fichier -│ ├── parcours-etape-par-etape.md -│ ├── decisions-projet.md ← suivi étape 1+ (travail) -│ ├── etapes/etape-01-…md -│ ├── 01-apports-pedagogiques.md -│ ├── 02-web3-comprendre.md -│ └── guide-realisation.md -└── tokenizerRendu/ ← futur dépôt ÉCOLE (racine Vogosphere) - ├── README.md - ├── code/ - ├── deployment/ - └── documentation/ -``` +| Champ | Valeur | +|-------|--------| +| Adresse | `0x0c76df26A1149fDc22C8f994975705271b070fF4` | +| Réseau | BSC Testnet, chainId `97` | +| Code commenté | `tokenizerRendu/code/contracts/FGC42Forge.sol` | -## Décisions à prendre (non figées) - -| Sujet | Options | Recommandation doc | -|-------|---------|-------------------| -| Chaîne | BSC testnet, Sepolia, autre EVM | **BSC testnet** (partenariat BNB, faucet tBNB) | -| Toolchain | Hardhat, Foundry, Remix seul | **Hardhat** pour scripts reproductibles dans `deployment/` | -| Lib | OpenZeppelin ERC20 → BEP-20 | **OpenZeppelin** pour ownership et standard éprouvé | -| Nom / symbole | Doit contenir `42` | **`FGC42Forge`** / **`FG42`** — voir [decisions-projet.md](decisions-projet.md) | -| Bonus multisig | Gnosis Safe, contrat custom | Seulement après obligatoire **parfaite** | - -## Avancement par étape (parcours guidé) +## Avancement par étape → Détail : [parcours-etape-par-etape.md](parcours-etape-par-etape.md) | Étape | Contenu | Statut | |-------|---------|--------| -| **0** | Structure, traduction, séparation travail / école | ✅ **Terminé** | -| **1** | Cadrage + wallet + tBNB + `decisions-projet.md` | ✅ **Validée** (0,1 tBNB, tx BscScan) | -| **2** | Init Hardhat dans `tokenizerRendu/code/` | 🔄 **À démarrer** | -| **3** | Contrat BEP-20 + tests | ⏳ | -| **4** | `deployment/` + deploy testnet + BscScan | ⏳ | -| **5** | `tokenizerRendu/documentation/` + README école | ⏳ | -| **6** | Démo + code review (préparation soutenance) | ⏳ | -| **7** | Bonus multisig | ⏳ | +| **0–1** | Structure, wallet, tBNB | ✅ | +| **2** | Hardhat 3 dans `code/` | ✅ | +| **3** | Contrat + tests | ✅ | +| **4** | Deploy + `deployment/` + BscScan verify | ✅ | +| **5** | `documentation/` + README choix techniques | ✅ | +| **6** | Démo + commentaires code (revue) | ✅ | +| **7** | Bonus multisig | ❌ Non retenu | -## Reprendre le travail (checklist) +## Reprendre avant correction -1. Ouvrir le dépôt : `~/projets/42School/tokenizer` -2. Relire la [partie obligatoire](../sujets/tokenizer.md#chapitre-iv--partie-obligatoire) -3. Suivre [guide-realisation.md](guide-realisation.md) depuis l’étape en cours -4. Ne committer **aucune clé privée** — `.env` local uniquement (voir `.gitignore` rendu) -5. Après déploiement : mettre à jour **ce fichier** + `tokenizerRendu/README.md` avec adresse et réseau +1. `cd tokenizerRendu/code && npx hardhat test mocha --grep FGC42Forge` +2. Parcourir [checklist-demo-evaluation.md](checklist-demo-evaluation.md) +3. Ouvrir `FGC42Forge.sol` + README racine rendu pour la soutenance -## Fichiers à renseigner après le code +## Fichiers clés -| Fichier | Quand | -|---------|--------| -| `tokenizerRendu/README.md` | Choix techniques + adresse contrat + réseau | -| `tokenizerRendu/deployment/` | Scripts et éventuellement `deployed.json` | -| `tokenizerRendu/documentation/` | Guide d’usage du token | -| Ce fichier | À chaque jalon important | +| Fichier | Rôle | +|---------|------| +| `tokenizerRendu/README.md` | Vue école + choix techniques | +| `tokenizerRendu/code/README.md` | Index code commenté pour correcteur | +| `tokenizerRendu/deployment/BSCSCAN_VERIFICATION.md` | Vérif explorateur | +| `docs/pedagogie/decisions-projet.md` | Suivi perso (hors rendu) | diff --git a/docs/pedagogie/checklist-demo-evaluation.md b/docs/pedagogie/checklist-demo-evaluation.md index 05bd7b4..f8d0762 100644 --- a/docs/pedagogie/checklist-demo-evaluation.md +++ b/docs/pedagogie/checklist-demo-evaluation.md @@ -30,7 +30,7 @@ | **B4** | MetaMask **FGC_account** → transfer **100 FG42** → **demo_account** | `transfer` ERC-20 ; gas en **tBNB** | | **B5** | BscScan transfers + solde **demo_account** | Preuve on-chain | | **B6** | `documentation/README.md` | Un évaluateur peut importer le token et transférer sans ton aide | -| **B7** | (Optionnel) `code/contracts/FGC42Forge.sol` | OpenZeppelin **ERC20 + Ownable** ; `_mint` **uniquement** au constructeur — **pas de mint** public | +| **B7** | `code/contracts/FGC42Forge.sol` (commenté) | OpenZeppelin **ERC20 + Ownable** ; supply fixe ; index : `code/README.md` § relecture | | **B8** | (Optionnel) `npx hardhat test` | Tests automatisés avant deploy | --- diff --git a/docs/pedagogie/decisions-projet.md b/docs/pedagogie/decisions-projet.md index 2675074..1f5584e 100644 --- a/docs/pedagogie/decisions-projet.md +++ b/docs/pedagogie/decisions-projet.md @@ -22,7 +22,7 @@ | Champ | Valeur | Concept | Référence | |-------|--------|---------|-----------| | **Date** | 2026-10-19 | Date de gel des décisions de cadrage (reprise projet). | [00-reprise-et-etat.md](00-reprise-et-etat.md) | -| **Étape** | **1 validée** (2026-10-20) | Wallet + **0,1 tBNB** via Telegram @bnbchain_official_bot. | [etape-01](etapes/etape-01-cadrage-wallet-testnet.md) | +| **Étape** | **Obligatoire terminée** (2026-10-20) | Deploy `0x0c76…0fF4` · doc · vérif BscScan · bonus non retenu | [parcours](parcours-etape-par-etape.md) | | **Auteur / initiales** | FGC | Contexte perso du nom du token (pas une exigence du PDF). | — | --- diff --git a/docs/pedagogie/parcours-etape-par-etape.md b/docs/pedagogie/parcours-etape-par-etape.md index 2361bb5..a8af219 100644 --- a/docs/pedagogie/parcours-etape-par-etape.md +++ b/docs/pedagogie/parcours-etape-par-etape.md @@ -21,8 +21,8 @@ | **3** | *(contrat + tests)* | `FGC42Forge.sol` + tests Mocha | ✅ | | **4** | [etapes/etape-04-deploy-testnet.md](etapes/etape-04-deploy-testnet.md) | Dossier `deployment/` + deploy + BscScan | ✅ | | **5** | `tokenizerRendu/documentation/README.md` | Doc utilisateur + choix techniques README | ✅ | -| **6** | [checklist-demo-evaluation.md](checklist-demo-evaluation.md) | Démo minimale + préparation code review | 🔄 | -| **7** | *(à venir)* | Bonus multisig (optionnel) | ⏳ | +| **6** | [checklist-demo-evaluation.md](checklist-demo-evaluation.md) | Démo + code commenté (`FGC42Forge.sol`, config, tests) | ✅ | +| **7** | — | Bonus multisig (optionnel) | ❌ Non retenu | ## Fichier de suivi (travail) diff --git a/tokenizerRendu/README.md b/tokenizerRendu/README.md index bc4e890..21219f8 100644 --- a/tokenizerRendu/README.md +++ b/tokenizerRendu/README.md @@ -13,6 +13,7 @@ Projet 42 — création et déploiement d’un **token** sur blockchain publique | Smart contract (`code/`) | **FGC42Forge** + tests Hardhat | | Déploiement (`deployment/`) | **Testnet** — voir [`deployment/addresses.json`](deployment/addresses.json) | | Documentation utilisateur (`documentation/`) | **Rédigée** — [`documentation/README.md`](documentation/README.md) | +| Code review (commentaires) | **`contracts/FGC42Forge.sol`** + index [`code/README.md`](code/README.md) | ## Token @@ -81,7 +82,7 @@ npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts ## Bonus -*(Si implémenté : multisig — décrire ici où se trouve le code et comment le tester.)* +**Non implémenté** (choix volontaire : priorité à une partie obligatoire stable et documentée). Le sujet propose un **multisig** en bonus ; non requis pour la correction du token BEP-20. ## Vidéo démo (optionnel) diff --git a/tokenizerRendu/code/.env.example b/tokenizerRendu/code/.env.example index 53f9ec5..12388f8 100644 --- a/tokenizerRendu/code/.env.example +++ b/tokenizerRendu/code/.env.example @@ -1,2 +1,8 @@ +# Copier ce fichier vers `.env` (ignoré par Git) et remplir PRIVATE_KEY. +# Compte de TEST uniquement — jamais de fonds mainnet / seed phrase dans le dépôt. + +# Point d'accès RPC BNB Smart Chain Testnet (chainId 97) BSC_TESTNET_RPC=https://data-seed-prebsc-1-s1.binance.org:8545/ + +# Clé privée du compte qui déploie (64 caractères hex après 0x) — PAS l'adresse publique 0x... PRIVATE_KEY= diff --git a/tokenizerRendu/code/README.md b/tokenizerRendu/code/README.md index c5b2698..98ee28c 100644 --- a/tokenizerRendu/code/README.md +++ b/tokenizerRendu/code/README.md @@ -1,81 +1,85 @@ # Code — FGC42Forge (Hardhat 3) -Sources du token **FGC42Forge** (symbole **FG42**), standard **BEP-20**, déploiement prévu sur **BNB Smart Chain Testnet** (chainId **97**). +Sources du token **FGC42Forge** (symbole **FG42**), standard **BEP-20**, déployé sur **BNB Smart Chain Testnet** (chainId **97**). -Stack : **Solidity**, **Hardhat 3**, **OpenZeppelin**, tests **Mocha + ethers** et tests Solidity (`.t.sol`). +Stack : **Solidity 0.8.34**, **Hardhat 3**, **OpenZeppelin 5**, tests **Mocha + ethers**. + +Adresse déployée et vérif BscScan : [`../deployment/addresses.json`](../deployment/addresses.json) · [`../deployment/BSCSCAN_VERIFICATION.md`](../deployment/BSCSCAN_VERIFICATION.md) + +--- + +## Guide relecture (correcteur / code review) + +| Fichier | Contenu commenté | +|---------|------------------| +| **`contracts/FGC42Forge.sol`** | **Contrat principal** — NatSpec, contraintes sujet, supply fixe, sécurité, fonctions héritées | +| `test/FGC42Forge.ts` | Tests du token (métadonnées, transfer, supply) | +| `ignition/modules/FGC42Forge.ts` | Module de déploiement Ignition | +| `hardhat.config.ts` | Compilateur, réseau `bscTestnet`, variables d’environnement | + +Fichiers **hors livrable token** (template Hardhat) : `contracts/Counter.sol`, `Counter.t.sol`, `test/Counter.ts` — le jeton évalué est **FGC42Forge** uniquement. + +--- ### BEP-20 vs `ERC20` dans le code -- **Rendu / soutenance :** token **BEP-20** sur **BNB Smart Chain Testnet** (chainId 97). -- **Code :** héritage **OpenZeppelin `ERC20`** — norme EVM identique en pratique ; pas de bibliothèque `BEP20` séparée. -- **Après deploy :** BscScan classera le contrat en **BEP-20** ; le **code source** utilise toujours `import {ERC20} from "@openzeppelin/contracts/..."`. +- **Soutenance :** jeton **BEP-20** sur BSC Testnet. +- **Code :** héritage **OpenZeppelin `ERC20`** (interface EVM identique ; pas de module `BEP20` séparé). +- **BscScan :** affiche BEP-20 après déploiement ; vérification du **code source** via `deployment/FGC42Forge_flat.sol`. -> Le dossier peut encore contenir l’exemple **Counter** (template Hardhat) en attendant nettoyage. +--- ## Prérequis - Node.js ≥ 18 (Hardhat 3 recommande v22+) -- Compte testnet avec **tBNB** (ex. MetaMask, réseau BSC Testnet) +- Compte testnet avec **tBNB** pour deploy / gas ## Installation ```shell cd code npm install -``` - -## Variables d’environnement - -Copier le modèle et remplir les valeurs **localement** (ne jamais committer `.env`) : - -```shell cp .env.example .env +# Éditer .env : PRIVATE_KEY = clé privée (pas l'adresse wallet) ``` | Variable | Description | |----------|-------------| -| `BSC_TESTNET_RPC` | URL RPC du testnet BSC (défaut dans `.env.example`) | -| `PRIVATE_KEY` | Clé privée du compte de **test** uniquement (préfixe `0x`) | - -Hardhat lit ces variables via `hardhat.config.ts` et `dotenv`. +| `BSC_TESTNET_RPC` | URL RPC BSC Testnet | +| `PRIVATE_KEY` | Signataire des transactions Hardhat (deploy) | ## Commandes utiles -Compiler les contrats : - ```shell npx hardhat build +npx hardhat test mocha --grep FGC42Forge ``` -Lancer tous les tests (exemple Counter, en attendant FGC42Forge) : +Tous les tests (inclut l’exemple Counter du template) : ```shell npx hardhat test ``` -Tests séparés : - -```shell -npx hardhat test solidity -npx hardhat test mocha -``` - -## Réseau `bscTestnet` - -Le réseau **`bscTestnet`** est déclaré dans `hardhat.config.ts`. Pour un déploiement (plus tard, avec Ignition ou un script) : +## Déploiement (déjà effectué — reproduction) ```shell npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts ``` -Voir aussi [`../deployment/README.md`](../deployment/README.md). +Détails : [`../deployment/README.md`](../deployment/README.md) -## Structure +## Arborescence ``` -contracts/ Contrats Solidity (+ tests .t.sol) -test/ Tests TypeScript (Mocha) -ignition/ Modules de déploiement Hardhat Ignition -scripts/ Scripts `hardhat run` -hardhat.config.ts +contracts/ + FGC42Forge.sol ← token BEP-20 (commenté pour la soutenance) + Counter.* ← exemple Hardhat (optionnel) +test/ + FGC42Forge.ts ← tests du token +ignition/modules/ + FGC42Forge.ts ← deploy Ignition +hardhat.config.ts ← réseau bscTestnet + Solidity 0.8.34 ``` + +Documentation utilisateur (wallet, transfers) : [`../documentation/README.md`](../documentation/README.md) diff --git a/tokenizerRendu/code/contracts/FGC42Forge.sol b/tokenizerRendu/code/contracts/FGC42Forge.sol index bfadbd4..7b8a3b5 100644 --- a/tokenizerRendu/code/contracts/FGC42Forge.sol +++ b/tokenizerRendu/code/contracts/FGC42Forge.sol @@ -1,17 +1,51 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.34; +// --- Imports (OpenZeppelin 5.x) --- +// ERC20 : implémentation standard d’un jeton fongible (transfer, balanceOf, totalSupply, …). +// Sur BNB Smart Chain, l’explorateur qualifie ce type de jeton en BEP-20. +// Ownable : un compte « owner » pour l’administration du contrat (sans mint dans ce projet). import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; -/// @title FGC42Forge — jeton fongible pour BNB Smart Chain Testnet -/// @notice Standard **BEP-20** (exigé sur BSC) : même interface que l’ERC-20 sur l’EVM. -/// On importe OpenZeppelin `ERC20` ; après déploiement sur BSC, BscScan affiche un token BEP-20. -/// Phrase soutenance : « BEP-20 sur la chaîne, implémenté via ERC20 OpenZeppelin. » +/** + * @title FGC42Forge + * @notice Jeton pédagogique du projet 42 Tokenizer — réseau BNB Smart Chain Testnet uniquement. + * + * Contraintes sujet : + * - Nom contenant « 42 » : FGC42Forge (symbole FG42). + * - Standard de la chaîne : BEP-20 (code via OpenZeppelin ERC20). + * - Supply fixe : 1 000 000 jetons, créés une seule fois au déploiement (pas de mint public). + * + * Sécurité (soutenance) : + * - Toute la supply est mintée au constructeur vers le déployeur (msg.sender). + * - Aucune fonction publique permettant d’augmenter totalSupply après deploy. + * - owner() peut gérer le rôle admin OpenZeppelin (ex. transferOwnership), pas créer de FG42. + */ contract FGC42Forge is ERC20, Ownable { + /** + * @dev Offre initiale en plus petite unité (18 décimales, convention ERC-20). + * 1 FG42 affiché dans un wallet = 1 * 10^18 unités internes. + * Literal : 1_000_000 * 10^18 (lisible ; équivalent à 1_000_000 * 10**decimals()). + */ uint256 private constant INITIAL_SUPPLY = 1_000_000 * (10 ** 18); + /** + * @notice Déploie le token et forge toute la supply pour le compte qui envoie la transaction. + * + * @dev Ordre des initialiseurs de héritage : + * 1. ERC20("FGC42Forge", "FG42") — nom et symbole on-chain (MetaMask, BscScan). + * 2. Ownable(msg.sender) — le déployeur devient owner (admin du contrat). + * 3. _mint(msg.sender, INITIAL_SUPPLY) — émission unique ; pas d’appel mint ultérieur prévu. + */ constructor() ERC20("FGC42Forge", "FG42") Ownable(msg.sender) { _mint(msg.sender, INITIAL_SUPPLY); } -} \ No newline at end of file + + // ------------------------------------------------------------------------- + // Fonctions ERC-20 héritées (non redéfinies ici) — utilisables telles quelles : + // name(), symbol(), decimals(), totalSupply(), balanceOf(), transfer(), + // approve(), transferFrom(), allowance(), événements Transfer / Approval. + // Fonctions Ownable héritées : owner(), transferOwnership(), renounceOwnership(). + // ------------------------------------------------------------------------- +} diff --git a/tokenizerRendu/code/hardhat.config.ts b/tokenizerRendu/code/hardhat.config.ts index 5826180..0fb5405 100644 --- a/tokenizerRendu/code/hardhat.config.ts +++ b/tokenizerRendu/code/hardhat.config.ts @@ -1,10 +1,24 @@ +/** + * Configuration Hardhat 3 — projet FGC42Forge (Tokenizer 42). + * + * - Compile Solidity (profils default / production). + * - Tests Mocha + ethers via hardhat-toolbox-mocha-ethers. + * - Déploiement testnet : réseau `bscTestnet` (BNB Smart Chain, chainId 97). + * + * Secrets : variables lues depuis `code/.env` (voir `.env.example`). + * Ne jamais committer PRIVATE_KEY. + */ import hardhatToolboxMochaEthersPlugin from "@nomicfoundation/hardhat-toolbox-mocha-ethers"; import { configVariable, defineConfig } from "hardhat/config"; + +// Charge BSC_TESTNET_RPC et PRIVATE_KEY depuis le fichier .env local. import "dotenv/config"; export default defineConfig({ plugins: [hardhatToolboxMochaEthersPlugin], + solidity: { + // Deux profils : dev (default) et production (optimizer activé — proche du deploy Ignition). profiles: { default: { version: "0.8.34", @@ -20,7 +34,9 @@ export default defineConfig({ }, }, }, + networks: { + // Chaînes simulées locales (template Hardhat 3 — utiles pour tests génériques). hardhatMainnet: { type: "edr-simulated", chainType: "l1", @@ -29,6 +45,9 @@ export default defineConfig({ type: "edr-simulated", chainType: "op", }, + + // Réseau public de test — déploiement réel du token (gas en tBNB). + // Usage : npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts bscTestnet: { type: "http", chainType: "l1", diff --git a/tokenizerRendu/code/ignition/modules/FGC42Forge.ts b/tokenizerRendu/code/ignition/modules/FGC42Forge.ts index 29c87c1..a728951 100644 --- a/tokenizerRendu/code/ignition/modules/FGC42Forge.ts +++ b/tokenizerRendu/code/ignition/modules/FGC42Forge.ts @@ -1,9 +1,14 @@ +/** + * Module Hardhat Ignition — déploiement de FGC42Forge sur le réseau cible. + * + * Usage (depuis code/) : + * npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts + * + * Le constructeur du contrat mint 1 000 000 FG42 vers l’adresse qui signe la tx (PRIVATE_KEY dans .env). + * Adresse enregistrée : deployment/addresses.json + */ import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; -/** - * Déploie FGC42Forge sur le réseau passé à `ignition deploy` (ex. bscTestnet). - * Le constructeur mint toute la supply au compte qui signe le déploiement. - */ export default buildModule("FGC42ForgeModule", (m) => { const token = m.contract("FGC42Forge"); diff --git a/tokenizerRendu/code/test/FGC42Forge.ts b/tokenizerRendu/code/test/FGC42Forge.ts index 9c1b35f..8ef1792 100644 --- a/tokenizerRendu/code/test/FGC42Forge.ts +++ b/tokenizerRendu/code/test/FGC42Forge.ts @@ -1,8 +1,14 @@ -import { expect } from "chai"; // pour les assertions -import { network } from "hardhat"; // pour les tests +/** + * Tests d’intégration Hardhat 3 (chaîne simulée locale) pour le contrat FGC42Forge. + * Complète la revue de code : vérifie le comportement BEP-20 attendu avant / après deploy testnet. + */ +import { expect } from "chai"; +import { network } from "hardhat"; +// Connexion réseau Hardhat 3 (équivalent Ethers pour deploy et appels de contrat). const { ethers } = await network.create(); +// Supply attendue : 1 million de jetons avec 18 décimales (unités minimales on-chain). const INITIAL_SUPPLY = 1_000_000n * 10n ** 18n; describe("FGC42Forge", function () { @@ -10,9 +16,12 @@ describe("FGC42Forge", function () { const [deployer] = await ethers.getSigners(); const token = await ethers.deployContract("FGC42Forge"); + // Métadonnées imposées par le constructeur Solidity. expect(await token.name()).to.equal("FGC42Forge"); expect(await token.symbol()).to.equal("FG42"); expect(await token.decimals()).to.equal(18n); + + // Toute la supply doit exister et être détenue par le compte qui a déployé. expect(await token.totalSupply()).to.equal(INITIAL_SUPPLY); expect(await token.balanceOf(deployer.address)).to.equal(INITIAL_SUPPLY); expect(await token.owner()).to.equal(deployer.address); @@ -27,9 +36,10 @@ describe("FGC42Forge", function () { .to.emit(token, "Transfer") .withArgs(deployer.address, recipient.address, amount); + // Conservation de la masse monétaire : totalSupply inchangé, soldes déplacés. expect(await token.balanceOf(recipient.address)).to.equal(amount); expect(await token.balanceOf(deployer.address)).to.equal( INITIAL_SUPPLY - amount, ); }); -}); \ No newline at end of file +}); diff --git a/tokenizerRendu/deployment/README.md b/tokenizerRendu/deployment/README.md index f81d4ea..ae374be 100644 --- a/tokenizerRendu/deployment/README.md +++ b/tokenizerRendu/deployment/README.md @@ -1,6 +1,8 @@ # Déploiement — FGC42Forge (BSC Testnet) -Scripts et **trace** du déploiement public. Le déploiement lui-même s’exécute depuis **`code/`** (Hardhat Ignition). +Scripts et **trace** du déploiement public. Le déploiement s’exécute depuis **`code/`** (Hardhat Ignition). + +**Code du token (commenté pour la revue)** : [`../code/contracts/FGC42Forge.sol`](../code/contracts/FGC42Forge.sol) ## Prérequis diff --git a/tokenizerRendu/documentation/README.md b/tokenizerRendu/documentation/README.md index dba7a25..f178931 100644 --- a/tokenizerRendu/documentation/README.md +++ b/tokenizerRendu/documentation/README.md @@ -112,7 +112,8 @@ Le compte qui a **déployé** le contrat détient initialement **1 000 000 FG42* | **Owner** | Le contrat utilise **OpenZeppelin `Ownable`** : une adresse `owner()` (le déployeur au lancement) peut gérer le rôle admin (ex. `transferOwnership`), mais **sans** pouvoir mint des FG42 supplémentaires via ce contrat. | | **Clés privées** | Ne jamais partager seed phrase ni clé privée ; ne pas les committer dans Git. | -Pour le modèle technique (Hardhat, OpenZeppelin, choix BSC), voir le [README racine](../README.md#choix-techniques). +Pour le modèle technique (Hardhat, OpenZeppelin, choix BSC), voir le [README racine](../README.md#choix-techniques). +**Code commenté (revue en évaluation)** : [`../code/contracts/FGC42Forge.sol`](../code/contracts/FGC42Forge.sol) · index [`../code/README.md`](../code/README.md). ---