Solidity

合約方法呼叫返回空數組

  • January 15, 2022

我很糾結這個問題。似乎它必須工作,但它沒有:D

rinkeby通過 remix(按地址載入)和 truffle 控制台在網路上有一個完美執行的契約。然而,通過客戶端的方法呼叫web3拒絕工作。

熱:

import Web3 from 'web3';


// @ts-ignore
const web3 = new Web3(window.web3.currentProvider);

***got address & abi***

export default new web3.eth.Contract(abi, address);

用法範例:

console.log(registryContract.options.address);
console.log(registryContract.methods);
const owner = await registryContract.methods.owner().call();

console.log()我可以看到實際的合約地址和方法。Metamask 處於活動狀態,並web3.eth.defaultAccount顯示我在rinkeby網路上的正確帳戶 => 提供商必須正常工作。

呼叫ownerfrom remix 工作。使用 web3 我得到一個空數組作為響應。其他方法呼叫也一樣。

有什麼可能出錯?"web3": "^1.0.0-beta.37"

問題出在契約上abi——不知道它到底出了什麼問題。我只是abi從不同的來源使用它並有所幫助。abi有什麼驗證工具嗎?

我遇到了完全相同的問題並設法通過傳遞正確的 ABI 對象來解決它。看起來早期版本的 solc 將 ABI 作為 JSON 字元串返回,而目前版本返回實際的 JavaScript 對象(但我不確定)。因此,您不能只列印契約的 ABI 並將其粘貼到 web3 實例(就像我一樣)。我必須先 JSON.stringify 返回對象,然後 JSON.parse 將字元串複製/粘貼到 web3 實例。

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