Solidity

智能合約錯誤:返回值無效,是否耗盡了 Gas?

  • October 16, 2021

使用 Remix IDE 將合約部署到 Rinkeby 測試網。

Etherscan 合約地址和程式碼在這裡

合約 SimpleCounter {
整數計數器;

建構子()公共{
計數器 = 0;
}

function getCounter() 公共視圖返回 (int){
返回計數器;
}

函式增量()公共{
計數器 += 1;
}

函式減量()公共{
計數器-= 1;
}
}

JavaScript 客戶端程式碼:


var 合約;

$(文件).ready(函式(){
初始化合約();
獲取計數器值();
})

函式初始化合約(){
web3 = new Web3(web3.currentProvider);

變數地址=“0xc6482382047fb50e8e7b4658425c9756b28f995c”;
變種兄弟= [
...
];

console.log('創建合約...');
合約 = 新 web3.eth.Contract(abi, 地址);
控制台日誌(契約)

} //initContract()


函式 getCounterValue(){
console.log('getCounter()...');
contract.methods.getCounter().call().then((result) => {
控制台.log(結果);
}).catch(函式(錯誤){
console.log('err...\n'+err);
});
}

錯誤:

創建契約…

(index):86 o {_requestManager: e, givenProvider: MetamaskInpageProvider, providers: {…}, _provider: MetamaskInpageProvider, …}

(索引):94 getCounter()…

(索引):99 錯誤…

錯誤:返回的值無效,是否耗盡了 Gas?

筆記:

這在 Remix IDE (chrome) 中執行良好。 我可以使用編譯器版本遞增/遞減/getCounter…:0.4.25+commit.59dbf8f1.Emscripten.clang。

為什麼使用Web3.js(分支 1.0)的“ dist/web3.min.js ”訪問它時會失敗?

我得到了Veniamin的幫助。

我有錯誤“錯誤:無法從 ABI 解碼:0x。” 當使用錯誤的合約地址呼叫獲取請求時

我弄錯了……我用的是“賬戶地址”,而不是“合約地址”!

一旦使用了正確的“契約地址”,程式碼就可以工作。

.json我通過從build/contracts 文件夾中刪除文件然後truffle migrate在終端中執行來修復了類似的錯誤。

但是,錯誤發生在 Visual Studio Code 中,而不是 Remix IDE。執行後出現truffle migrate --reset

我想在此評論中添加內容,在您.jsonbuild/contracts 文件夾中刪除文件後,問題一直存在,直到我從垃圾箱中刪除文件🗑😅 所以請確保垃圾箱是空的

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