Solidity
獲得簡單函式的無限氣體估計
我正在使用簡單的契約測試 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 上送出/確認就好了..
並且方法呼叫也可以正常工作..
這可能只是編譯器靜態分析中的一個錯誤。