Remix
Remix IDE:withdraw(…) 方法的無限氣體問題
我正在嘗試編譯以下契約。我正在使用混音 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); } }
您送出的程式碼執行良好。沒看出什麼問題。你在嘗試混音嗎?