Solidity
錯誤:使用 Ropsten 網路在 Remix 中所需的氣體超過限額或交易總是失敗
我正面臨這個錯誤,我的契約很簡單
pragma solidity ^0.5.0; contract sendEther { address payable sender; function showReceiver() public view returns (address payable) { return msg.sender; } function sendEtherToReceiver(address payable _receiver, uint256 _amount) public payable { _receiver.transfer(_amount * 10**18); } }
sendEtherToReceiver
我可以在 Ropsten 網路上成功部署你的合約和呼叫方法https://ropsten.etherscan.io/address/0xacf89f2bc4bd1971cf8827f57e013031a62f514c#code
https://ropsten.etherscan.io/tx/0x4d8e1697f58f03c68dbae615beb72889107ff2f49e50a016b8e98bb23e31dace
呼叫函式時是否錯過了發送值
sendEtherToReceiver
?您必鬚髮送,value >= amount
然後合約將有足夠的 ETH 轉移到接收者。
問題是您沒有在交易中發送 ETH。在 Remix 中,您將使用該欄位
value
(就在該欄位下方gas limit
)來設置您與交易一起發送的金額。因此,通過不發送任何 ETH,您要求您的 CONTRACT 使用自己的餘額來執行轉賬。由於它的餘額為零,因此交易將失敗。如果你的合約有足夠的餘額,它會正常工作(但它可能沒有達到你的預期)。
請注意,如果您只想將其用作中繼,這意味著您只想轉移某人在該交易中發送的內容(從他/她的錢包中),那麼您應該使用類似
_receiver.transfer(msg.value);
這意味著您的函式將如下所示:
function sendEtherToReceiver(address payable _receiver) public payable { _receiver.transfer(msg.value); }