由于缺少合同地址,web3js调用失败

时间:2018-07-11 18:44:29

标签: ethereum solidity smartcontracts 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中,我了解到,当您忘记了上述步骤时,就会发生这种情况,但是,我不是在创建新合同,而是指网络中已经存在的countractract。如果我不按合同地址提及合同,对我来说就没有意义了? 根据本文,我尝试使用web3 options address之后缺少的步骤(提示和错误),但错误消息相同。

也使用

call().then(....)

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

不起作用。我很无能为力,无法理解问题的原因。希望有人在您当中有更多经验。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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