Solidity

固體函式氣體要求是無限的

  • April 15, 2022
struct userData{
    uint val;
    bool isvalue;
    string name;
}



mapping(uint => address) internal users;
mapping(address => userData) internal bidirectionalUsers;

function addMember(address newMember, string memberName) public{

       if (msg.sender != owner) return;

       if (bidirectionalUsers[newMember].isvalue) return;

       users[memberCount] = newMember;
       bidirectionalUsers[newMember] = userData(memberCount,true,memberName);

   }

上面的程式碼在 addMember(), 中拋出警告gas limit is high:infinite and it can not be executed

我評論了函式內的所有行,但它仍然拋出這個警告。我在這裡做錯了什麼?有人可以幫助我嗎?謝謝你。

您可以放心地忽略此警告。問題是參數中的字元串變數string memberName。因為字元串沒有固定的大小,理論上可能需要無限量的氣體來填充無限量的字元。

如果沒有顯示其他錯誤,您的程式碼仍將編譯並工作。

即使使用使用固定長度參數的純函式,我也會收到相同的警告。這是程式碼:

function sumar(int a, int b) public pure returns (int) {
   return a+b;
}

有任何想法嗎?

(使用目前版本的 Remix,編譯器版本 0.8.13)

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