Un contrat intelligent peut-il envoyer le jeton ERC20 qu’il possède à une autre adresse lors du déclenchement?

Calvin Lau

Un contrat intelligent peut-il envoyer le jeton ERC20 qu’il possède à une autre adresse lors du déclenchement?


Je sais qu’une adresse de contrat intelligente peut accepter un jeton ERC20 qui lui est envoyé.

Disons qu’il y a deux contrats intelligents A et B. A est un contrat intelligent déployé implémentant un jeton ERC20 et B est le contrat que je veux écrire.

Je voudrais savoir puis-je écrire une méthode dans le contrat B afin que, lors du déclenchement en envoyant une transaction pour appeler sa méthode, il envoie une certaine quantité du jeton A appartenant à l’adresse du contrat B à une autre adresse que j’ai spécifiée?

Une question de suivi: dans une transaction manuelle, l’expéditeur doit signer la transaction de jeton ERC20 brute et l’envoyer au réseau. Pour le contrat intelligent B, est-ce aussi simple que d’appeler la méthode du contrat intelligent ERC20 cible A et peut-il utiliser les jetons appartenant à l’adresse de B? Y a-t-il des étapes nécessaires pour «signer» le transfert?

Je vous remercie.

Réponses


 Lauri Peltonen

1) Dépend de ce que vous entendez par «déclencheur». Les contrats intelligents ne peuvent jamais rien faire sans que quelqu’un / quelque chose leur émette une transaction. Les contrats ne peuvent donc pas «surveiller» les choses par eux-mêmes ou s’exécuter en arrière-plan dans ce sens. Sinon, oui, un contrat intelligent peut transférer des jetons vers un autre contrat / adresse.

2) Étant donné que toute action est lancée via une transaction, l’expéditeur de la transaction d’origine est le « signataire ». Celui qui émet la transaction d’origine doit également payer (avec du gaz) toutes les transactions qui se produisent dans la chaîne de contrats possible.

MODIFIER Après que le demandeur a ajouté plus d’informations sur le problème:

L’envoi de jetons à une autre adresse se fait en appelant la méthode de transfer dans le contrat de jeton ERC20. Cette méthode devrait en fait juste modifier l’état intérieur du contrat A, donc le transfert de jetons du contrat B nécessite seulement que B appelle la fonction de transfer de A. B n’a pas besoin d ‘«envoyer» de jetons lui-même – il lui suffit d’appeler la fonction de transfer pour changer la propriété desdits jetons.

Calvin Lau

Quand je dis déclencheur, je veux envoyer au contrat une transaction avec un appel de méthode comme send_someone_token('0x123123123', 10) . Et je n’aurai pas besoin du contrat pour surveiller quoi que ce soit. La question centrale que je me pose est en fait de savoir si je peux dire au contrat intelligent d’envoyer le jeton ERC20 appartenant à l’adresse du contrat lui-même . Et bien sûr, j’ai déjà envoyé suffisamment de jetons ERC20 à l’adresse du contrat.

Lauri Peltonen

Réponse modifiée pour répondre à votre question clarifiée

Calvin Lau

Je dois m’excuser. Il semble que mes informations supplémentaires vous déroutent. J’ai mis à jour la question pour la clarifier davantage.

Lauri Peltonen

réponse modifiée à nouveau


 Eli Drion

Concernant votre première question: oui. Le contrat B doit savoir comment les méthodes du contrat A se comportent (au moins, les méthodes que vous devez utiliser), d’où l’utilisation d’un contrat abstrait (la partie interface du code ci-dessous). Comme il est généralement nécessaire de mettre à jour le stockage dans votre contrat, mais si vous n’en avez pas besoin, vous pouvez supprimer cette partie.Vous devrez d’abord récupérer le nombre de jetons que votre contrat possède, car il ne peut pas savoir par magie combien de jetons il a, non? Il doit appeler la méthode balanceOf du contrat de jeton. Une fois cela fait, vous pouvez envoyer le montant que vous voulez à l’adresse que vous souhaitez en utilisant la méthode de transfer

 interface  ERC20 { 
   function  transfer ( address _to ,  uint256 _value )   public  returns ( bool  success ); 
   function  balanceOf ( address _owner )   public  constant returns ( uint256 balance ); 
 } 

 function  get_all_tokens ( address token_address ,  uint256 amount )   { ERC20 token =  ERC20 ( token_address ); uint256 contract_token_balance =  token . balanceOf ( address ( this )); 
   require ( contract_token_balance !=   0 ); 
   //Eventually do some updates of balances in your contract 
   require ( token . transfer ( msg . sender ,  amount )); 
 } 

Maintenant, vous pouvez l’adapter à vos besoins, votre imagination est votre seule limite. 🙂

Pour la deuxième question, je pense qu’il a déjà été répondu (au-dessus ou au-dessous de ma réponse).

 

#(une, #à, #autre, adresse, contrat, déclenchement, du, envoyer, ERC20?, intelligent, jeton, Le, lors, peut-il, possède, qu’il, un

 

yahoo

Laisser un commentaire

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