Comment traiter l’envoi d’éther depuis l’adresse du contrat vers un compte

bbusdriver

Comment traiter l’envoi d’éther depuis l’adresse du contrat vers un compte


Disons qu’il y a un bouton en html qui peut réclamer des gains.

 < button type = "submit"   ( click )= "claimWinnigs()" > Claim   Winnings </ button > 

Un utilisateur avec l’adresse de compte 0xf17 … b732 a réclamé des gains en cliquant sur le bouton. Ce que je veux ici, c’est que cet utilisateur puisse retirer eth de l’adresse du contrat (0x8f … b90f). Le métamask est l’outil que j’utilise.

solidité simplifiée:

 mapping ( address =>  uint256 )   public  balanceOf function  claimWinnings ()  returns ( bool )   { balanceOf [ msg . sender ]   =   20 withdraw (); 

     return   true ; 
 } 

 function  withdraw ()   public   { uint256 balance =  balanceOf [ msg . sender ]; balanceOf [ msg . sender ]   -=  balance ; msg . sender . transfer ( balance ); 

     LogWithdrawal ( msg . sender ,  balance ); 
 }      

Voici mon code angulaire web3:

 claimWinnings ():   Promise < any >   {  
     return   this . TestContract . deployed (). then (( instance )   =>   { 
         return  claimWinnings ({ from :  contractAddress , gas :   1000000 
         }); 
     }) 
     . then (( value )   =>   { 
         return  value ; 
     }) 
     . catch (( e )   =>   { console . log ( e ); 
     });  
 } 

Mais quand j’exécute cela, j’obtiens une erreur

Unknown address - unable to sign transaction for this address: "0x8f...b90f"

Je teste avec Ganache fyi.

Qu’est-ce que je fais mal ici? et comment l’utilisateur peut-il recevoir de l’éther du contrat?

Prashant Prabhakar Singh

Vous appelez la réclamation gagnante à partir de l’adresse du contrat (qui n’a pas de clé privée pour signer la transaction). Vous devez appeler cette fonction depuis EOA (depuis le compte de l’utilisateur qui réclame le retrait)

Réponses


 Curzon Dax

Vous devez mettre la logique de la fonction de retrait sur la fonction claimWinnings et rendre celle-ci publiquement réclamable par l’adresse (de l’utilisateur!), Qui a un solde positif (mettez une déclaration require, si elle est éligible pour se retirer bien sûr).

L’utilisateur appelant la fonction claimWinnings peut alors être identifié par msg.sender.

Vous avez également mélangé l’adresse « de » dans votre test, qui devrait être l’une des adresses de votre compte, par exemple le compte [0].

bbusdriver

J’ai dû changer d’adresse en adresse de compte et tout a fonctionné. Merci.

 

comment, compte, contrat, d’éther?, depuis, du, l’adresse, l’envoi, traiter, un, vers

 

yahoo

Laisser un commentaire

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