commit 59ca4db8c85d7b49b1e356522d25425ebe351daf Author: Ladebeze66 Date: Wed Sep 30 09:08:25 2026 +0200 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b434ad1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# ── Secrets / clés ── +.env +.env.* +!.env.example +*.pem +**/secrets.* + +# Repo Git du rendu école (option : git init dans tokenizerRendu/) +tokenizerRendu/.git/ + +# ── Node / Hardhat / Foundry (dans tokenizerRendu/code/) ── +**/node_modules/ +**/cache/ +**/artifacts/ +**/typechain-types/ +**/coverage/ +**/dist/ +**/.openzeppelin/ + +# ── Python (outils docs) ── +.venv/ +venv/ +.venv_pdf/ + +# ── OS / IDE ── +.DS_Store +Thumbs.db +.idea/ +*.iml +.vscode/ + +# ── Logs ── +*.log diff --git a/README.md b/README.md new file mode 100644 index 0000000..72de406 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Tokenizer — dépôt de travail + +Espace **perso** : sujet traduit, pédagogie, guides dev. Le rendu à l’école ne contient **pas** tout ce dépôt. + +## Deux dépôts Git distincts + +| Rôle | Où | Contenu typique | +|------|-----|-----------------| +| **Travail** (ce repo) | Racine `tokenizer/` | `docs/`, PDF, historique, notes | +| **École** (Intra / Vogosphere) | Racine = contenu de **`tokenizerRendu/`** | `README.md`, `code/`, `deployment/`, `documentation/` | + +Le dossier [`tokenizerRendu/`](tokenizerRendu/) est le **paquet de rendu** : structure et README **autonomes**, conformes au sujet v1.1. + +### Pousser vers l’école (quand le projet est prêt) + +**Option A — Git dans le sous-dossier** (recommandé en local) : + +```bash +cd tokenizerRendu +git init +git remote add origin +# premier push : uniquement les fichiers de ce dossier +``` + +Dans le dépôt de **travail**, ignorer le `.git` imbriqué (voir `.gitignore` racine). + +**Option B — Clone Vogosphere vide** puis copier le contenu de `tokenizerRendu/` à la racine du clone. + +Ne pas pousser : `docs/`, traductions, captures PDF, ce README de travail. + +## Documentation (travail uniquement) + +| Document | Lien | +|----------|------| +| Index doc | [docs/README.md](docs/README.md) | +| Sujet FR (v1.1) | [docs/sujets/tokenizer.md](docs/sujets/tokenizer.md) | +| PDF officiel | [docs/sujets/originaux/tokenizer_subject.pdf](docs/sujets/originaux/tokenizer_subject.pdf) | +| Plan pas à pas | [docs/pedagogie/README.md](docs/pedagogie/README.md) | +| Apports pédagogiques | [docs/pedagogie/01-apports-pedagogiques.md](docs/pedagogie/01-apports-pedagogiques.md) | + +## Rendu école + +Correcteurs et soutenance : **[tokenizerRendu/README.md](tokenizerRendu/README.md)** (lu depuis le dépôt Intra une fois poussé). + +## Reprise du projet + +**État actuel :** structure doc + squelette de rendu ; smart contract et déploiement **à faire**. + +→ [docs/pedagogie/00-reprise-et-etat.md](docs/pedagogie/00-reprise-et-etat.md) + +## Démarrage + +1. Lire le [sujet traduit](docs/sujets/tokenizer.md) (avec éclaircissements). +2. Lire [01-apports-pedagogiques.md](docs/pedagogie/01-apports-pedagogiques.md) pour le « pourquoi » du projet. +3. Suivre [guide-realisation.md](docs/pedagogie/guide-realisation.md) et le [plan](docs/pedagogie/README.md). +4. Coder et déployer **uniquement** dans `tokenizerRendu/` ([README rendu](tokenizerRendu/README.md)). diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..7cfaf0b --- /dev/null +++ b/docs/README.md @@ -0,0 +1,27 @@ +# Documentation — Tokenizer + +Documentation du projet, sur le modèle de [piscine_mobile/docs](../../piscine_mobile/docs/README.md) et [swifty_companion/docs](../../swifty_companion/docs/README.md). + +## Sujet officiel + +→ [sujets/README.md](sujets/README.md) + +| Document | Lien | +|----------|------| +| Traduction française (v1.1) + visuels | [sujets/tokenizer.md](sujets/tokenizer.md) | +| PDF Intra | [sujets/originaux/tokenizer_subject.pdf](sujets/originaux/tokenizer_subject.pdf) | + +## Pédagogie (dev) + +| Document | Lien | +|----------|------| +| **Reprise / état du projet** | [pedagogie/00-reprise-et-etat.md](pedagogie/00-reprise-et-etat.md) | +| **Ce que le projet t’apporte** | [pedagogie/01-apports-pedagogiques.md](pedagogie/01-apports-pedagogiques.md) | +| **Guide de réalisation** | [pedagogie/guide-realisation.md](pedagogie/guide-realisation.md) | +| Plan des étapes | [pedagogie/README.md](pedagogie/README.md) | + +## Dépôt de rendu 42 (hors dépôt de travail) + +Le code, le déploiement et la doc « utilisateur token » vivent dans **`tokenizerRendu/`** — racine du futur dépôt Intra. + +→ [../tokenizerRendu/README.md](../tokenizerRendu/README.md) · workflow : [../README.md](../README.md#deux-dépôts-git-distincts) diff --git a/docs/pedagogie/00-reprise-et-etat.md b/docs/pedagogie/00-reprise-et-etat.md new file mode 100644 index 0000000..c67c707 --- /dev/null +++ b/docs/pedagogie/00-reprise-et-etat.md @@ -0,0 +1,75 @@ +# Reprise du projet — où nous en sommes + +> Dernière mise à jour : initialisation documentation et squelette de rendu. + +## En bref + +| | | +|---|---| +| **Fait** | Dépôt de travail, sujet FR v1.1, captures PDF, plan pédagogique, paquet `tokenizerRendu/` | +| **À faire** | Smart contract, déploiement testnet, doc utilisateur, README école complété | +| **Prochaine action** | Lire [guide-realisation.md](guide-realisation.md) étape 1 — figer chaîne + nom du token | + +## Arborescence actuelle + +``` +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 +│ ├── 01-apports-pedagogiques.md +│ └── guide-realisation.md +└── tokenizerRendu/ ← futur dépôt ÉCOLE (racine Vogosphere) + ├── README.md + ├── code/ + ├── deployment/ + └── documentation/ +``` + +## 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` | Ex. nom `Token42School`, symbole `TK42` — à valider perso | +| Bonus multisig | Gnosis Safe, contrat custom | Seulement après obligatoire **parfaite** | + +## Avancement par étape + +| Étape | Contenu | Statut | +|-------|---------|--------| +| **0** | Structure, traduction, séparation travail / école | ✅ **Terminé** | +| **1** | Choix stack + init projet dans `code/` | ⏳ | +| **2** | Contrat token + tests locaux | ⏳ | +| **3** | Déploiement + verify + adresse dans README | ⏳ | +| **4** | `documentation/` + démo soutenance | ⏳ | +| **5** | Rendu Vogosphere + partage Git perso (recommandé) | ⏳ | +| **6** | Bonus multisig | ⏳ | + +## Reprendre le travail (checklist) + +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 + +## Fichiers à renseigner après le code + +| 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 | diff --git a/docs/pedagogie/01-apports-pedagogiques.md b/docs/pedagogie/01-apports-pedagogiques.md new file mode 100644 index 0000000..9504905 --- /dev/null +++ b/docs/pedagogie/01-apports-pedagogiques.md @@ -0,0 +1,86 @@ +# Ce que le projet Tokenizer t’apporte + +> Lecture **pédagogique** — hors rendu école. Le correcteur évalue le dépôt Vogosphere (`tokenizerRendu/`), pas ce dossier. + +## En une phrase + +Tu passes de « j’ai entendu parler de la blockchain » à « j’ai **déployé**, **documenté** et **défendu** un actif numérique sur une chaîne publique, en maîtrisant au minimum la **sécurité d’ownership** et les **standards de tokens** ». + +## Compétences techniques + +### 1. Smart contracts et langage de chaîne + +- Écrire ou adapter un contrat (**Solidity** si tu suis BSC/ETH) qui respecte une **interface standard** (BEP-20 / ERC-20). +- Comprendre ce que fait chaque fonction publique : `transfer`, `approve`, `allowance`, éventuellement `mint` / `burn`. +- Lire une **revue de code** en soutenance : noms explicites, commentaires sur les choix de sécurité, pas de « magie » copiée sans comprendre. + +**Pourquoi c’est utile :** l’écosystème Web3 recrute sur la capacité à livrer du code **auditable** ; ce projet reproduit une mini-livraison réelle (code + deploy + doc). + +### 2. Toolchain et reproductibilité + +- Utiliser **Hardhat**, **Truffle** ou **Remix** de façon cohérente : compilation, réseaux, scripts de déploiement. +- Séparer **`code/`** (source) et **`deployment/`** (procédure) comme demandé — même logique qu’en entreprise (CI/CD, infra). + +**Pourquoi c’est utile :** un token déployé « à la main une fois » sans script est difficile à maintenir ; le sujet t’entraîne à penser **reproductibilité**. + +### 3. Réseaux publics et explorateurs + +- Différence **mainnet** / **testnet**, **gas**, **adresse de contrat**, **vérification** sur BscScan ou équivalent. +- Obtenir des fonds de test via un **faucet** — flux standard pour tout développeur blockchain. + +**Pourquoi c’est utile :** tu sais **prouver** on-chain que ton contrat existe et correspond au code (verify + lecture explorer). + +### 4. Sécurité appliquée (obligatoire au sujet) + +- **Ownership** : qui peut changer les règles du jeu ? +- **Privilèges** : mint illimité, pause, blacklist — chaque pouvoir doit être **justifié** dans le README et la doc. +- Préparer une **démo minimale** qui montre les cas normaux **et** ce qui est interdit (ex. un compte non-owner ne peut pas mint). + +**Pourquoi c’est utile :** la majorité des incidents Web3 viennent de contrats mal conçus ; ce projet t’oblige à en parler à l’oral. + +### 5. Documentation produit + +- Deux niveaux distincts : + - **README école** : choix d’architecture et métadonnées de déploiement ; + - **`documentation/`** : comment **utiliser** le token (wallet, ajout du token, transfert, rôle du token dans ton « produit »). +- Option whitepaper : formaliser **à quoi sert** le token (même fictif). + +**Pourquoi c’est utile :** un développeur blockchain est aussi **rédacteur** pour utilisateurs et auditeurs. + +## Compétences transverses 42 + +| Compétence | Comment le projet la travaille | +|------------|--------------------------------| +| **Autonomie** | Peu de garde-fous : tu choisis la stack (dans les contraintes) | +| **Rigueur** | Arborescence imposée, eval = code review | +| **Communication** | README argumenté, soutenance avec démo | +| **Éthique** | Pas d’argent réel ; nom du token sans insultes ; honnêteté sur les limites du testnet | + +## Lien avec le partenariat BNB Chain + +Le sujet n’impose pas BSC en toutes lettres, mais le **préambule BNB** et le **faucet tBNB** orientent vers cet écosystème : + +- Volume et adoption réels (contexte donné dans le PDF). +- Standard **BEP-20** aligné sur l’industrie (compatible mental model ERC-20). +- Passerelle vers d’autres projets Web3 42 ou perso (DApp, ponts, etc.). + +## Bonus multisig — apports supplémentaires + +Si la partie obligatoire est **parfaite**, le multisig ajoute : + +- Modèle **seuil de confiance** (m-of-n signatures). +- Réflexion sur **gouvernance** et **opérations** (qui détient les clés en test ?). + +## Ce que ce projet n’est pas + +- Ce n’est **pas** un cours de trading ni une incitation à investir. +- Ce n’est **pas** une validation de « crypto » en général — c’est un exercice **d’ingénierie** sur registre distribué. +- Une vidéo démo **ne remplace pas** une doc écrite ni une démo live en soutenance. + +## Suite naturelle après Tokenizer + +- Auditer un contrat existant (lecture seule sur explorer). +- Front minimal (Web3.js / ethers) qui appelle ton token. +- Modules 42 ou projets perso : NFT (ERC-721), gouvernance, indexation (The Graph). + +→ Retour au plan : [README.md](README.md) · Guide technique : [guide-realisation.md](guide-realisation.md) diff --git a/docs/pedagogie/README.md b/docs/pedagogie/README.md new file mode 100644 index 0000000..06ac2dd --- /dev/null +++ b/docs/pedagogie/README.md @@ -0,0 +1,50 @@ +# Pédagogie — Tokenizer + +Parcours pour construire le projet **étape par étape** et le défendre en soutenance. + +## Reprise rapide + +→ **[00-reprise-et-etat.md](00-reprise-et-etat.md)** — état du projet, décisions, prochaine action. + +→ **[guide-realisation.md](guide-realisation.md)** — **guide dev** détaillé (choix techniques, sécurité, déploiement, démo). + +→ **[01-apports-pedagogiques.md](01-apports-pedagogiques.md)** — **ce que ce projet t’apporte** (compétences, concepts). + +## Prérequis suggérés + +| Domaine | Niveau attendu | +|---------|----------------| +| Git | Dépôt structuré, README, pas de secrets commités | +| Ligne de commande | npm ou équivalent, variables d’environnement | +| Programmation | Au moins un langage ; Solidity s’apprend pendant le projet | +| 42 | Aucun prérequis Web3 obligatoire — le sujet assume l’apprentissage | + +Ressources externes utiles : [docs Solidity](https://docs.soliditylang.org/), [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/), [BscScan Testnet](https://testnet.bscscan.com/). + +## Étapes du projet + +| Étape | Objectif | Statut | +|-------|----------|--------| +| **0** | Dépôt travail + `docs/`, sujet FR, paquet `tokenizerRendu/` | ✅ **Fait** — [00-reprise-et-etat.md](00-reprise-et-etat.md) | +| **1** | Choix chaîne + stack (ex. BSC testnet + Hardhat) + nom token avec `42` | ⏳ À faire | +| **2** | Smart contract BEP-20 dans `tokenizerRendu/code/` (ownership, commentaires) | ⏳ À faire | +| **3** | Scripts `tokenizerRendu/deployment/` + déploiement testnet + verify explorer | ⏳ À faire | +| **4** | `documentation/` utilisateur + README école (adresse, réseau, choix) | ⏳ À faire | +| **5** | Scénario de démo minimal + préparation code review | ⏳ À faire | +| **6** | Bonus multisig (optionnel) | ⏳ Non commencé | + +README correcteurs (dépôt école) : [tokenizerRendu/README.md](../../tokenizerRendu/README.md) + +## Sujet de référence + +→ [Traduction FR v1.1](../sujets/tokenizer.md) · PDF : [originaux/tokenizer_subject.pdf](../sujets/originaux/tokenizer_subject.pdf) + +## Guides détaillés + +| Fichier | Rôle | +|---------|------| +| [00-reprise-et-etat.md](00-reprise-et-etat.md) | État, arborescence, reprise | +| [01-apports-pedagogiques.md](01-apports-pedagogiques.md) | Valeur pédagogique du projet | +| [guide-realisation.md](guide-realisation.md) | Réalisation technique pas à pas | + +Demande dans le chat l’étape à approfondir : le guide pourra être mis à jour au fil du code (fichiers réels, adresses, scripts). diff --git a/docs/pedagogie/guide-realisation.md b/docs/pedagogie/guide-realisation.md new file mode 100644 index 0000000..3d2a2fb --- /dev/null +++ b/docs/pedagogie/guide-realisation.md @@ -0,0 +1,210 @@ +# 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) + +--- + +## 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) diff --git a/docs/sujets/README.md b/docs/sujets/README.md new file mode 100644 index 0000000..35136e7 --- /dev/null +++ b/docs/sujets/README.md @@ -0,0 +1,9 @@ +# Sujets — Tokenizer + +| Document | Description | +|----------|-------------| +| [tokenizer.md](tokenizer.md) | Traduction FR complète (v1.1) + interprétation des visuels | +| [originaux/tokenizer_subject.pdf](originaux/tokenizer_subject.pdf) | PDF officiel Intra | +| [captures/](captures/) | Pages extraites du PDF (`page-01.png` … `page-10.png`) | + +Copie locale à la racine du dépôt de travail : `tokenizer.pdf` (optionnel, doublon du PDF dans `originaux/`). diff --git a/docs/sujets/captures/page-01.png b/docs/sujets/captures/page-01.png new file mode 100644 index 0000000..6d5c307 Binary files /dev/null and b/docs/sujets/captures/page-01.png differ diff --git a/docs/sujets/captures/page-02.png b/docs/sujets/captures/page-02.png new file mode 100644 index 0000000..687430d Binary files /dev/null and b/docs/sujets/captures/page-02.png differ diff --git a/docs/sujets/captures/page-03.png b/docs/sujets/captures/page-03.png new file mode 100644 index 0000000..c976eda Binary files /dev/null and b/docs/sujets/captures/page-03.png differ diff --git a/docs/sujets/captures/page-04.png b/docs/sujets/captures/page-04.png new file mode 100644 index 0000000..2f5ef55 Binary files /dev/null and b/docs/sujets/captures/page-04.png differ diff --git a/docs/sujets/captures/page-05.png b/docs/sujets/captures/page-05.png new file mode 100644 index 0000000..048f673 Binary files /dev/null and b/docs/sujets/captures/page-05.png differ diff --git a/docs/sujets/captures/page-06.png b/docs/sujets/captures/page-06.png new file mode 100644 index 0000000..0ce923a Binary files /dev/null and b/docs/sujets/captures/page-06.png differ diff --git a/docs/sujets/captures/page-07.png b/docs/sujets/captures/page-07.png new file mode 100644 index 0000000..d476f75 Binary files /dev/null and b/docs/sujets/captures/page-07.png differ diff --git a/docs/sujets/captures/page-08.png b/docs/sujets/captures/page-08.png new file mode 100644 index 0000000..c9da0e6 Binary files /dev/null and b/docs/sujets/captures/page-08.png differ diff --git a/docs/sujets/captures/page-09.png b/docs/sujets/captures/page-09.png new file mode 100644 index 0000000..8c5a7fb Binary files /dev/null and b/docs/sujets/captures/page-09.png differ diff --git a/docs/sujets/captures/page-10.png b/docs/sujets/captures/page-10.png new file mode 100644 index 0000000..b57c764 Binary files /dev/null and b/docs/sujets/captures/page-10.png differ diff --git a/docs/sujets/originaux/tokenizer_subject.pdf b/docs/sujets/originaux/tokenizer_subject.pdf new file mode 100644 index 0000000..1c53888 Binary files /dev/null and b/docs/sujets/originaux/tokenizer_subject.pdf differ diff --git a/docs/sujets/tokenizer.md b/docs/sujets/tokenizer.md new file mode 100644 index 0000000..4be036b --- /dev/null +++ b/docs/sujets/tokenizer.md @@ -0,0 +1,246 @@ +# Tokenizer — Build your own token + +> **Version :** 1.1 +> **Résumé :** Exercice lié au **Web3**. +> **Traduction française** — source : [tokenizer_subject.pdf](originaux/tokenizer_subject.pdf) + +--- + +## Table des matières + +1. [Chapitre I — Avant-propos](#chapitre-i--avant-propos) +2. [Chapitre II — Introduction](#chapitre-ii--introduction) +3. [Chapitre III — Objectifs](#chapitre-iii--objectifs) +4. [Chapitre IV — Partie obligatoire](#chapitre-iv--partie-obligatoire) +5. [Chapitre V — Bonus](#chapitre-v--bonus) +6. [Chapitre VI — Rendu et évaluation par les pairs](#chapitre-vi--rendu-et-évaluation-par-les-pairs) +7. [Éléments visuels du PDF](#éléments-visuels-du-pdf) +8. [Éclaircissements (lecture facilitée)](#éclaircissements-lecture-facilitée) + +--- + +## Page de garde (PDF page 1) + +| Champ | Texte officiel (EN) | Traduction | +|-------|---------------------|------------| +| Titre | Tokenizer | Tokenizer | +| Sous-titre | Build your own token | Construis ton propre token | +| Résumé | This document is a Web3 related exercise. | Ce document est un exercice lié au **Web3**. | +| Version | 1.1 | 1.1 | + +### Référence visuelle — couverture + +![Page de garde](captures/page-01.png) + +| Zone | Description | +|------|-------------| +| Illustration centrale | Motif vertical en facettes (style low-poly), tons gris/noir — **élément graphique 42**, pas une maquette de smart contract | +| Fond | Motif géométrique léger (triangles) sur toutes les pages | +| En-têtes | « Tokenizer » à gauche, « Build your own token » à droite | + +--- + +## Chapitre I — Avant-propos + +Ce sujet est réalisé en **partenariat entre 42 et BNB Chain**. + +**BNB Chain** (*Build N Build*) est un réseau blockchain distribué sur lequel développeurs et innovateurs peuvent construire des **applications décentralisées (DApps)** dans la mouvance **Web3**. + +En octobre 2022 (chiffres du sujet), BNB Chain était parmi les plus grands réseaux de smart contracts au monde en volume de transactions et utilisateurs actifs quotidiens : plus de 3 milliards de transactions, 232 millions d’adresses uniques, plus de 1 500 DApps actives. La nature **décentralisée** du réseau permet de déployer un produit **sans permission** centrale et d’atteindre un large public. + +### Faucet (testnet) + +Tu peux obtenir des **tBNB** (BNB de **test**, sans argent réel) via le faucet officiel : + +- [BNB Chain Faucet](https://www.bnbchain.org/en/testnet-faucet) (lien cité dans le sujet : *BNB Chain Faucet*) + +### Référence visuelle — Figure I.1 (PDF page 2) + +![Chapitre I — BNB Chain](captures/page-03.png) + +| Zone | Description | +|------|-------------| +| Logo | Hexagone jaune + mention **BNB CHAIN** | +| Légende | *Figure I.1: https://www.bnbchain.org/* — site officiel de l’écosystème | +| Message implicite | Le partenaire du sujet pousse vers l’écosystème **BSC / BNB** ; le standard token y est **BEP-20** (équivalent fonctionnel d’**ERC-20** sur Ethereum) | + +--- + +## Chapitre II — Introduction + +Bienvenue dans le monde de la **technologie blockchain**. + +Tu vas pouvoir **créer ton propre token numérique**. La blockchain permet de créer et distribuer des actifs numériques uniques (**tokens**) : monnaie, parts, représentation d’œuvres, ou lien avec un actif du monde réel (selon le design que tu documentes). + +Ce n’est pas trivial : il faut comprendre ce que tu déploies. Avec les bonnes ressources (testnet, faucet, outils), c’est un projet formateur et concret. + +### Référence visuelle (PDF page 3) + +![Introduction — illustration token / puce](captures/page-04.png) + +| Zone | Description | +|------|-------------| +| Illustration | Style « peinture numérique » : **jeton doré** sur une base type **puce / circuit** | +| Sens | Métaphore **hardware + actif numérique** — le token est un programme (smart contract) exécuté par le réseau, pas un simple fichier | + +--- + +## Chapitre III — Objectifs + +En participant à ce projet, tu contribues à la création d’un **actif numérique on-chain**. Le sujet te challenge sur : + +- la maîtrise d’**au moins un langage** lié à ta chaîne (ex. **Solidity** pour BSC/ETH) ; +- la familiarité avec une **blockchain publique** (réseau, explorer, adresses, transactions) ; +- l’**adaptation** : pas besoin d’être cryptographe expert au départ, mais tu dois apprendre en chemin. + +Objectif final : compétences utiles + participation à un écosystème innovant (Web3). + +### Référence visuelle (PDF page 4) + +![Objectifs](captures/page-05.png) + +| Zone | Description | +|------|-------------| +| Illustration | Jetons / pièces stylisées — rappel que le livrable est un **token** avec règles économiques et techniques définies par **toi** (dans les contraintes du sujet) | + +--- + +## Chapitre IV — Partie obligatoire + +Pour créer un token, plusieurs exigences techniques et organisationnelles s’appliquent. + +### Contraintes sur le token + +| Règle | Détail | +|-------|--------| +| **Nom** | Libre, mais le nom doit contenir **`42`** | +| **Insultes** | Interdites — sanctions école | +| **README racine** | Fichier **`README.md`** à la racine du dépôt **école** : expliquer tes **choix** et **pourquoi** | +| **Standard** | Respecter le standard de la chaîne (**ERC-20** sur Ethereum, **BEP-20** sur BSC, etc.) | +| **Argent réel** | **Jamais** demandé — utiliser des **chaînes de test** | + +### Plateforme et outils + +1. Choisir une blockchain qui supporte la création de tokens. +2. Maîtriser le langage et la toolchain de cette chaîne : **IDE**, **Remix**, **Hardhat**, **Truffle**, etc. + +### Code (`code/`) + +- Dossier **`code/`** à la **racine** du dépôt école. +- Code **commenté**, noms de variables et fonctions **lisibles**. +- En soutenance : **revue de code** (*code review*). + +### Démonstration et sécurité + +Tu dois pouvoir faire des **actions minimales** qui prouvent que le token fonctionne. + +Réfléchir explicitement à la **sécurité** : **propriété** (*ownership*), **privilèges** (qui peut mint, pause, transférer des rôles, etc.). + +### Déploiement (2ᵉ dossier) + +- Tout le nécessaire au **déploiement** dans un **second dossier** à la racine — le sujet donne l’exemple **`deployment/`** (nom libre mais structure claire attendue). +- Déployer sur une **blockchain publique** (en pratique : **testnet public** pour ne pas dépenser de vrai argent). +- Définir le **ticker** (symbole, ex. `TK42`) et **publier** le contrat sur un **explorateur** (ex. **BscScan**, **Blockscan** selon la chaîne). +- Dans le dépôt Git : indiquer l’**adresse du smart contract** et le **réseau** utilisé. + +### Documentation (`documentation/`) + +- Dossier **`documentation/`** à la racine du dépôt école. +- On doit comprendre **comment ça marche** et **comment utiliser** le token. +- Envisager un contenu type **whitepaper** léger : rôle du token, fonctionnalités, limites. +- La doc sera **relue en évaluation** — claire et explicite. + +### Vidéo démo (optionnelle) + +- Pas obligatoire ; **ne améliore pas la note**. +- Si tu en fais une : **lien** dans le README suffit (pas besoin de pousser la vidéo dans Git). + +### Encadrés d’avertissement (PDF pages 5–7) + +![Partie obligatoire — extraits](captures/page-06.png) + +| Encadré | Message | +|---------|---------| +| Rose / ⚠️ | **Revue de code** pendant l’évaluation | +| Rose / ⚠️ | Documentation **claire** — relue en eval | +| Bleu / ℹ️ | Vidéo : **lien** seulement, pas le fichier dans le repo | +| Rose / ⚠️ | Vidéo **non requise**, pas de bonus de note | + +### Arborescence attendue (exemple officiel, PDF page 7) + +![Structure du dépôt](captures/page-08.png) + +``` +README.md +code/ +deployment/ # nom d’exemple ; un autre nom explicite est possible si le sujet l’accepte en soutenance +documentation/ +``` + +→ Dans ce dépôt perso, le paquet école est préparé dans [`../../tokenizerRendu/`](../../tokenizerRendu/). + +--- + +## Chapitre V — Bonus + +Pour renforcer la sécurité (ex. transactions sensibles), tu peux implémenter un **multisig** (*multisignature*) : plusieurs signataires doivent approuver une action avant exécution. + +- Smart contract dédié ou extension adaptée à **ta** partie obligatoire. +- Définir le **nombre de signatures** et **qui** peut signer. + +### ⚠️ Règle bonus + +Le bonus n’est évalué **que si la partie obligatoire est PARFAITE** (intégrale, sans dysfonctionnement). Une seule exigence obligatoire manquante → **bonus non évalué**. + +![Bonus multisig](captures/page-09.png) + +--- + +## Chapitre VI — Rendu et évaluation par les pairs + +Dépôt Git habituel. **Seul le contenu du dépôt** est évalué. Vérifier **noms de dossiers et fichiers**. + +Exception : le sujet **recommande** de partager le projet sur un **compte Git personnel** une fois valide (hashtags `#web3`, langage, etc.) — **en plus** du rendu Vogosphere, pas en remplacement. + +![Rendu](captures/page-10.png) + +--- + +## Éléments visuels du PDF + +| Page PDF | Fichier | Contenu visuel | +|----------|---------|----------------| +| 1 | [page-01.png](captures/page-01.png) | Couverture | +| 2 | [page-03.png](captures/page-03.png) | Texte BNB + logo Figure I.1 | +| 3 | [page-04.png](captures/page-04.png) | Introduction + illustration token | +| 4 | [page-05.png](captures/page-05.png) | Objectifs + illustration | +| 5–6 | [page-06.png](captures/page-06.png), [page-07.png](captures/page-07.png) | Partie obligatoire, encadrés | +| 7 | [page-08.png](captures/page-08.png) | Exemple `ls -al` | +| 8 | [page-09.png](captures/page-09.png) | Bonus | +| 9 | [page-10.png](captures/page-10.png) | Soumission | + +*(La page PDF « Contents » / table des matières correspond visuellement à [page-02.png](captures/page-02.png).)* + +--- + +## Éclaircissements (lecture facilitée) + +Ces points ne sont pas toujours explicites dans le PDF ; ils servent de fil conducteur pour le [guide de réalisation](../pedagogie/guide-realisation.md). + +| Terme | En bref | +|-------|---------| +| **Token** | Contrat intelligent qui suit une norme (souvent **20** : solde, `transfer`, `approve`, etc.) | +| **BEP-20 / ERC-20** | Interface standard ; sur BSC testnet, BscScan reconnaît les tokens BEP-20 | +| **Déploiement** | Transaction qui enregistre le bytecode du contrat sur la chaîne → **adresse** unique | +| **tBNB** | Monnaie native de **test** pour payer le gas sur BNB Smart Chain testnet | +| **Ownership** | Souvent `Ownable` (OpenZeppelin) : qui peut `mint`, changer des paramètres, etc. | +| **Démo minimale** | Ex. : lire `name`, `symbol`, `totalSupply` ; `transfer` ; éventuellement `mint` si prévu — montrable sur explorer + script ou Remix | +| **3 dossiers** | `code` = source ; `deployment` = scripts, config réseau, adresses déployées ; `documentation` = guide **utilisateur** du token (distinct de `docs/` du dépôt perso) | + +**Chaîne recommandée (alignée partenaire sujet)** : **BNB Smart Chain Testnet** + Solidity + BEP-20. Autre chaîne EVM possible si tu justifies en README et respectes le standard équivalent. + +--- + +## Prochaine étape + +→ [Plan de réalisation](../pedagogie/README.md) · [Apports pédagogiques](../pedagogie/01-apports-pedagogiques.md) diff --git a/tokenizer.pdf b/tokenizer.pdf new file mode 100644 index 0000000..1c53888 Binary files /dev/null and b/tokenizer.pdf differ diff --git a/tokenizerRendu/.gitignore b/tokenizerRendu/.gitignore new file mode 100644 index 0000000..88f4928 --- /dev/null +++ b/tokenizerRendu/.gitignore @@ -0,0 +1,19 @@ +# Secrets — jamais dans Git +.env +.env.* +!.env.example + +# Node / Hardhat +node_modules/ +cache/ +artifacts/ +typechain-types/ +coverage/ +dist/ + +# OS / IDE +.DS_Store +.idea/ +.vscode/ + +*.log diff --git a/tokenizerRendu/README.md b/tokenizerRendu/README.md new file mode 100644 index 0000000..f96ff7e --- /dev/null +++ b/tokenizerRendu/README.md @@ -0,0 +1,82 @@ +# Tokenizer — Build your own token + +Projet 42 — création et déploiement d’un **token** sur blockchain publique (**testnet**). + +> **Dépôt de rendu école** : ce dossier est la **racine** du dépôt Git Vogosphere. Pas de `docs/` ni de sujet traduit ici. + +## État du projet + +| Élément | Statut | +|---------|--------| +| Smart contract (`code/`) | À compléter | +| Déploiement (`deployment/`) | À compléter | +| Documentation utilisateur (`documentation/`) | À compléter | + +## Token (à compléter après déploiement) + +| Champ | Valeur | +|-------|--------| +| **Nom** | *(contient `42` — ex. `FortyTwoToken`)* | +| **Symbole** | *(ex. `FT42`)* | +| **Standard** | BEP-20 (BNB Smart Chain) | +| **Réseau** | *(ex. BNB Smart Chain **Testnet**, chainId `97`)* | +| **Adresse du contrat** | `0x...` | +| **Explorer** | *(ex. https://testnet.bscscan.com/address/0x...)* | + +## Choix techniques (à rédiger pour la soutenance) + +Explique **pourquoi** tu as fait ces choix (le sujet l’exige) : + +1. **Chaîne** : … +2. **Langage / outils** (Solidity, Hardhat, Remix, etc.) : … +3. **Bibliothèques** (ex. OpenZeppelin) : … +4. **Modèle économique** (supply, mint, decimals) : … +5. **Sécurité** (ownership, privilèges, ce qui est interdit) : … + +## Structure du dépôt + +``` +README.md ← ce fichier +code/ ← sources du smart contract +deployment/ ← scripts et infos de déploiement +documentation/ ← comment utiliser le token +``` + +## Lancer / tester (à adapter selon ta stack) + +Exemple avec Hardhat dans `code/` : + +```bash +cd code +npm install +npx hardhat compile +npx hardhat test +``` + +Déploiement (exemple) : + +```bash +# depuis deployment/ ou via script documenté dans deployment/README.md +``` + +**Ne jamais committer** de clé privée. Utiliser un fichier `.env` local (voir `.env.example` si présent). + +## Démo en évaluation (actions minimales) + +1. Montrer le contrat sur l’**explorer** (adresse + token). +2. **Transfer** entre deux comptes de test. +3. Expliquer **owner** et les fonctions restreintes (ex. `mint` `onlyOwner`). +4. Montrer que la **documentation/** permet d’utiliser le token sans ton aide. + +## Bonus + +*(Si implémenté : multisig — décrire ici où se trouve le code et comment le tester.)* + +## Vidéo démo (optionnel) + +*(Lien uniquement — la vidéo n’est pas requise et n’améliore pas la note.)* + +## Ressources + +- [BNB Chain Testnet Faucet](https://www.bnbchain.org/en/testnet-faucet) +- [BscScan Testnet](https://testnet.bscscan.com/) diff --git a/tokenizerRendu/code/README.md b/tokenizerRendu/code/README.md new file mode 100644 index 0000000..f6c8865 --- /dev/null +++ b/tokenizerRendu/code/README.md @@ -0,0 +1,14 @@ +# Code — smart contract(s) + +Place ici les sources du token (ex. `contracts/`, `hardhat.config.js`, tests). + +**Exigences sujet :** code commenté, noms de variables et fonctions explicites, standard **BEP-20** (ou équivalent documenté). + +## Commandes (à compléter) + +```bash +# Exemple Hardhat — adapter +npm install +npx hardhat compile +npx hardhat test +``` diff --git a/tokenizerRendu/deployment/README.md b/tokenizerRendu/deployment/README.md new file mode 100644 index 0000000..0bcde5a --- /dev/null +++ b/tokenizerRendu/deployment/README.md @@ -0,0 +1,11 @@ +# Déploiement + +Scripts, configuration réseau et **adresses déployées** (ex. `addresses.json`). + +Après déploiement sur **testnet public** : + +1. Noter l’adresse du contrat. +2. Vérifier le contrat sur l’explorer (BscScan testnet ou équivalent). +3. Reporter réseau + adresse dans le [README racine](../README.md). + +**Ne pas versionner** de clé privée — utiliser `.env` local. diff --git a/tokenizerRendu/documentation/README.md b/tokenizerRendu/documentation/README.md new file mode 100644 index 0000000..003fcc3 --- /dev/null +++ b/tokenizerRendu/documentation/README.md @@ -0,0 +1,13 @@ +# Documentation du token + +Ce dossier est évalué en soutenance : il doit permettre de **comprendre** le token et de **l’utiliser** (wallet, transferts, rôle du token). + +## Contenu à rédiger + +1. **Présentation** — à quoi sert ce token (même dans un cadre pédagogique). +2. **Réseau et adresse** — lien vers l’explorer. +3. **Guide d’utilisation** — ajouter le token dans un wallet, effectuer un transfert. +4. **Sécurité et gouvernance** — owner, mint, limites connues. +5. **(Optionnel)** `WHITEPAPER.md` — vision et fonctionnalités sur 1–2 pages. + +Ce fichier est distinct de la documentation **dev** du dépôt perso (`docs/` à la racine du dépôt de travail).