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 得到和以前一样的错误。
我尝试将以太币从合约转移到一个地址,但它给出了交易没有 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 得到和以前一样的错误。