endprojetnobonus
This commit is contained in:
@@ -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) |
|
||||
|
||||
@@ -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 |
|
||||
|
||||
---
|
||||
|
||||
@@ -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). | — |
|
||||
|
||||
---
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// 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().
|
||||
// -------------------------------------------------------------------------
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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,6 +36,7 @@ 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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -113,6 +113,7 @@ Le compte qui a **déployé** le contrat détient initialement **1 000 000 FG42*
|
||||
| **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).
|
||||
**Code commenté (revue en évaluation)** : [`../code/contracts/FGC42Forge.sol`](../code/contracts/FGC42Forge.sol) · index [`../code/README.md`](../code/README.md).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user