Aller au contenu

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 .gitignore approprié

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