智能合約錯誤:返回值無效,是否耗盡了 Gas?
使用 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
。我想在此評論中添加內容,在您
.json
從build/contracts 文件夾中刪除文件後,問題一直存在,直到我從垃圾箱中刪除文件🗑😅 所以請確保垃圾箱是空的