PD-53 — Expression de besoin¶
1. Contexte¶
ProbatioVault repose sur un mécanisme d'ancrage périodique des preuves cryptographiques via des Merkle roots générées à partir d'événements journalisés (append-only, WORM).
L'architecture probatoire prévoit :
- Agrégation périodique des événements en arbre de Merkle
- Signature HSM du Merkle root
- Horodatage TSA qualifié
- Ancrage sur blockchain publique ← PD-53
- Génération de preuve composite vérifiable indépendamment
Ce besoin concerne uniquement la couche blockchain permettant d'inscrire publiquement l'empreinte Merkle.
Documents de référence¶
- Fiche brevet Preuve Composite Ancrée (805)
- Spécifications techniques Zero-Knowledge (42)
- Cahier d'Architecture Tech Lead v4.1 (41)
- PD-52 : Connexion Ethereum L2 (dépendance)
2. Objectif¶
Permettre à ProbatioVault d'ancrer de manière publique, immuable et vérifiable les Merkle roots générées par le système, via un smart contract déployé sur des blockchains compatibles Ethereum.
L'ancrage doit :
- Garantir l'intégrité publique des racines de Merkle
- Permettre la vérification indépendante hors système ProbatioVault
- Constituer une preuve opposable en cas de litige
- Être compatible avec la stratégie multi-chaînes (Polygon + Arbitrum)
3. Périmètre fonctionnel¶
3.1 Inclus¶
| ID | Fonctionnalité |
|---|---|
| F-53-01 | Inscription d'une merkleRoot (type bytes32) sur blockchain |
| F-53-02 | Émission d'un événement on-chain permettant l'audit public |
| F-53-03 | Identification publique et pérenne du contrat (adresse stable, version) |
| F-53-04 | Déploiement sur testnets Polygon Amoy et Arbitrum Sepolia |
| F-53-05 | Contrôle d'accès Ownable (seul le owner peut ancrer) |
| F-53-06 | Fonction de vérification d'existence d'un ancrage |
3.2 Exclus¶
| Hors périmètre | Justification |
|---|---|
| Construction de l'arbre de Merkle | Traité hors chaîne (backend) |
| Signature HSM | Composant séparé (PD-36/37) |
| Horodatage TSA | Composant séparé (PD-39) |
| Génération de la preuve composite | Orchestration backend |
| Orchestration backend d'appel blockchain | PD-52 (connexion L2) |
| Batch anchoring (plusieurs roots/tx) | ENF-4 simplicité |
4. Résultat attendu¶
À l'issue de PD-53 :
- Un smart contract Solidity existe et est déployé
- Il permet l'enregistrement d'un Merkle root via
anchor(bytes32) - Chaque ancrage produit une trace on-chain vérifiable
- Un tiers indépendant peut :
- Lire le contrat et les événements
- Récupérer la racine ancrée
- Vérifier qu'un hash donné a été ancré à une date donnée
- Vérifier la date via le timestamp du bloc
5. Exigences fonctionnelles¶
EF-1 — Enregistrement d'un Merkle Root¶
Le système doit permettre l'inscription d'un hash racine (bytes32) correspondant à un arbre de Merkle.
Signature : function anchor(bytes32 merkleRoot) external onlyOwner
Comportement : - Accepte un bytes32 non nul - Rejette si merkleRoot == bytes32(0) - Rejette si merkleRoot déjà ancré (unicité) - Émet un événement MerkleRootAnchored
EF-2 — Traçabilité publique¶
Chaque inscription génère un événement blockchain contenant :
event MerkleRootAnchored(
bytes32 indexed merkleRoot,
address indexed anchor,
uint256 timestamp,
uint256 blockNumber
);
| Champ | Description |
|---|---|
merkleRoot | La racine ancrée (indexed pour recherche) |
anchor | L'adresse appelante (owner) |
timestamp | block.timestamp au moment de l'ancrage |
blockNumber | Numéro du bloc pour traçabilité |
EF-3 — Non-altérabilité¶
- Une racine déjà inscrite ne peut pas être modifiée
- Une racine déjà inscrite ne peut pas être supprimée
- Le contrat ne contient pas de fonction de mise à jour ou suppression
EF-4 — Vérifiabilité indépendante¶
Un tiers sans accès à ProbatioVault peut :
- Lire le contrat via un explorateur (Polygonscan, Arbiscan)
- Interroger les événements
MerkleRootAnchored - Vérifier qu'un hash donné a été ancré :
isAnchored(bytes32) → bool - Récupérer les métadonnées d'un ancrage :
getAnchor(bytes32) → (address, uint256, uint256)
EF-5 — Identité contractuelle stable¶
Le contrat possède :
| Élément | Valeur |
|---|---|
| Nom | ProbatioVaultAnchor |
| Version | string public constant VERSION = "1.0.0" |
| Adresse | Stable après déploiement (non upgradable) |
| Code source | Vérifié sur Polygonscan/Arbiscan |
6. Exigences non fonctionnelles¶
ENF-1 — Coût maîtrisé¶
| Métrique | Cible |
|---|---|
| Gas par ancrage | < 50,000 gas |
| Coût estimé (Polygon) | < $0.01 USD par ancrage |
| Coût estimé (Arbitrum) | < $0.05 USD par ancrage |
Le coût doit rester compatible avec le modèle économique mutualisé décrit dans la fiche brevet Preuve Composite.
ENF-2 — Scalabilité¶
| Métrique | Cible |
|---|---|
| Volume ancrages | Illimité (append-only) |
| Durée de vie | 10+ ans |
| Ancrages simultanés | N/A (une root par tx) |
ENF-3 — Pérennité¶
- Le contrat reste lisible et vérifiable indépendamment de ProbatioVault
- Le code source est vérifié et publié
- Aucune dépendance à un service externe (oracle, API)
ENF-4 — Simplicité¶
Le contrat doit rester minimaliste :
- Surface d'attaque minimale
- Coûts de gas minimaux
- Risques de bug minimaux
- Pas de pattern upgradable (doute probatoire)
- Pas de fonctions administratives complexes
7. Contraintes techniques¶
| Contrainte | Valeur |
|---|---|
| Langage | Solidity ^0.8.20 |
| Framework | Foundry |
| EVM compatible | Oui |
| L2 cibles | Polygon PoS, Arbitrum One |
| Testnets | Polygon Amoy, Arbitrum Sepolia |
| Dépendances | OpenZeppelin Contracts (Ownable) |
| Cohérence | PD-52 (connexion Ethereum L2) |
8. Hypothèses¶
| ID | Hypothèse |
|---|---|
| H-01 | Le Merkle root est généré hors chaîne par le backend |
| H-02 | La racine est préalablement signée/horodatée hors smart contract |
| H-03 | Le smart contract n'est pas responsable de la validité cryptographique interne |
| H-04 | Le owner est un wallet sécurisé (multisig ou HSM-backed) |
| H-05 | PD-52 fournit l'infrastructure de connexion L2 |
9. Risques identifiés¶
| ID | Risque | Mitigation |
|---|---|---|
| R-01 | Dépendance à une blockchain spécifique | Multi-chain (Polygon + Arbitrum) |
| R-02 | Évolution réglementaire | Simplicité juridique (simple registre) |
| R-03 | Gas spikes | L2 avec frais prévisibles |
| R-04 | Erreur d'ancrage irrémédiable | Validation off-chain avant soumission |
| R-05 | Perte clé owner | Multisig ou procédure de récupération |
10. Résultats inacceptables¶
| ID | Résultat inacceptable |
|---|---|
| RI-01 | Possibilité de modification d'un ancrage |
| RI-02 | Dépendance à une base de données centralisée pour vérifier |
| RI-03 | Smart contract upgradable introduisant un doute probatoire |
| RI-04 | Perte d'accès aux événements historiques |
| RI-05 | Ancrage d'un bytes32(0) (racine nulle) |
| RI-06 | Double ancrage d'une même racine |
11. Tensions à préserver¶
Simplicité vs Évolutivité¶
Un contrat minimaliste renforce la sécurité mais limite les évolutions futures.
Décision : Privilégier la simplicité. Un nouveau contrat peut être déployé si évolution majeure requise. L'historique reste accessible sur l'ancien contrat.
Coût vs Fréquence d'ancrage¶
- Ancrage fréquent = meilleure granularité probatoire
- Ancrage rare = réduction des coûts gas
Décision : Hors périmètre PD-53. La fréquence est déterminée par l'orchestrateur backend (PD-52).
Multi-chaîne vs Cohérence juridique¶
Multiplier les blockchains augmente la résilience mais complexifie la preuve judiciaire.
Décision : Deux chaînes (Polygon + Arbitrum) pour résilience. Un ancrage sur une chaîne suffit pour validité probatoire.
12. Indicateurs de validation¶
Le besoin sera satisfait si :
| ID | Critère de validation |
|---|---|
| V-01 | Une racine Merkle peut être inscrite sur testnet |
| V-02 | Un explorateur blockchain affiche l'événement |
| V-03 | Un hash externe peut être vérifié via isAnchored() |
| V-04 | L'adresse du contrat est documentée |
| V-05 | Le code source est vérifié sur les explorateurs |
| V-06 | Les tests Foundry passent à 100% |
| V-07 | Gas < 50,000 par ancrage |
13. Synthèse¶
PD-53 crée la brique publique d'ancrage immuable du système Preuve Composite.
Le smart contract est un registre minimaliste d'empreintes garantissant :
- Immutabilité : aucune modification possible
- Transparence : événements publics et vérifiables
- Auditabilité : code source vérifié
- Opposabilité juridique : preuve indépendante de ProbatioVault
Livrables attendus¶
| Livrable | Description |
|---|---|
ProbatioVaultAnchor.sol | Smart contract principal |
ProbatioVaultAnchor.t.sol | Tests Foundry |
deploy-polygon.s.sol | Script de déploiement Polygon |
deploy-arbitrum.s.sol | Script de déploiement Arbitrum |
| Documentation technique | README, NatSpec |
| Adresses déployées | Testnets vérifiés |
Auteur : Claude (orchestrateur) Date : 2026-02-16 Version : 1.0