Escrow Smart Contract est un contrat décentralisé construit en Solidity pour faciliter les transactions sécurisées entre un acheteur et un vendeur avec la participation d'un arbitre. Ce contrat garantit la sécurité des fonds lors des transactions en utilisant une logique de dépôt fiduciaire (escrow) et permet la résolution de litiges via un arbitre désigné.
Le contrat Escrow permet à un acheteur et un vendeur de sécuriser leurs transactions via un contrat intelligent. Les fonds sont verrouillés jusqu'à ce que l'acheteur confirme la réception de la marchandise ou que l'arbitre intervienne en cas de litige. Cette solution décentralisée apporte une sécurité accrue pour les transactions sans nécessiter de confiance préalable entre les parties.
- Escrow sécurisé : Les fonds sont bloqués dans le contrat jusqu'à la finalisation de la transaction.
- Arbitrage : Un arbitre peut intervenir pour annuler ou valider la transaction en cas de litige.
- Gestion des étapes de transaction : Le contrat passe par différentes étapes, de la configuration de l'accord à sa finalisation.
- Annulation : L'arbitre peut annuler la transaction et rembourser l'acheteur si nécessaire.
- Finalisation : L'arbitre peut transférer les fonds au vendeur une fois la transaction complétée.
- Solidity : Langage de programmation pour le contrat intelligent.
- Foundry : Outil de développement et de test pour Solidity.
- OpenZeppelin : Bibliothèque de sécurité pour Solidity, notamment pour le modificateur
ReentrancyGuard.
-
Cloner le dépôt :
git clone https://github.com/ton-utilisateur/escrow-contract.git cd escrow-contract -
Installer les dépendances :
forge install
-
Compiler le contrat :
forge build
-
Déploiement via Script :
forge script script/Escrow.s.sol:EscrowScript --broadcast --rpc-url <YOUR_RPC_URL>
-
Interagir avec le Contrat : Une fois le contrat déployé, vous pouvez interagir avec ses fonctions principales :
-
tokenTransferredByBuyer: Permet à l'acheteur de transférer des fonds dans l'escrow. Cette action marque le début de la transaction et verrouille les fonds.escrow.tokenTransferredByBuyer{value: 1 ether}();
-
sellerCompletedTheDeal: Le vendeur peut appeler cette fonction une fois qu'il a rempli sa part de l'accord, signalant que la transaction est prête à être finalisée.escrow.sellerCompletedTheDeal(); -
finalizeTo: L'arbitre utilise cette fonction pour finaliser la transaction en transférant les fonds au vendeur, clôturant ainsi la transaction.escrow.finalizeTo(payable(seller));
-
cancel: En cas de litige ou d'annulation, l'arbitre peut appeler cette fonction pour annuler la transaction et rembourser l'acheteur.escrow.cancel();
-
Exécuter les tests :
forge test -
Couverture des tests : Couverture des tests : Les tests couvrent :
- La vérification des rôles et permissions pour l'acheteur, le vendeur et l'arbitre.
- Les transitions entre les différentes étapes de la transaction.
- Le transfert des fonds et les reverts attendus pour les appels non autorisés.
Le fichier Escrow.s.sol contient un script pour automatiser le déploiement du contrat Escrow. Ce script crée une nouvelle instance du contrat avec les adresses de l'acheteur, du vendeur et de l'arbitre définies dans le script.
Pour déployer le contrat sur un réseau, utilisez la commande suivante. Assurez-vous de remplacer <YOUR_RPC_URL> par l'URL RPC de votre réseau cible (comme Infura ou Alchemy).
forge script script/Escrow.s.sol:EscrowScript --broadcast --rpc-url <YOUR_RPC_URL>Ce projet est sous licence MIT. Cela signifie que vous êtes libre d'utiliser, copier, modifier et distribuer ce logiciel, tant que vous incluez une copie de la licence MIT dans toute redistribution.
Veuillez consulter le fichier LICENSE pour plus de détails.