Vue d’ensemble
Objectif : assurer une traçabilité complète d’un lot de poulpe, du bateau au client UE, avec des preuves infalsifiables.
La preuve est réalisée via OpenTimestamps et ancrée dans la blockchain Bitcoin.
| Composant | Rôle | Emplacement |
|---|---|---|
| admin-ui | Dashboard (HTML/CSS/JS) + consultation lots/événements + preuve blockchain | /admin-ui |
| API NestJS | Endpoints admin/public, logique métier, Prisma | /api |
| Worker OTS | Batch OpenTimestamps : agrège les hashes, crée .txt + .ots | /ots-worker |
| Nginx | Reverse proxy + fichiers statiques (/files) | /nginx |
| DB | Stockage lots/événements/proofs/logs (Prisma) | MySQL (docker-compose) |
Flux de données
1) Création et chaîne de hash
- Un lot est créé via POST /api/v1/lots.
- Le backend crée un premier événement (CATCH_CREATED) et calcule eventHash (SHA‑256 + signature serveur).
- Chaque nouvel événement inclut le prevHash pour former une chaîne inviolable.
2) OpenTimestamps (ancrage)
- Le worker repère les événements otsStatus=PENDING.
- Il agrège jusqu’à 200 hashes et génère un fichier batch_*.txt.
- Il exécute ots stamp → produit batch_*.txt.ots.
- La DB est mise à jour : otsStatus=ANCHORED, otsFileKey, otsHashesKey.
3) Vérification / Confirmation Bitcoin
- Le dashboard appelle GET /api/v1/lots/<lotId>/verify-proof pour afficher le statut global.
- Le bouton Vérifier manuellement appelle POST /api/v1/lots/<lotId>/verify-proof.
- Les résultats sont historisés dans ProofVerificationLog (table DB).
Important : en environnement Docker, la vérification via ots verify est désactivée par défaut.
Activez-la avec ENABLE_OTS_VERIFY=true si l’outil OTS est disponible dans le conteneur.
Endpoints clés
| Type | Endpoint | Description |
|---|---|---|
| ADMIN | POST /api/v1/lots | Créer un lot (JWT requis). |
| ADMIN | POST /api/v1/lots/<lotId>/events | Créer un événement. |
| ADMIN | GET /api/v1/lots/<lotId>/verify-proof | Statut preuve + fichiers + historique. |
| ADMIN | POST /api/v1/lots/<lotId>/verify-proof | Vérification manuelle. |
| ADMIN | GET /api/v1/lots/<lotId>/ots-file | Téléchargement du .ots. |
| ADMIN | GET /api/v1/lots/<lotId>/original-file | Téléchargement du fichier d’origine (.txt). |
| PUBLIC | GET /api/v1/public/proof/<lotId> | Preuve publique (liens fichiers). |