Une mini-blockchain accompagnée d'une API HTTP. L'objectif est pédagogique : illustrer simplement le fonctionnement d'une blockchain (transactions, mempool, blocs, hash, minage, persistance, validation).
Le projet est livré incomplet : certaines fonctions clés restent à implémenter.
Chacune est signalée par un commentaire TODO qui décrit la tâche et fournit
une aide. La marche à suivre est détaillée dans le dossier docs/,
organisé en modules.
Liste des modules et parcours conseillé : docs/README.md.
- Ajout de transactions (par exemple « Alice envoie 10 à Bob »).
- Mise en attente des transactions dans la mempool.
- Faux mineur qui regroupe les transactions dans un bloc et le mine.
- Construction de la blockchain, bloc après bloc.
- Sauvegarde de la chaîne dans un fichier, puis rechargement au démarrage.
- Détection d'une modification frauduleuse des données.
Node.js est requis (nodejs.org). Ensuite :
cd ~/Documents/simple_blockchain
npm installnpm startLe serveur écoute sur http://localhost:3000. Pour vérifier qu'il fonctionne,
ouvrir http://localhost:3000/health : la réponse, au format JSON, le confirme.
Pour l'arrêter : Ctrl + C.
npm testLa commande teste à la fois les exercices (exercices/) et les fonctions de la
blockchain (modules G à J). Chaque ligne affiche [OK] ou [KO]. Au départ,
presque tout est en [KO] : c'est normal, les fonctions ne sont pas encore
implémentées. L'objectif est de les écrire une par une et de tout faire passer
au [OK].
simple_blockchain/
├── index.js Serveur HTTP (déjà implémenté). Démarre avec "npm start".
├── src/
│ ├── blockchain.js Cœur du projet. Contient les fonctions à implémenter (G, H, J).
│ ├── storage.js Persistance dans un fichier (Module I).
│ └── miner.js Faux mineur (déjà implémenté).
├── data/
│ ├── chain.example.json Exemple de blockchain remplie, à titre d'illustration.
│ └── chain.json Blockchain de travail (créée automatiquement, non versionnée).
├── bruno/ Collection Bruno pour tester l'API (« Open Collection »).
└── docs/ Documentation, organisée en modules A à K.
La spécification complète, avec des exemples, figure dans docs/api.md. En résumé :
| Méthode | Adresse | Rôle |
|---|---|---|
| GET | /health |
État du serveur |
| POST | /add-transaction |
Ajouter une transaction |
| GET | /mempool |
Lister les transactions en attente |
| GET | /chain |
Consulter toute la blockchain |
| GET | /blocks/:index |
Consulter un bloc précis (ex : /blocks/0) |
| GET | /last-block |
Consulter le dernier bloc |
| GET | /validate |
Vérifier l'intégrité de la chaîne |
| POST | /admin/start-miner |
Démarrer le faux mineur |
| POST | /admin/stop-miner |
Arrêter le faux mineur |
Tant que les fonctions des modules G à J ne sont pas implémentées, certaines
routes renvoient un message commençant par TODO Module ..., qui indique la
fonction à écrire et le fichier concerné. La route /health, elle, est
disponible dès le démarrage.