Solidity
合約方法呼叫返回空數組
我很糾結這個問題。似乎它必須工作,但它沒有: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
網路上的正確帳戶 => 提供商必須正常工作。呼叫
owner
from remix 工作。使用 web3 我得到一個空數組作為響應。其他方法呼叫也一樣。有什麼可能出錯?
"web3": "^1.0.0-beta.37"
問題出在契約上
abi
——不知道它到底出了什麼問題。我只是abi
從不同的來源使用它並有所幫助。abi
有什麼驗證工具嗎?
我遇到了完全相同的問題並設法通過傳遞正確的 ABI 對象來解決它。看起來早期版本的 solc 將 ABI 作為 JSON 字元串返回,而目前版本返回實際的 JavaScript 對象(但我不確定)。因此,您不能只列印契約的 ABI 並將其粘貼到 web3 實例(就像我一樣)。我必須先 JSON.stringify 返回對象,然後 JSON.parse 將字元串複製/粘貼到 web3 實例。