1

我尝试将以太币从合约转移到一个地址,但它给出了交易已用完气体的错误。我认为这是一个小问题,但我找不到它。我必须专门使用solidity 0.4.24版本。

来自 Remix 的警告

MetaMask 的错误

我尝试了不同的方法,例如:

address.transfer(amount);
address.send(amount);
address.call.value(amount)( );

所有方法都会给出相同的气体异常。并且 send 和 call 方法也会发出警告,指出它已过时,我应该使用 transfer 方法。

我还尝试调整气体,但没有奏效,我还尝试了docs上列出的转移所需的 2,300 。

编码:

pragma solidity ^0.4.24;

contract TestContract {        
    function payAddress(address _address) external payable {
         _address.transfer(msg.value);
    }
}

如果问题是合约没有任何以太币要转移​​,它可以使用我通过函数调用发送的以太币吗?或者问题是别的什么?

感谢您的阅读。

编辑:

我已经尝试将以太币发送到我的合约并且可行,我现在的合约上确实有以太币,但该函数仍然给出与以前相同的错误。所以问题是别的。

当前代码:

pragma solidity ^0.4.24;

contract TestContract {

    function() external payable { }

    function payContract() public payable {}

    function paySomeone(address _address, uint256 _amount) external {
         _address.transfer(_amount);
    }

    function getBalance() public view returns (uint256) {
         return address(this).balance;
   }

}

合同余额

我使用的参数

与以前相同的 MetaMask 错误

正如你在这里看到的,合约的余额是 10 wei,但是当我尝试发送 9 wei 时,它仍然会给出同样的气体错误。我仍然从 Remix 中得到与以前相同的错误。

4

2 回答 2

2

我还在 Stack exchange 上发布了这个问题,并在那里得到了答案。问题是我的 Ganache 版本。我切换到 Robsten 测试网络,它工作正常。我会在这里链接帖子。

于 2019-01-09T08:15:13.500 回答
1

是的。为了将以太币从合约发送到另一个地址,首先你必须将一些以太币发送到合约地址。看看这个这个

于 2019-01-08T12:36:10.760 回答