Solidity 'out of gas' 尝试转移 Ether 时出现异常

Solidity 'out of gas' exception when trying to transfer Ether

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

The warning from Remix

The error from MetaMask

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

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

所有方法都会给出相同的 out of gas 异常。 send 和 call 方法也会警告它已经过时,我应该使用 transfer 方法。

我也试过调整 gas 但没用,我也试过 docs 上列出的转账所需的 2,300。

代码:

pragma solidity ^0.4.24;

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

如果问题是合约没有任何 Ether 可以转移,它可以使用我通过函数调用发送的 Ether 吗?还是其他问题?

感谢您的阅读。

编辑:

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

当前代码:

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 时,它仍然给出同样的 gas 耗尽错误。我也仍然从 Remix 得到和以前一样的错误。

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

我也在 Stack exchange 上 post 这个问题并在那里得到了答案。问题是我的 甘纳许版。我切换到 Robsten 测试网络并且成功了。我会 link post here.