comment déployer un contrat intelligent d’engagement et l’utiliser avec des jetons erc20 passionnants

sabastian andrew

comment déployer un contrat intelligent d’engagement et l’utiliser avec des jetons erc20 passionnants


je veux construire un contrat intelligent d’engagement avec un jeton standard ERC20 particulier. je veux garder le jeton en dépôt comme garantie de transaction. et à certaines conditions, ces jetons devraient revenir au compte du vendeur.

donc dans mon application, la partie A utilise certains services de la partie B, mais la partie B n’est pas digne de confiance, la partie B gardera donc certains jetons en dépôt et après une condition, la partie B récupérera ces jetons. c’est comme un séquestre de transaction à sens unique .

mais quelles conditions nous pouvons utiliser comme condition. Puis-je également envoyer des jetons à smartContract et si je peux alors comment renvoyer ces jetons au portefeuille de Party B ou comment envoyer des jetons reçus de l’entiercement smartcontract à toute personne propriétaire du portefeuille

et si je suis le propriétaire des jetons et que je ne peux pas comprendre qui peut déployer escrow.cause si je déploie escrow et que je suis le propriétaire des jetons, je peux accéder à cette fonction de jeton et utiliser la fonction transferfrom () et utiliser escrow adresse pour récupérer mes jetons alors comment éviter cette question. alors comment verrouiller ces jetons en toute sécurité en toute sécurité. car près de 90% des tutoriels concernent l’éther et non les jetons sur les éthers.

Réponses


 Lauri Peltonen

J’ai un peu de mal à suivre votre écriture, je vais donc rendre cela un peu plus généralisé.

Si vous êtes celui qui a libéré le jeton, vous avez décidé de la façon dont les jetons peuvent être transférés. Très probablement, en tant que propriétaire du contrat, vous avez le plein pouvoir de transférer n’importe quelle quantité de jetons à qui vous voulez, ou peut-être même de retirer des jetons de quelqu’un (oui, les jetons peuvent être supprimés car ils n’existent que dans le même contrat, ils ne sont jamais réellement envoyés). ‘n’importe où).

Donc, si vous avez le plein pouvoir sur les jetons, vous pouvez simplement faire ce que vous voulez avec eux – en conserver certains dans n’importe quel type d’engagement par exemple si votre contrat prend en charge une telle fonctionnalité.

Si vous n’avez pas créé le contrat de jeton (mais qu’il a été créé par quelqu’un d’autre), vous pouvez agir en tant que séquestre et obtenir les jetons transférés sur votre compte. Lorsque le service d’entiercement n’est plus nécessaire, vous pouvez soit autoriser ( approve fonction dans ERC20) le transfert à quelqu’un ou le transférer directement avec la fonction de transfer .


 Sander

Nous avons créé une solution pour la fonctionnalité d’entiercement pour les jetons ERC20.

Le code que nous avons utilisé est le suivant.

 pragma solidity ^ 0.4 . 21 ; 

 import   "../zeppelin-solidity/contracts/token/ERC20/ERC20.sol" ; 
 import   "../zeppelin-solidity/contracts/ownership/Ownable.sol" ; 
 import   "../webshop/Webshop.sol" ; contract Escrow   is   Ownable   { 
     enum   PaymentStatus   {   Pending ,   Completed ,   Refunded   } 

     event   PaymentCreation ( uint  indexed orderId ,  address indexed customer ,   uint  value ); 
     event   PaymentCompletion ( uint  indexed orderId ,  address indexed customer ,   uint  value ,   PaymentStatus  status ); 

     struct   Payment   { address customer ; 
         uint  value ; 
         PaymentStatus  status ; 
         bool  refundApproved ; 
     } mapping ( uint   =>   Payment )   public  payments ; ERC20 public  currency ; address public  collectionAddress ; 
     Webshop   public  webshop ; 

     function   Escrow ( ERC20 _currency ,  address _collectionAddress )   public   { currency =  _currency ; collectionAddress =  _collectionAddress ; webshop =   Webshop ( msg . sender ); 
     } 

     function  createPayment ( uint  _orderId ,  address _customer ,   uint  _value )  external onlyOwner { payments [ _orderId ]   =   Payment ( _customer ,  _value ,   PaymentStatus . Pending ,   false ); emit PaymentCreation ( _orderId ,  _customer ,  _value ); 
     } 

     function  release ( uint  _orderId )  external { completePayment ( _orderId ,  collectionAddress ,   PaymentStatus . Completed ); 
     } 

     function  refund ( uint  _orderId )  external { completePayment ( _orderId ,  msg . sender ,   PaymentStatus . Refunded ); 
     } 

     function  approveRefund ( uint  _orderId )  external { 
         require ( msg . sender ==  collectionAddress ); 
         Payment  storage payment =  payments [ _orderId ]; payment . refundApproved =   true ; 
     } 

     function  completePayment ( uint  _orderId ,  address _receiver ,   PaymentStatus  _status )   private   { 
         Payment  storage payment =  payments [ _orderId ]; 
         require ( payment . customer ==  msg . sender ); 
         require ( payment . status ==   PaymentStatus . Pending ); 
         if   ( _status ==   PaymentStatus . Refunded )   { 
             require ( payment . refundApproved ); 
         } currency . transfer ( _receiver ,  payment . value ); webshop . changeOrderStatus ( _orderId ,   Webshop . OrderStatus . Completed ); payment . status =  _status ; emit PaymentCompletion ( _orderId ,  payment . customer ,  payment . value ,  _status ); 
     } 
 } 

L’article, y compris le code, se trouve sur https://medium.com/@s_van_laar/how-to-build-an-escrow-contract-with-an-ethereum-erc20-token-bfc4825b0dd7

Tjaden Hess ♦

Les réponses en lien uniquement sont déconseillées. Veuillez en inclure suffisamment dans le corps de votre réponse pour qu’elle soit toujours utile et pertinente même si tous les liens sont rompus.

Sander

@TjadenHess Saisie du code et renvoi à l’article d’origine. Veuillez supprimer le -1

 

#et, avec, comment, contrat, d’engagement, déployer, des, ERC20?, intelligent, jetons, l’utiliser, passionnants, un

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *