Files
tokenizer/docs/sujets/tokenizer.md
2026-10-19 13:54:57 +02:00

274 lines
13 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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** → voir [définition détaillée](../pedagogie/02-web3-comprendre.md). |
| 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*)
### BNB, Binance et BNB Chain
Le sigle **BNB** désigne à la fois l’**écosystème blockchain** du sujet (**BNB Chain**, *Build N Build*) et la **monnaie native** utilisée pour payer le **gas**. Sur testnet, on utilise **tBNB** (sans valeur réelle).
**Rapport avec Binance :** oui, **historiquement** — Binance a lancé et porté cet écosystème (l’actif s’appelait souvent *Binance Coin* ; la chaîne s’appelait **Binance Smart Chain**, **BSC**). Aujourd’hui la communication officielle parle surtout de **BNB Chain** comme réseau pour développeurs et DApps. Ce n’est **pas** le même produit que l’application d’**échange** Binance : pour Tokenizer, tu n’as en principe **pas besoin** d’un compte Binance — wallet + **testnet** + faucet suffisent.
| Terme | En bref |
|-------|---------|
| **Binance** | Exchange centralisé (entreprise) |
| **BNB Chain / BSC** | Blockchain smart contracts (ton déploiement) |
| **BEP-20** | Standard de **ton** token sur cette chaîne |
| **BscScan (testnet)** | Explorateur pour prouver le contrat déployé |
→ Développement détaillé : [section 10 — BNB, BNB Chain et Binance](../pedagogie/02-web3-comprendre.md#10-bnb-bnb-chain-et-binance-partenaire-du-sujet).
### 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.) — voir [§ ERC-20 / BEP-20](#erc-20-et-bep-20-éclaircissement) |
| **Argent réel** | **Jamais** demandé — utiliser des **chaînes de test** |
### ERC-20 et BEP-20 (éclaircissement)
**ERC-20** (Ethereum) et **BEP-20** (BNB Chain / BSC) définissent la même famille de **tokens fongibles** : `balanceOf`, `transfer`, `approve`, `totalSupply`, etc. Sur BSC, le code Solidity est en pratique le même qu’un ERC-20 (souvent bibliothèque **OpenZeppelin `ERC20`**) ; l’explorateur (**BscScan**) parle de **BEP-20** parce que la chaîne est BNB, pas parce que tu réécris une norme différente.
| Question | Réponse |
|----------|---------|
| BEP-20 obligatoire pour tout le monde ? | **Non** — obligatoire **si** tu choisis **BSC / BNB Chain**. Sur Ethereum testnet → **ERC-20**. |
| Piste la plus alignée avec le PDF ? | **BSC Testnet** + **BEP-20** (tBNB, partenariat BNB). |
| NFT / autre standard ? | Hors sujet type « token classique » ; rester sur le **20** fongible. |
→ Détail : [Standards ERC-20 et BEP-20](../pedagogie/02-web3-comprendre.md#6-standards-erc-20-et-bep-20).
### 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** | Normes tokens fongibles (BSC vs Ethereum) — [§ détaillé](#erc-20-et-bep-20-éclaircissement) · [doc Web3 §6](../pedagogie/02-web3-comprendre.md#6-standards-erc-20-et-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)