Твердость: Отправить деньги себе - PullRequest
0 голосов
/ 10 февраля 2019

У меня вопрос от Solidity, и моя IDE использует Remix, я хочу отправить себе деньги.

Мой код:

pragma solidity ^0.4.24;
contract toMyself{

    address owner;

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

Но когда я нажму кнопку «Отправить», появится сообщение вроде:

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

Как я могу это исправить?

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Я просто уточняю ответ @ Фернандо здесь.

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

здесь x сумма wei будет отправлена ​​на счет владельца с баланса договора .Чтобы это произошло, в вашем контракте должно быть не менее x вэй.Не учетная запись, которая вызывает функцию Send. Примечание: здесь Send функция не должна быть помечена как payable.

Теперь в случае

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

вызывающая функция Send отправит некотороесумма ether/wei вместе с запросом.Мы можем получить эту сумму, используя msg.value.Затем перенесите его на счет владельца.Здесь сам контракт не должен содержать какое-либо количество эфира. Примечание: здесь Send функция должна быть помечена как payable.

0 голосов
/ 13 февраля 2019

Я только что проверил ваш код в ремиксе, и он работает, я просто использовал компилятор солидности версии 0.5

pragma solidity ^0.5;
contract toMyself{

address owner;

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

, возможно, из-за отсутствия суммы в контракте.Во-вторых, при использовании Send значение uint должно быть в вей.

Для единиц доминирования http://ethdocs.org/en/latest/ether.html

0 голосов
/ 10 февраля 2019
  1. Вы уверены, что в контракте достаточно эфира для отправки?

  2. Не предпочитаете ли вы переключаться

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

до

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

Итак, вы отправляете владельцу все, что входит в умный контракт?

Кроме того, вы можете отправлять обратно любое количество, которое только что было отправлено в MSG.Отправьте это следующим образом:

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

Но это перестанет быть бесполезным и напрасно тратить газ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...