Solidity

獲得簡單函式的無限氣體估計

  • April 30, 2020

我正在使用簡單的契約測試 remix ide 的可靠性。這是我寫的契約:

contract mortal {

address owner;

function mortal() {
   owner = msg.sender;
}

function kill(){
   if(msg.sender == owner){
       selfdestruct(owner);
   }
  }
}

contract Hello is mortal
{

string public message;

function Hello(){
   message = 'This is the initial Message';
   }

function getMessage() public constant returns(string){
   return message;
   }

function setNewMessage(string newMessage) public payable {
   message = newMessage;   
   }
} 

在查看細節時,我得到了每個函式的無限氣體估計值。

{
"Creation": {
   "codeDepositCost": "243200",
   "executionCost": "infinite",
   "totalCost": "infinite"
},
"External": {
   "getMessage()": "infinite",
   "kill()": "30636",
   "message()": "infinite",
   "setNewMessage(string)": "infinite"
}
}

請詳細說明為什麼我會為這些功能獲得無限的 gasEstimates 以及如何避免這個錯誤?

契約編譯得很好:

pragma solidity ^0.4.15;

contract mortal {
   address owner;

   function mortal() public {
       owner = msg.sender;
   }

   function kill() public {
       if (msg.sender == owner) {
           selfdestruct(owner);
       }
   }
}

contract Hello is mortal {
   string public message;

   function Hello() public {
       message = 'This is the initial Message';
   }

   function getMessage() public constant returns(string) {
       return message;
   }

   function setNewMessage(string newMessage) public payable {
       message = newMessage;   
   }
} 

但隨後出現警告…

在此處輸入圖像描述

但它在 Ropsten 上送出/確認就好了..

在此處輸入圖像描述

並且方法呼叫也可以正常工作..

在此處輸入圖像描述

這可能只是編譯器靜態分析中的一個錯誤。

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