尝试转移以太币时,出现“断气”异常情况

时间:2019-01-08 09:22:39

标签: solidity transfer gas ether

我尝试将以太币从合同转移到一个地址,但它给出了错误的提示,表明交易已不合时宜。我认为这是一个小问题,但我找不到。我必须专门使用Solidity版本0.4.24。

The warning from Remix

The error from MetaMask

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

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

所有方法都会给出相同的理由。并且send和call方法还会警告它已过时,我应该使用transfer方法。

我还尝试调整了油门,但没有成功,我还尝试了docs上列出的2300所需的调动。

代码:

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;
   }

}

The balance of the contract

The parameters I use

Same MetaMask error as before

正如您在这里看到的,合同的余额是10 wei,但是当我尝试发送9 wei时,它仍然给出同样的错误。我仍然从Remix那里得到和以前一样的错误。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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