2

我有一个来自 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?

我该如何解决?

4

3 回答 3

3
  1. 你确定合约有足够的以太币可以发送吗?

  2. 难道你不喜欢切换

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

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

因此,您将智能合约中的任何内容发送给所有者?

此外,您可以通过这种方式将刚刚发送到 msg.sender 的任何数量发回:

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

但这最终会变得无用并浪费一些气体。

于 2019-02-10T13:00:52.810 回答
2

我刚刚在 remix 中检查了你的代码,它可以工作,我只是使用了 Solidity 编译器版本 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 值应该以 wei 为单位。

对于统治单位 http://ethdocs.org/en/latest/ether.html

于 2019-02-13T15:34:03.173 回答
1

我只是在这里澄清@Fernando 的答案。

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

这里 x wei 的数量将发送到所有者的帐户中,形成合同的余额。为此,您的合约需要至少持有 x 数量的 wei。不是调用Send函数的帐户。注意:这里的Send函数不需要标记为payable

现在万一

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

函数的调用者将与请求一起Send发送一些数量。ether/wei我们可以使用 检索该金额msg.value。然后将其转移到所有者的帐户中。在这里,合约本身不需要持有任何数量的以太币。注意:这里的Send函数必须标记为payable

于 2019-02-10T15:07:57.513 回答