Remix

Remix IDE:withdraw(…) 方法的無限氣體問題

  • January 17, 2022

我正在嘗試編譯以下契約。我正在使用混音 IDE。它在 Withdraw 方法中給了我無限的錯誤。

   pragma solidity ^0.4.24;

    contract financialContracts4{

    address issuer; constructor() public{    issuer = msg.sender; }
    modifier ifIssuer(){    if(issuer != msg.sender){
          revert();    }else {
            _;//underscore    } } 
function receiveFunds( )public payable{
        } 
function getValue() public view returns(uint) {   address myAddress = this; return myAddress.balance; } 
function withdrawFunds(uint funds) ifIssuer{   issuer.transfer(funds); } }

錯誤資訊是:

函式financialContracts4.withdrawFunds(uint256)的gas需求 high:無限。如果一個函式的gas需求高於block gas limit,它就不能被執行。請避免在修改大面積儲存(包括清除或複制儲存中的數組)的函式或操作中出現循環:

一些身體請指導我。

祖爾菲。

Remix 之所以抱怨,是因為它無法知道通話需要多少 gas。

將 Ether 發送到另一個合約(你無法知道它issuer是合約還是 EOA(外部擁有的賬戶))允許接收者觸發他們的備份功能。該函式可能會執行各種邏輯。該邏輯的 Gas 由同一筆交易支付。由於 Remix 無法知道另一端的邏輯是什麼,它會警告您它可能會超過 gas 限制。

這通常不是一個真正的問題,因為您只允許發行人提取資金,因此發行人必須支付所有這些氣體。因此,您可能可以忽略警告。

pragma solidity ^0.4.24;

contract financialContracts4{

address issuer; 
constructor() public{    
       issuer = msg.sender; 
   }

modifier ifIssuer(){ 
   if(issuer != msg.sender){
       revert();
   }else {
       _;//underscore    
   } 
}

function receiveFunds( ) public payable{} 

function getValue() public view returns(uint) {   
   address myAddress = this; 
   return myAddress.balance; 

   } 
function withdrawFunds(uint funds) ifIssuer public {   
   issuer.transfer(funds); 
   } 
}

您送出的程式碼執行良好。沒看出什麼問題。你在嘗試混音嗎?

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