Solidity

錯誤:使用 Ropsten 網路在 Remix 中所需的氣體超過限額或交易總是失敗

  • July 17, 2019

我正面臨這個錯誤,我的契約很簡單

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

需要幫助來解決這個問題,我正在使用帶有 ropsten 測試網路的 MetaMask 下面也附有螢幕截圖和錯誤。 在此處輸入圖像描述

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

引用自:https://ethereum.stackexchange.com/questions/73000