# Guide de réalisation — Tokenizer > **Objectif :** document de travail pour **coder, déployer et défendre** le projet. À mettre à jour quand le code existe (chemins, commandes, adresses). > **Référence sujet :** [tokenizer.md](../sujets/tokenizer.md) > **Apprentissage :** [ressources-solidity-hardhat.md](ressources-solidity-hardhat.md) --- ## Vue d’ensemble du livrable école | Élément | Emplacement | Contenu attendu | |---------|-------------|-----------------| | README | `tokenizerRendu/README.md` | Choix + **adresse contrat** + **réseau** | | Source | `tokenizerRendu/code/` | Contrat(s) commentés | | Déploiement | `tokenizerRendu/deployment/` | Scripts, config réseaux, sorties | | Doc utilisateur | `tokenizerRendu/documentation/` | Usage du token, rôle, limites | | Hors dépôt école | `docs/` (ici) | Traduction, pédagogie, ce guide | --- ## Étape 1 — Cadrage (avant d’écrire du Solidity) ### Checklist décisions - [ ] Chaîne : **BNB Smart Chain Testnet** (chainId `97`) — ou autre EVM **justifié** dans README - [ ] Nom du token contenant **`42`** (ex. `FortyTwoToken`, `School42Coin`) - [ ] Symbole ticker (ex. `FT42`) — affiché sur l’explorer après déploiement - [ ] Supply initiale, décimales (souvent `18`), droit de **mint** ou supply fixe - [ ] Modèle de ownership : `Ownable` OpenZeppelin recommandé pour la soutenance ### Comptes et secrets 1. Wallet de test (MetaMask ou autre) — **jamais** la clé privée du mainnet avec de vrais fonds. 2. Faucet : [BNB Chain Testnet Faucet](https://www.bnbchain.org/en/testnet-faucet) 3. Fichier `.env` dans `deployment/` ou racine `code/` : ```env PRIVATE_KEY=0x... # compte TEST uniquement BSC_TESTNET_RPC=https://data-seed-prebsc-1-s1.binance.org:8545/ ``` Ajouter `.env` au `.gitignore` (déjà prévu dans le paquet rendu). --- ## Étape 2 — Projet `code/` ### Structure suggérée (Hardhat) ``` tokenizerRendu/code/ ├── package.json ├── hardhat.config.js ├── contracts/ │ └── Token42.sol # nom à adapter ├── test/ │ └── Token42.test.js └── README.md # comment compiler / tester localement ``` ### Contrat minimal (logique, pas le code final) 1. Hériter **ERC20** + **Ownable** (OpenZeppelin). 2. Constructeur : `name`, `symbol`, supply initiale au déployeur ou `mint` réservé à `owner`. 3. Si `mint` : fonction `onlyOwner` — **à expliquer** en README (risque si owner compromis). 4. Commentaires en tête de fichier : rôle du token, réseau cible, standard BEP-20. ### Tests locaux (fortement recommandés avant deploy) ```bash cd tokenizerRendu/code npm install npx hardhat test ``` Points à couvrir : `transfer`, solde, `onlyOwner` sur fonctions sensibles. --- ## Étape 3 — Dossier `deployment/` ### Contenu type ``` tokenizerRendu/deployment/ ├── README.md # ordre des commandes ├── deploy.js # ou scripts Hardhat dans code/ référencés ici └── addresses.json # adresse + chainId + date (après deploy) ``` ### Déploiement (exemple Hardhat) Depuis `code/` (selon ton organisation) : ```bash npx hardhat run scripts/deploy.js --network bscTestnet ``` Enregistrer dans `addresses.json` : ```json { "network": "bscTestnet", "chainId": 97, "contract": "Token42", "address": "0x...", "explorer": "https://testnet.bscscan.com/address/0x..." } ``` ### Vérification sur l’explorer - [BscScan Testnet](https://testnet.bscscan.com/) → **Verify and Publish** (flatten ou standard JSON input selon toolchain). - Copier l’URL du contrat dans `tokenizerRendu/README.md`. --- ## Étape 4 — `documentation/` (utilisateur) Sections recommandées (`documentation/README.md` ou plusieurs fichiers) : 1. **Qu’est-ce que ce token ?** (cas d’usage fictif ou pédagogique) 2. **Réseau et adresse** (lien explorer) 3. **Ajouter le token dans un wallet** (contract address, decimals, symbol) 4. **Actions supportées** : transfer, approve, etc. 5. **Sécurité** : qui est owner, ce qu’il peut faire, ce que les utilisateurs ne peuvent pas faire 6. **Limites testnet** : pas de valeur réelle, reset possible des faucets Option : `documentation/WHITEPAPER.md` court (1–2 pages). --- ## Étape 5 — README école (`tokenizerRendu/README.md`) Le sujet exige d’y expliquer les **choix** et **raisons**. Modèle : | Section | Contenu | |---------|---------| | Présentation | Nom, symbole, standard BEP-20 | | Chaîne | BSC Testnet, chainId, pourquoi pas mainnet | | Stack | Hardhat, OpenZeppelin, versions | | Sécurité | Ownable, mint ou non, pas de backdoor cachée | | Déploiement | Adresse + lien BscScan | | Démo soutenance | 3–5 actions à montrer (voir ci-dessous) | | Bonus | Si multisig : où est le code, comment tester | Mettre à jour le fichier réel dans `tokenizerRendu/` au fil du projet (le squelette actuel liste les sections à compléter). --- ## Étape 6 — Scénario de soutenance (démo minimale) Préparer un **fil narratif** de 5–10 minutes : | # | Action | Preuve | |---|--------|--------| | 1 | Montrer le repo : `code/`, `deployment/`, `documentation/` | `ls` ou IDE | | 2 | Expliquer ownership / privilèges sur le contrat | Code ouvert `Token42.sol` | | 3 | Lire `name`, `symbol`, `totalSupply` sur l’explorer | BscScan | | 4 | `transfer` entre deux comptes test | Explorer « Token transfers » ou wallet | | 5 | Montrer qu’un non-owner **ne peut pas** mint (si applicable) | Transaction revert ou test Hardhat | | 6 | Bonus multisig | Seulement si obligatoire parfaite | Pas de vidéo obligatoire ; si lien vidéo : une ligne dans README. --- ## Étape 7 — Code review (ce que l’évaluateur peut demander) - Pourquoi OpenZeppelin plutôt qu’un ERC20 from scratch ? - Où est le risque principal de ton design (owner, mint) ? - Comment quelqu’un utilise ton token sans ton aide ? - Différence entre ton `documentation/` et le README racine ? - Confirmation : **aucune clé privée** dans Git ? --- ## Étape 8 — Bonus multisig (après obligatoire parfaite) Pistes : - Contrat wallet multisig simple (m-of-n) qui détient l’ownership du token. - Ou contrat qui exige N signatures pour `mint` / transfert sortant d’un trésor. Documenter dans `documentation/` et README : nombre de signataires, adresses de test, procédure de signature. --- ## Dépannage (à enrichir pendant le dev) | Problème | Piste | |----------|--------| | Faucet vide / rate limit | Réessayer plus tard, autre compte test | | Transaction underpriced | Ajuster gas sur BSC testnet | | Verify échoue | Vérifier version compilateur et settings Hardhat | | Token invisible dans wallet | Ajouter manuellement par adresse de contrat | --- ## Cartographie sujet ↔ dossiers (rappel) | Exigence sujet | Dossier / fichier | |----------------|-------------------| | Code commenté | `code/` | | Déploiement | `deployment/` | | Doc projet token | `documentation/` | | Choix + adresse + réseau | `README.md` racine rendu | | Revue de code | `code/` | | Démo sécurité | soutenance + éventuellement tests | → État du projet : [00-reprise-et-etat.md](00-reprise-et-etat.md)