# Code — FGC42Forge (Hardhat 3) Sources du token **FGC42Forge** (symbole **FG42**), standard **BEP-20**, déployé sur **BNB Smart Chain Testnet** (chainId **97**). | Langage contrat | **Solidity** 0.8.34 — voir [`contracts/FGC42Forge.sol`](contracts/FGC42Forge.sol) | | Framework | **Hardhat 3** — compile, teste, déploie depuis ce dossier | | Bibliothèque | **OpenZeppelin 5** (`ERC20`, `Ownable`) | | Tests | **TypeScript** + **Mocha** + **ethers** — [`test/FGC42Forge.ts`](test/FGC42Forge.ts) | Glossaire complet (Hardhat, MetaMask, alternatives Remix/Truffle/Foundry) : [`../documentation/STACK-GLOSSAIRE-ET-PARCOURS.md`](../documentation/STACK-GLOSSAIRE-ET-PARCOURS.md). Adresse déployée : [`../deployment/addresses.json`](../deployment/addresses.json) · BscScan : [`../deployment/BSCSCAN_VERIFICATION.md`](../deployment/BSCSCAN_VERIFICATION.md) --- ## Pourquoi les commandes se lancent depuis `code/` Hardhat cherche **`hardhat.config.ts` dans le répertoire courant**. À la racine du dépôt (`README.md` parent), `npx hardhat` échoue (*No Hardhat config file found*). Toujours : ```bash cd code # depuis la racine du dépôt Git ``` --- ## 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 : métadonnées, `transfer`, `owner`, conservation de `totalSupply` | | `ignition/modules/FGC42Forge.ts` | Module Ignition : déploie `FGC42Forge` sur le réseau passé à `--network` | | `hardhat.config.ts` | Compilateur Solidity, profil `production` (optimizer 200 runs), réseau `bscTestnet` + `.env` | 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 - **Soutenance :** jeton **BEP-20** sur BSC Testnet. - **Code :** héritage **OpenZeppelin `ERC20`** (interface EVM identique). - **BscScan :** affiche BEP-20 ; vérification via [`../deployment/FGC42Forge_flat.sol`](../deployment/FGC42Forge_flat.sol). --- ## Prérequis - **Node.js** ≥ 18 (Hardhat 3 recommande v22+) - Pour **deploy testnet** : compte avec **tBNB** + `code/.env` (voir ci-dessous) - Pour **tests seuls** : Node suffit (chaîne simulée Hardhat, pas de faucet) --- ## Installation ```shell cd code npm install cp .env.example .env ``` | Variable `.env` | Description | |-----------------|-------------| | `BSC_TESTNET_RPC` | URL du nœud BSC Testnet (même famille que MetaMask) | | `PRIVATE_KEY` | Clé privée **hex** du compte qui signe le deploy — **pas** l’adresse `0x…` | `.env` est **ignoré par Git** ; ne jamais le committer. --- ## Commandes — quoi et pourquoi | Commande | Effet | |----------|--------| | `npx hardhat build` | Compile `FGC42Forge.sol` (et Counter) ; nécessaire avant deploy ou si le code change. | | `npx hardhat test --grep FGC42Forge` | Lance **2 tests** sur chaîne locale simulée : supply au deployer + `transfer`. | | `npx hardhat test` | Tous les tests, y compris l’exemple **Counter** du template Hardhat. | | `npx hardhat ignition deploy --network bscTestnet ignition/modules/FGC42Forge.ts` | Envoie une transaction on-chain : crée le contrat ; le deployer reçoit 1M FG42 ; coûte du **tBNB**. | Après un nouveau deploy : mettre à jour [`../deployment/addresses.json`](../deployment/addresses.json) et le README racine. Procédure détaillée : [`../deployment/README.md`](../deployment/README.md). --- ## Arborescence utile ``` contracts/ FGC42Forge.sol ← token BEP-20 (commenté) Counter.* ← exemple template (optionnel) test/ FGC42Forge.ts ← tests du token ignition/modules/ FGC42Forge.ts ← deploy Ignition hardhat.config.ts ← réseaux + Solidity .env.example ← modèle secrets package.json ← dépendances npm ``` Documentation utilisateur (MetaMask, transfers) : [`../documentation/README.md`](../documentation/README.md)