Remix
處理事務時出現 vm 異常:操作碼無效錯誤
我一直在註入 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 上保持相同的氣體限制。
要做的事情:
- 如果您還沒有安裝 ganache-cli,請嘗試以下命令。 npm install ganache-cli
- 然後使用以下命令導航到您的帳戶。 ganache-cli -a
- 然後你可以獲得氣體限制,並確保你的混音 IDE 保持相同的氣體限制。