Le séquestre, un jalon à la fois
Un petit contrat par entente détient le budget et ne verse que selon ses règles.
Trois rôles
Financeur
Bloque le budget et rédige le plan.
Prestataire
Livre chaque jalon et reçoit sa part.
Valideurs
Valident ; k sur n doivent signer (une multisignature).
La vie d'un jalon
L'argent ne bouge que sur les deux flèches épaisses.
L'argent bloqué ou en revue est toujours en séquestre.
Trois façons de valider
Le financeur approuve
Une seule signature. Idéal pour les petites primes.
k valideurs sur n
La signature qui atteint k verse aussi la part.
Vérification automatique
Un oracle (un service qui transmet un fait public) la confirme. Pas encore ? On réessaie plus tard.
Un exemple concret
Une subvention de 6 000 tUSDC, validée par 2 mentors sur 3.
| Jalon | Part | Montant | Validé par |
|---|---|---|---|
| Spécification et RFC2 valideurs sur 3 | 15 % | 900 tUSDC | 2 valideurs sur 3 |
| Cache local et moteur de synchro2 valideurs sur 3 | 35 % | 2 100 tUSDC | 2 valideurs sur 3 |
| Interface de résolution des conflits2 valideurs sur 3 | 30 % | 1 800 tUSDC | 2 valideurs sur 3 |
| Documentation et versionVérification automatique : version publiée | 20 % | 1 200 tUSDC | Vérification automatique : version publiée |
Les parts totalisent exactement 100 % ; le dernier jalon prend l'arrondi.
Échéances, rappels et remboursements
- Passé son échéance, un jalon apparaît en retard ; le financeur peut envoyer un rappel.
- Annuler rembourse tout ce qui n'est pas versé, même un jalon en revue.
Pour les développeurs
La couche de données de la démo reproduit le contrat, une fonction par changement d'état.
Voir l'interface du contrat
| Fonction | Ce qu'elle fait | Équivalent dans la démo |
|---|---|---|
| lockFunds() | Déployer l'entente et déposer le budget | lockAgreement() |
| submit() | Le prestataire déclare un jalon livré | submitMilestone() |
| approve() | Une signature ; verse quand la règle est remplie | approveMilestone() |
| requestChanges() | Renvoyer un jalon, l'argent reste bloqué | requestChanges() |
| checkAndRelease() | Interroger l'oracle ; verser si la condition est remplie | releaseByCheck() |
| cancel() | Rembourser au financeur chaque jalon non versé | cancelAndRefund() |