Simulation pédagogique d'une blockchain en Java, axée sur la traçabilité et l'immutabilité des données dans le contexte logistique et de la billetterie.
Ce projet est une implémentation minimaliste mais fonctionnelle d'une blockchain en Java construite à partir de zéro. Conçu comme un projet pédagogique, il permet de comprendre le fonctionnement interne des technologies décentralisées : création de blocs, chaînage par hachage cryptographique (SHA-256), immutabilité, et systèmes de consensus.
Il explore le cas d'usage concret d'une Billetterie de Spectacle, en modélisant le cycle de vie d'un ticket sous la forme d'un actif numérique (similaire à un NFT).
- 🧱 Structure de Blocs : Stockage de données immuables incluant horodatage, données métier, référence vers le précédent, nonce, et hash.
- 🔐 Hachage Cryptographique : Sécurisation intégrale par l'algorithme SHA-256 (
java.security.MessageDigest). - 🛡️ Validation d'Intégrité : Mécanisme
isChainValid()robuste permettant de détecter toute tentative de falsification ou corruption des blocs passés. - 🎟️ Données Métier Enrichies : Implémentation complète d'un modèle de billetterie (
eventID,artist,status,owner). - 🤝 Modèles de Consensus : Différentes architectures abordées théoriquement et modélisées (PoW avec minage effectif, PoS, PBFT, PoA).
- 💾 Export JSON : Persistance asynchrone pour faciliter la lecture des données via le framework Gson.
- 🚀 Serveur API (Bonus) : Serveur HTTP local natif Java sans dépendances lourdes, pour interagir avec la blockchain en temps réel.
/blockchain-tracking
├── src/main/java/com/example/blockchain/
│ ├── ApplicationBlockChain.java # Point d'entrée principal (simulation workflow ticket)
│ ├── ApiServer.java # Serveur HTTP exposant une API REST bonus
│ ├── Block.java # Représentation d'un bloc de données (avec minage)
│ ├── Blockchain.java # Gestion du registre distribué et intégrité
│ └── consensus/
│ ├── ConsensusMechanism.java # Interface de base
│ ├── PBFT.java # Validation asynchrone par vote 2/3
│ ├── ProofOfAuthority.java # Validation par autorité centrale
│ ├── ProofOfStake.java # Validation basée sur l'intérêt/stack
│ └── ProofOfWork.java # Processus de hachage intensif
└── pom.xml # Fichier Maven gérant les dépendances (Gson)
- Java JDK 17 ou supérieur.
- Maven installé sur votre système.
La classe ApplicationBlockChain simule le cycle de vie complet d'un ticket :
- L'organisateur émet le ticket.
- Un premier client (Alice) achète le ticket.
- Le ticket est revendu à Bob, puis à Charlie.
- Charlie le fait scanner à l'entrée de l'événement.
- Une tentative de fraude imitant la réutilisation du ticket.
Pour l'exécuter via votre IDE, lancez simplement la classe principale com.example.blockchain.ApplicationBlockChain.
Ce projet inclut une petite API qui s'appuie sur com.sun.net.httpserver natif au JDK pour rendre la chaîne interopérable :
-
Démarrez la classe
com.example.blockchain.ApiServer -
Consulter la Blockchain via GET :
curl -X GET http://localhost:8080/api/blockchain
Note: Retournera l'entièreté des blocs au format JSON lisible et formaté.
-
Ajouter un bloc arbitraire via POST :
curl -X POST http://localhost:8080/api/blockchain
Le système gère un flux métier de transaction (simulant ce que serait un Smart-Contract) :
A_VENDRE ➔ VENDU (Alice) ➔ VENDU (Bob) ➔ VENDU (Charlie) ➔ UTILISE.
Si la chaîne détecte une modification manuelle (tentant de le renvoyer en VENDU), la structure cassera l'intégrité de son hachage en cascade, prouvant l'invalidation d'un document.
- Java - Logique orientée objet et sécurité.
- Maven - Gestion simplifiée des dépendances.
- Google Gson - Sérialisation JSON élégante.