2
votes

Solidité: m'envoyer de l'argent

J'ai une question de Solidity, et mon IDE utilise Remix, je veux m'envoyer de l'argent.

Mon code:

Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?


2 commentaires

Salut, avant cela avez-vous cliqué sur Moi-même ()?


HI Jimmy Lee, mais toMyself est le constructeur, ils n'ont pas de bouton. Mes contrats déployés, un seul bouton est «Envoyer».


3 Réponses :


3
votes
  1. Êtes-vous sûr que le contrat dispose de suffisamment d'éther à envoyer?

  2. Vous ne préférez pas changer

  3. function SendBack() public payable{
        msg.sender.transfer(msg.value);
    }
    

    to

    function Send()public payable{
        owner.transfer(msg.value);
    }
    

    Vous envoyez donc au propriétaire tout ce qui entre dans le contrat intelligent?

    Aussi, vous pouvez renvoyer la quantité qui vient d'être envoyée au msg.sender de cette manière:

    function Send(uint x)public payable{
        owner.transfer(x);
    }
    

    Mais cela finira par être inutile et gaspiller du gaz.


4 commentaires

Bonjour, j'utilise le "réseau de test Ropsten" pour créer mon contrat, j'ai donc assez d'éther pour me permettre de m'entraîner. Et j'espère que je pourrai m'envoyer n'importe quelle quantité d'éther quand j'en aurai assez.


@Danielkuo Ce que je voulais dire, c'est qu'avec votre code, vous envoyez x wei du contrat intelligent au propriétaire. Sans prendre en compte la quantité disponible pour le contrat intelligent lui-même. Avec mon code, vous enverrez au propriétaire la quantité envoyée par l'expéditeur.


J'ai également modifié la réponse pour refléter une fonctionnalité SendBack.


OK, je comprends ce que tu veux dire. Merci.



1
votes

Je clarifie simplement la réponse de @ Fernando ici.

function Send() public payable {
    owner.transfer(msg.value);
}

ici x montant de wei sera envoyé au compte du propriétaire du solde du contrat de formulaire . Pour que cela se produise, votre contrat doit contenir au moins x montant de wei. Pas le compte qui appelle la fonction Envoyer . Remarque: ici, la fonction Envoyer n'a pas besoin d'être marquée comme payable.

Maintenant dans le cas de

function Send(uint x) public payable {
    owner.transfer(x);
}

l'appelant de la fonction Envoyer enverra une certaine quantité de ether / wei avec la demande. Nous pouvons récupérer ce montant en utilisant msg.value . Puis transférez-le sur le compte du propriétaire. Ici, le contrat lui-même n'a pas besoin de contenir de quantité d'éther. Remarque: ici, la fonction Envoyer doit être marquée comme payable.


5 commentaires

OK j'ai compris. SO, maintenant je veux juste envoyer de l'éther de mon adresse à mon adresse, n'est-ce pas possible?


Oui. C'est théoriquement possible. Mais je suis curieux, pourquoi voudriez-vous faire ça?


S'il vous plaît, apprenez-moi comment faire cela. Je suis un débutant en solidité, et je veux juste faire comme "bonjour le monde!" un codage simple. J'ai donc cette idée de faire ça.


Trouvez des didacticiels sur udemy ou blockgeeks ou sites Web similaires. ceci est un bon point de départ.


D'ACCORD. Merci beaucoup. Je vais essayer.



2
votes

Je viens de vérifier votre code dans le remix et cela fonctionne, je viens d'utiliser la version 0.5 du compilateur de solidité

pragma solidity ^0.5;
contract toMyself{

address owner;

 constructor() public{
    owner = msg.sender;
}
function Send(uint x)public payable{
    msg.sender.transfer(x);
}
}

C'est peut-être à cause de l'absence de montant dans le contrat. Deuxièmement, lorsque vous utilisez Send, la valeur uint doit être en wei.

Pour les unités de domination http://ethdocs.org/en/latest/ether.html p >


4 commentaires

c'est très lucide.


Ok, maintenant j'ai une autre question: imgur.com/a/q4DZatr . Je ne sais pas quel est le problème?


Essayez ceci dans Metamask Accounts-> Settings-> Reset Account


Cela n'a pas fonctionné, mais je suppose que je sais où est le problème. Je n'ai pas réglé le GAS FEE, mais cela peut fonctionner après avoir réglé le GAS FEE. Alors merci beaucoup.