web3js调用因缺少约定地址而失败



要在本地设置上部署合约,我使用truffle。开发网络由Ganache运营。此外,从应用程序A向网络发送数据也没有问题(使用松露/松露合同包(。我在编译和迁移合同的同一工作目录中启动这个应用程序

然而,当我有另一个应用程序连接到这个网络并试图检索数据时,我遇到了问题。这没有使用任何松露,只有web3js。

我检索数据如下:

let contractInstance = new web3.eth.Contract(abi, result.contractHashes)
if (!contractInstance) handleError('Could not find contract instance... Shutting down')
for (let i in result) {
let internalId = result[i]._id
contractInstance.methods.getStartDate(internalId).call(function(error, result) {
if (error) handleFatalError(error, mongoClient) // This error is triggered
console.log(result)
})
}

这总是回报我:

错误:此合约对象尚未设置地址,请先设置地址。

从48609913开始,我知道当您忘记上述步骤时会发生这种情况,但是,我不是在创建新合同,我只是指网络中已经存在的国家/地区。如果我通过合同地址提及合同,而不知道合同地址,这对我来说没有意义?基于这篇文章,我尝试使用web3选项地址后面的步骤丢失(跟踪和错误(,但错误消息相同。

也使用

call().then(....)

call({ from: result.contractHashes }, function(error, result) {....})

不起作用。我很无知,搞不懂这个问题的道理。我希望你们当中更有经验的人可以。

首先检查提供地址是否正确,或者首先部署合约,然后尝试访问它。因为contractInstance.options.address = null

检查是否导入了正确的ABI文件。当我指着一个过时的ABI文件时,我也遇到了类似的问题。在我指出正确的一个之后,错误就消失了。

最新更新