Plateforme éducative interactive pour apprendre la blockchain en s'amusant
🎓 Développé par le Club IBC (INPT Blockchain Club) de l'INPT pour rendre l'apprentissage de la blockchain accessible et ludique.
# 1. Cloner le projet
git clone https://github.com/zakeelm6/Blockchain-Simulation-Game.git
cd Blockchain-Simulation-Game
# 2. Lancer avec Docker (recommandé)
docker-compose up
# ✅ Accéder à l'application
# Frontend : http://localhost:5173
# Backend : http://localhost:4000Blockchain Simulation Game est un outil pédagogique développé par le Club IBC (Inpt Blockchain Club) de l'INPT pour enseigner les concepts fondamentaux de la blockchain de manière interactive.
- Comprendre le rôle des validateurs dans un réseau blockchain
- Expérimenter la validation de smart contracts
- Découvrir la gouvernance DAO (Decentralized Autonomous Organization)
- Apprendre le concept de Proof of Work à travers le minting
- Comprendre les votes pondérés et la prise de décision décentralisée
- 🎮 4 modes de jeu : Solo, Solo en Salle, Classe, DAO Builder
- 🤖 8 validateurs automatiques pour simulation réaliste du réseau
- ⛏️ Mining interactif avec Proof of Work simplifié (recherche de nonce)
- 🗳️ Système de vote DAO avec votes pondérés par score
- 📊 Dashboard temps réel pour le suivi multi-joueurs
- 🏆 Classements automatiques avec calcul dynamique des scores
- 🔐 Salles sécurisées avec clés d'accès (6 caractères)
- 📱 Interface responsive adaptée à tous les écrans
- 🎯 42 endpoints REST pour une API complète
- 👥 Mode équipe avec validation collaborative
- 🏛️ Gouvernance DAO avec propositions et exécution automatique
- 📚 Smart contracts Solidity réels pour l'apprentissage
Les participants doivent identifier et valider des smart contracts parmi plusieurs propositions. Un système de validation décentralisé simule le consensus d'un réseau blockchain.
Concepts abordés :
- Smart contracts
- Validation par consensus
- Proof of Stake (simplifié)
- Responsabilité et pénalités
Une mini-compétition chronométrée (4 minutes) où les équipes "minent" un bloc pour gagner des points bonus.
Concepts abordés :
- Proof of Work
- Mining et récompenses
- Compétition dans un réseau
Les participants utilisent leurs tokens accumulés pour voter sur d'autres équipes. Les votes sont pondérés selon le nombre de tokens détenus.
Concepts abordés :
- Gouvernance décentralisée (DAO)
- Votes pondérés par tokens
- Transparence blockchain
- Réputation dans un réseau
- Node.js (version 16 ou supérieure)
- npm ou yarn
- Git
git clone https://github.com/zakeelm6/Blockchain-Simulation-Game.git
cd Blockchain-Simulation-Game# Lancer l'application complète
docker-compose up
# Accéder à l'application
# Frontend : http://localhost:5173
# Backend : http://localhost:4000cd backend
npm install
npm startLe backend sera accessible sur http://localhost:4000
cd frontend
npm install
npm run devLe frontend sera accessible sur http://localhost:5173
Parfait pour découvrir le jeu individuellement. Le joueur suit un parcours complet :
- Choix de smart contract : Identifier le contrat valide
- Validation par 8 bots : Les validateurs automatiques évaluent votre choix (minimum 2 requis)
- Challenge Mining : Résoudre un puzzle de Proof of Work
- Vote DAO : Participer au vote avec les autres validateurs
Mode multijoueur avec progression individuelle, idéal pour les enseignants :
- Un hôte crée une salle et obtient une clé d'accès (6 caractères)
- Les joueurs rejoignent avec la clé et jouent individuellement
- Chaque joueur progresse à son rythme dans le challenge complet
- Dashboard temps réel : L'hôte suit la progression de tous les participants
- Classement automatique : Scores et statistiques en direct
- Parfait pour des cours, ateliers ou compétitions
Jusqu'à 8 équipes jouent simultanément en mode collaboratif :
- Sélection de cryptomonnaies par équipe
- Compétition entre équipes
- Scores en temps réel
- Activités synchronisées
Mode avancé de gouvernance décentralisée :
- Création d'organisations DAO autonomes
- Système de propositions et votes pondérés
- Exécution automatique des décisions
- Gestion de trésorerie collective
- Formation à la gouvernance on-chain
Le Mode Solo en Salle est parfait pour les enseignants, formateurs et organisateurs d'ateliers.
- L'hôte crée une salle en donnant un nom
- Le système génère une clé d'accès unique (6 caractères)
- L'hôte partage cette clé avec les participants
- Chaque joueur entre la clé de 6 caractères
- Ils créent leur nom de joueur
- Ils rejoignent la salle et apparaissent sur le dashboard de l'hôte
Chaque joueur progresse à son rythme dans le parcours complet :
- Smart Contract : Choisir entre 2 contrats (valide/invalide)
- Validation : 8 bots votent (minimum 2 requis pour passer)
- Mining : Résoudre un puzzle PoW chronométré
- Vote DAO : Voter pour/contre les autres validateurs
L'hôte voit en direct :
- Statistiques globales : Total joueurs, en jeu, terminés, éliminés
- Classement live : Score de chaque joueur mis à jour automatiquement
- Progression : Statut de chaque participant
| Étape | Points gagnés |
|---|---|
| Smart Contract valide | +30 points |
| Validation réussie (≥2 bots) | Passage à l'étape suivante |
| Mining réussi | +20 points |
| Vote DAO | Score final basé sur les votes reçus |
Score maximum possible : Variable selon les votes DAO (généralement 100-200 points)
- 👨🏫 Enseignants : Cours interactif sur la blockchain
- 🏢 Entreprises : Formation des employés
- 🎓 Universités : TP et ateliers pratiques
- 🏆 Événements : Compétitions et hackathons
Blockchain-Simulation-Game/
├── frontend/ # Application React
│ ├── src/
│ │ ├── App.jsx # Routeur principal
│ │ ├── LandingPage.jsx # Page d'accueil (4 modes)
│ │ ├── apiClient.js # Client API REST
│ │ │
│ │ ├── # Mode Solo
│ │ ├── SoloGame.jsx # Orchestrateur mode solo
│ │ ├── SoloContractChoice.jsx # Choix smart contract
│ │ ├── BotValidator.jsx # Validation par 8 bots
│ │ ├── MiningChallenge.jsx # Challenge mining PoW
│ │ ├── VotingChallenge.jsx # Vote DAO
│ │ ├── Results.jsx # Écran résultats final
│ │ │
│ │ ├── # Mode Solo en Salle
│ │ ├── SoloRoomMode.jsx # Orchestrateur solo room
│ │ ├── SoloRoomCreate.jsx # Création de salle
│ │ ├── SoloRoomJoin.jsx # Rejoindre salle
│ │ ├── SoloRoomDashboard.jsx # Dashboard hôte temps réel
│ │ ├── SoloRoomPlayer.jsx # Interface joueur
│ │ │
│ │ ├── # Mode Classe
│ │ ├── ClassMode.jsx # Orchestrateur mode classe
│ │ ├── ClassCreate.jsx # Création classe
│ │ ├── ClassJoin.jsx # Rejoindre classe
│ │ ├── ClassWaiting.jsx # Salle d'attente
│ │ ├── ParticipantWaiting.jsx # Attente participant
│ │ ├── TeamVoting.jsx # Vote en équipe
│ │ ├── TeamMining.jsx # Mining en équipe
│ │ ├── ClassResults.jsx # Résultats classe
│ │ ├── SoloClassMode.jsx # Mode solo dans classe
│ │ ├── SoloClassPlayer.jsx # Joueur solo classe
│ │ ├── SoloClassDAO.jsx # DAO solo classe
│ │ ├── SoloDashboard.jsx # Dashboard solo classe
│ │ ├── ValidatorView.jsx # Vue validateur
│ │ ├── IndividualVoting.jsx # Vote individuel
│ │ │
│ │ ├── # Mode DAO
│ │ ├── DAOMode.jsx # Orchestrateur mode DAO
│ │ ├── DAOCreate.jsx # Création DAO
│ │ ├── DAOJoin.jsx # Rejoindre DAO
│ │ ├── DAOWaiting.jsx # Salle d'attente DAO
│ │ ├── DAODashboard.jsx # Dashboard DAO
│ │ │
│ │ ├── # Utilitaires
│ │ ├── TeacherAccess.jsx # Accès enseignant
│ │ └── main.jsx # Point d'entrée React
│ │
│ └── index.html
│
├── backend/ # API Node.js + Express
│ ├── server.js # Serveur avec 42 endpoints
│ └── smartContracts.js # Base de données smart contracts
│
├── assets/ # Images et logos
├── docker-compose.yml # Configuration Docker
├── QUICK_START.md # Guide démarrage rapide
├── LICENSE # Licence MIT
└── README.md # Ce fichier
- React 18 - Framework UI moderne
- Vite - Build tool ultra-rapide
- React Router - Navigation
- CSS personnalisé - Styling responsive
- Node.js 16+ - Runtime JavaScript
- Express.js - Framework web minimaliste
- CORS - Gestion des requêtes cross-origin
- API REST - Architecture RESTful
- Docker - Conteneurisation
- Docker Compose - Orchestration multi-conteneurs
- nginx - Serveur web (production)
L'application expose 42 endpoints REST organisés par fonctionnalité :
GET /api/health- Vérifier l'état du serveur
GET /api/solo/contracts/pair- Obtenir 2 smart contracts (1 valide, 1 invalide)POST /api/solo/contracts/answer- Soumettre le choix et obtenir la validation
POST /api/solo-room/create- Créer une salle avec clé uniqueGET /api/solo-room/:code- Obtenir les infos d'une sallePOST /api/solo-room/:code/join- Rejoindre une sallePOST /api/solo-room/:code/player/:playerName/update- MAJ progression joueurPOST /api/solo-room/:code/finish- Terminer et clôturer la salle
POST /api/class/create- Créer une classePOST /api/class/join- Rejoindre une classeGET /api/class/:code- Obtenir infos classePOST /api/class/:code/start- Démarrer la classePOST /api/class/:code/vote- Vote collectif équipePOST /api/class/:code/validate- Valider les votesPOST /api/class/:code/mine- Phase mining équipePOST /api/class/:code/dao-vote- Vote DAO en classePOST /api/class/:code/solo/start- Démarrer mode solo dans classePOST /api/class/:code/solo/choose-contract- Choix contrat solo classePOST /api/class/:code/solo/mine- Mining solo classePOST /api/class/:code/solo/start-dao- Démarrer DAO solo classePOST /api/class/:code/solo/dao-vote- Vote DAO solo classe
POST /api/dao/create- Créer une organisation DAOGET /api/dao/:code- Obtenir infos DAOPOST /api/dao/:code/join- Rejoindre DAOPOST /api/dao/:code/activate- Activer la DAOPOST /api/dao/:code/proposal/create- Créer une propositionPOST /api/dao/:code/proposal/:proposalId/vote- Voter sur propositionPOST /api/dao/:code/proposal/:proposalId/execute- Exécuter proposition
GET /api/activity1/teams- Obtenir les équipesPOST /api/activity1/init- Initialiser l'activitéPOST /api/activity1/bump- Mettre à jour scores équipePOST /api/activity1/reset- Réinitialiser activitéGET /api/activity1/eligible- Obtenir équipes éligibles
POST /api/mint/apply- Appliquer récompenses mining
GET /api/teams- Obtenir toutes les équipesPOST /api/teams/reset- Réinitialiser équipes
GET /api/votes/log- Historique complet des votesPOST /api/votes/submit- Soumettre votes DAOPOST /api/votes/deleteOne- Supprimer un votePOST /api/votes/clear- Effacer tous les votesPOST /api/votes/resetAggregates- Réinitialiser agrégatsPOST /api/results/compute- Calculer résultats finaux
4 modes de jeu disponibles dès le lancement avec boutons colorés distinctifs :
- 🎮 Mode Solo (Bleu) - Apprentissage individuel
- 🎯 Solo en Salle (Vert) - Multijoueur individuel pour enseignants
- 🎓 Mode Classe (Violet) - Jeu en équipes collaboratives
- 🏛️ DAO Builder (Orange) - Gouvernance décentralisée avancée
- Choix du Smart Contract : 2 contrats proposés, 1 seul est valide
- Validation par Bots : 8 validateurs automatiques votent
- Mining Challenge : Résoudre un puzzle PoW chronométré
- Vote DAO : Voter pour/contre les participants avec animation circulaire
- Statistiques en temps réel
- Classement dynamique des joueurs
- Suivi de la progression (En jeu / Terminé / Éliminé)
- Mise à jour automatique toutes les 2 secondes
| Concept | Où dans l'app |
|---|---|
| Smart Contracts | Choix et validation de contrats Solidity |
| Consensus | Validation par 8 bots (simulation réseau) |
| Proof of Work | Challenge mining avec nonce |
| Proof of Stake | Votes pondérés par score |
| DAO Governance | Vote collectif pour/contre |
| Blockchain Network | Simulation de 9 nœuds (joueur + 8 bots) |
| Rewards | Points pour smart contract et mining |
| Penalties | Élimination si validation échoue |
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche (
git checkout -b feature/amelioration) - Commit vos changements (
git commit -m 'Ajout d'une fonctionnalité') - Push vers la branche (
git push origin feature/amelioration) - Ouvrir une Pull Request
- Mode Solo : 1 joueur + 8 validateurs bots
- Mode Solo en Salle : Illimité (chaque joueur progresse individuellement)
- Mode Classe : Jusqu'à 8 équipes de 1-4 joueurs
- DAO Builder : Illimité (membres de l'organisation)
- Mode Solo : 10-15 minutes (selon la vitesse du joueur)
- Mode Solo en Salle : Variable (chaque joueur à son rythme)
- Mode Classe : 20-30 minutes (avec mining et votes)
Aucun ! L'application est conçue pour être accessible même sans connaissances préalables en blockchain.
Absolument ! C'est l'objectif principal. Le Mode Solo en Salle est spécifiquement conçu pour les enseignants.
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
En résumé : Vous pouvez librement utiliser, modifier et distribuer ce projet, y compris à des fins commerciales.
Développé avec ❤️ par le Club IBC - INPT
Club IBC (Inpt Blockchain Club) - Club étudiant de l'Institut National des Postes et Télécommunications dédié à l'apprentissage et à l'expérimentation de la blockchain.
- *Zakariya El Mansouri (@zakeelm6)
Merci à tous les contributeurs qui ont participé à ce projet !
- 🐛 Signalez un bug via GitHub Issues
- 💡 Proposez une amélioration via Pull Request
- Tous les membres du Club IBC
- Les contributeurs open-source
- Documentation React
- Documentation Express.js
- Solidity Documentation
- Introduction à la Blockchain
- DAO Concepts