Remix

處理事務時出現 vm 異常:操作碼無效錯誤

  • September 9, 2021

我一直在註入 web3 上的 remix ide 上執行此程式碼,並且我的 ganache 伺服器處於開啟狀態,然後我也收到了無效操作碼的錯誤。該程式碼在 rinkeby 測試網路中完美執行。

pragma solidity ^0.5.7;
contract cust{

   struct a{
       uint id;
       string name;
   }

   a[] arr;

   function set(uint x, string memory y ) public
   {
       a memory temp;
       temp.id=x;
       temp.name=y;

       arr.push(temp);
   }
   function get(uint x) public view returns(uint,string memory){
       uint i;
       for(i=0;i<arr.length;i=i+1)
       {
           if(arr[i].id==x)
           {
               return(arr[i].id,arr[i].name);
           }
       }
   }
}

每次我遇到無效的操作碼錯誤時,編譯合約的字節碼都會損壞,或者是 ganache 中的錯誤。如果它在測試網上工作,我會說你的錯誤可能是 ganache。

要嘗試的事情:

  • 刪除您的建構目錄並重新編譯(當您使用混音時,更改某些內容然後重新編譯)。這是為了確保您的字節碼沒有被損壞(可能會在大量重新編譯時發生)。
  • 重新啟動甘納許。好舊的時尚將其關閉然後再打開。有時會修復它。
  • 更新 ganache 並嘗試(如果重新啟動它不起作用)。

如果問題仍然存在,但您的程式碼可以在測試網上執行,則假設它是 ganache,您無能為力。

希望這可以幫助 :)

與甘納許打交道時,我面臨同樣的問題。確保在 ganache-cli 和 remix IDE 上保持相同的氣體限制。

要做的事情:

  1. 如果您還沒有安裝 ganache-cli,請嘗試以下命令。 npm install ganache-cli
  2. 然後使用以下命令導航到您的帳戶。 ganache-cli -a
  3. 然後你可以獲得氣體限制,並確保你的混音 IDE 保持相同的氣體限制。

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