Skip to content

An0sun/blockchain-tracking

Repository files navigation

🔗 Blockchain Tracking (Billetterie de Spectacle)

Java Version Maven Gson Status

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.


📖 À propos

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).

✨ Fonctionnalités clés

  • 🧱 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.

🏗️ Architecture du Projet

/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)

🚀 Utilisation & Démonstration

1. Prérequis

2. Démarrer la simulation de la billetterie

La classe ApplicationBlockChain simule le cycle de vie complet d'un ticket :

  1. L'organisateur émet le ticket.
  2. Un premier client (Alice) achète le ticket.
  3. Le ticket est revendu à Bob, puis à Charlie.
  4. Charlie le fait scanner à l'entrée de l'événement.
  5. 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.

3. Utiliser l'API Locale (Bonus)

Ce projet inclut une petite API qui s'appuie sur com.sun.net.httpserver natif au JDK pour rendre la chaîne interopérable :

  1. Démarrez la classe com.example.blockchain.ApiServer

  2. 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é.

  3. Ajouter un bloc arbitraire via POST :

    curl -X POST http://localhost:8080/api/blockchain

🧠 Cycle de vie simulé d’un billet

Le système gère un flux métier de transaction (simulant ce que serait un Smart-Contract) : A_VENDREVENDU (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.

🛠️ Conçu avec

  • Java - Logique orientée objet et sécurité.
  • Maven - Gestion simplifiée des dépendances.
  • Google Gson - Sérialisation JSON élégante.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages