Plan d'implémentation — PD-53¶
1. Vue d'ensemble¶
Ce plan détaille l'implémentation du smart contract ProbatioVaultAnchor pour l'ancrage de Merkle roots sur blockchain publique.
Complexité estimée : Simple (5-8h) Framework : Foundry Langage : Solidity ^0.8.20 Dépendances : OpenZeppelin Contracts v5.x
2. Structure du projet¶
contracts/
├── src/
│ └── ProbatioVaultAnchor.sol # Contrat principal
├── test/
│ └── ProbatioVaultAnchor.t.sol # Tests Foundry
├── script/
│ ├── Deploy.s.sol # Script de déploiement générique
│ ├── DeployPolygon.s.sol # Déploiement Polygon Amoy
│ └── DeployArbitrum.s.sol # Déploiement Arbitrum Sepolia
├── foundry.toml # Configuration Foundry
└── README.md # Documentation
3. Tâches d'implémentation¶
T01 — Setup projet Foundry¶
- Initialiser projet avec
forge init - Configurer
foundry.toml(solc 0.8.20, optimizer 200 runs) - Installer OpenZeppelin :
forge install OpenZeppelin/openzeppelin-contracts - Créer
.gitignoreapproprié
Durée : 30 min Agent : Claude (developer)
T02 — Implémenter ProbatioVaultAnchor.sol¶
- Créer le contrat avec héritage Ownable
- Implémenter struct AnchorRecord optimisée (1 slot)
- Implémenter anchor() avec validations
- Implémenter isAnchored() et getAnchor()
- Override renounceOwnership() pour désactivation
- Ajouter NatSpec complet
Durée : 1h Agent : Claude (developer) Contract : CC-53-01
T03 — Implémenter tests unitaires¶
- Copier/adapter tests générés en étape 2
- Vérifier compilation avec
forge build - Exécuter tests avec
forge test -vvv - Vérifier couverture avec
forge coverage
Durée : 45 min Agent : Claude (developer)
T04 — Implémenter tests invariants¶
- Configurer invariant test avec Handler
- Définir target contract
- Exécuter avec
forge test --mt invariant
Durée : 30 min Agent : Claude (developer)
T05 — Scripts de déploiement¶
- Créer Deploy.s.sol générique
- Créer scripts spécifiques Polygon/Arbitrum
- Configurer RPC URLs dans foundry.toml
- Tester en local avec
forge script --dry-run
Durée : 45 min Agent : Claude (developer)
T06 — Documentation¶
- Écrire README.md avec instructions
- Documenter adresses de déploiement (à remplir post-deploy)
- Ajouter exemples d'utilisation
Durée : 30 min Agent : Claude (developer)
T07 — Déploiement testnets¶
- Déployer sur Polygon Amoy
- Vérifier source sur Polygonscan
- Déployer sur Arbitrum Sepolia
- Vérifier source sur Arbiscan
- Documenter adresses
Durée : 1h Agent : Claude (developer) Dépendances : T05, Credentials wallet testnet
T08 — Validation post-déploiement¶
- Exécuter anchor() sur chaque testnet
- Vérifier événement dans explorateur
- Tester isAnchored() et getAnchor()
- Capturer screenshots/preuves
Durée : 30 min Agent : Claude (developer) Dépendances : T07
4. Diagramme de dépendances¶
T01 (Setup)
│
├──► T02 (Contrat)
│ │
│ ├──► T03 (Tests unitaires)
│ │
│ └──► T04 (Tests invariants)
│
├──► T05 (Scripts deploy)
│ │
│ └──► T07 (Déploiement)
│ │
│ └──► T08 (Validation)
│
└──► T06 (Documentation)
5. Configuration Foundry¶
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc = "0.8.20"
optimizer = true
optimizer_runs = 200
evm_version = "paris"
[rpc_endpoints]
polygon_amoy = "${POLYGON_AMOY_RPC_URL}"
arbitrum_sepolia = "${ARBITRUM_SEPOLIA_RPC_URL}"
[etherscan]
polygon_amoy = { key = "${POLYGONSCAN_API_KEY}" }
arbitrum_sepolia = { key = "${ARBISCAN_API_KEY}" }
[invariant]
runs = 256
depth = 32
6. Risques et mitigations¶
| Risque | Probabilité | Impact | Mitigation |
|---|---|---|---|
| Testnet faucet vide | Moyenne | Faible | Utiliser plusieurs faucets |
| Gas estimation incorrecte | Faible | Faible | Tester en local d'abord |
| Vérification source échoue | Faible | Moyen | Utiliser --flatten si besoin |
7. Critères d'acceptation de l'étape 4¶
- Projet Foundry initialisé avec dépendances
- Contrat compilant sans erreur ni warning
- Tests passant à 100%
- Coverage >= 95%
- Gas anchor() < 50,000
- Scripts de déploiement fonctionnels
- Déploiement sur 2 testnets
- Sources vérifiées sur explorateurs
Auteur : Claude (orchestrateur) Date : 2026-02-16