Aller au contenu
Projet vitrineBlockchain & Web3
  • 223 tests
  • couverture 100 %
  • analysé par Slither

Milestone Escrow

Escrow par jalons pour les missions de freelances et d’agences, en ETH ou en tout ERC-20 standard

Solidity 0.8.28OpenZeppelin v5ETH / ERC-20Foundry

De quoi s’agit-il

MilestoneEscrow est un unique contrat d’escrow on-chain qui gère un nombre illimité de missions indépendantes. Le client provisionne la totalité du budget à la création de la mission, réparti en 50 jalons au maximum : le freelance constate que l’argent est bien là avant de commencer à travailler.

Les fonds ne bougent que lorsque le client libère un jalon, lorsqu’un arbitre neutre tranche un litige en répartissant les fonds non libérés en points de base, ou lorsque la mission est annulée et le client remboursé. De faibles frais de protocole (strictement plafonnés à 5 % et figés pour chaque mission) sont déduits des versements au freelance ; les remboursements ne supportent jamais de frais.

Le problème métier

Le travail à distance entre des parties qui ne se connaissent pas bute sur un déficit de confiance : les clients ne veulent pas payer d’avance, les freelances ne veulent pas livrer avant d’être payés. Les plateformes comblent ce déficit, mais elles prélèvent des frais importants, peuvent geler des comptes et tranchent les litiges d’une manière que les parties ne peuvent pas vérifier.

Comment ça marche

  1. 1

    Création : le client appelle createJob(freelancer, arbiter, token, amounts[]) et provisionne la somme totale en ETH ou dans un ERC-20. Les frais en vigueur sont figés dans la mission.

  2. 2

    Livraison : le freelance appelle requestRelease(jobId, i) pour signaler que le jalon i est terminé.

  3. 3

    Libération : le client appelle releaseMilestone(jobId, i). Le freelance reçoit le montant, déduction faite des frais ; une fois tous les jalons libérés, la mission est terminée.

  4. 4

    Litige (facultatif) : chacune des parties peut ouvrir un litige, ce qui gèle la mission. L’arbitre répartit chaque jalon non libéré entre le freelance et le client, en points de base.

  5. 5

    Annulation (facultatif) : le client peut annuler et être intégralement remboursé tant qu’aucune libération n’a été demandée ni effectuée ; l’arbitre peut annuler tant que la mission est ouverte.

Mesures de sécurité

  • nonReentrant sur chaque fonction qui déplace de la valeur ; état finalisé avant les appels externes (checks-effects-interactions)
  • Versements en ETH résistants au griefing : les paiements push qui échouent sont crédités pour un retrait ultérieur
  • Tokens fee-on-transfer rejetés grâce à un contrôle du solde avant et après
  • Plafond de frais (5 %) et frais figés par mission : le propriétaire ne peut pas augmenter les frais des missions déjà provisionnées
  • Boucles bornées (50 jalons max.) et trois rôles distincts
  • Ownable2Step ; l’administrateur ne peut jamais toucher aux fonds des missions
  • Invariant de solvabilité vérifié par fuzzing : le solde du contrat est égal à la somme des jalons non libérés

Fonctionnalités

  • Nombre illimité de missions dans un seul contrat
  • Provisionnement en ETH ou en ERC-20
  • Jusqu’à 50 jalons par mission
  • Demandes de libération et litiges, avec répartition par l’arbitre en points de base
  • Annulation et remboursement
  • Frais de protocole figés par mission, plafonnés à 5 %

Cas d’usage typiques

  • Places de marché de freelances et plateformes d’agences avec paiements non-custodial
  • Contrats de services B2B facturés par jalons
  • Programmes de subventions versées par tranches, avec un comité pour arbitre

Limites connues

L’arbitre doit rester neutre : en production, un multisig, une DAO ou un tribunal décentralisé. Les tokens à rebasing ne sont pas pris en charge.

Autres contrats vitrines

Vitrine

Token + Vesting + Staking

Un ERC-20 plafonné avec approbations sans gas, des calendriers de vesting avec cliff pour l’équipe et les investisseurs, et des récompenses de staking sur le modèle de Synthetix.

ERC-20EIP-2612OpenZeppelin v5

223 tests · couverture 100 % · analysé par Slither

Vitrine

SigmaNFT Collection

Un lancement de NFT équitable : phases allowlist et publique, limites par wallet, offre maximale immuable, royalties ERC-2981 et reveal différé.

ERC-721ERC-2981Merkle proofs

223 tests · couverture 100 % · analysé par Slither

Vitrine

Gold-Backed Token (RWA)

L’adossement devient une condition préalable de l’émission : des tokens ne peuvent être émis que si la réserve d’or déclarée couvre la nouvelle offre totale.

ERC-20AccessControlProof of reserve

223 tests · couverture 100 % · analysé par Slither

Standards : Solidity 0.8.x, OpenZeppelin, tests Foundry avec fuzzing, analyse statique Slither, code source vérifié. 223 tests · couverture 100 % · analysé par Slither.

Vous avez un projet en tête ?

Décrivez votre projet en quelques lignes. Un ingénieur senior vous répond sous 24 heures les jours ouvrés ; suivent un avis honnête, un périmètre clair et une proposition à prix fixe ou par jalons, en général en quelques jours ouvrés.

Vous préférez d’abord écrire ? Écrivez-nous

Vous échangez directement avec Ing. Ismet Mesic, Tech lead.