Ethereum web3js调用因缺少合同地址而失败
要在本地设置上部署合同,我使用块菌。开发网络由Ganache运行。从应用程序A向网络发送数据也没有问题(使用块菌/块菌合同包)。我在编译和迁移合同时在同一工作目录中启动此应用程序 然而,当我将另一个应用程序连接到此网络并尝试检索数据时,我遇到了问题。这不使用任何块菌,只有web3js 我检索数据如下:Ethereum web3js调用因缺少合同地址而失败,ethereum,solidity,smartcontracts,web3js,truffle,Ethereum,Solidity,Smartcontracts,Web3js,Truffle,要在本地设置上部署合同,我使用块菌。开发网络由Ganache运行。从应用程序A向网络发送数据也没有问题(使用块菌/块菌合同包)。我在编译和迁移合同时在同一工作目录中启动此应用程序 然而,当我将另一个应用程序连接到此网络并尝试检索数据时,我遇到了问题。这不使用任何块菌,只有web3js 我检索数据如下: let contractInstance = new web3.eth.Contract(abi, result.contractHashes) if (!contractInstance) ha
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)
})
}
这总是让我想起:
错误:此合约对象尚未设置地址,请先设置地址
据我所知,当您忘记上述步骤时,就会发生这种情况。然而,我不是在创建新合同,我只是引用网络中已经存在的合同。如果我通过合同地址引用合同,但它不知道合同地址,这对我来说没有意义?
基于本文,我尝试使用以下步骤缺失(trail和error),但错误消息相同
也使用
call().then(....)
或
不起作用。我相当无知,无法理解这个问题的道理。我希望你们当中有更多经验的人可以 检查是否导入了正确的ABI文件。当我指向一个过时的ABI文件时,我遇到了类似的问题。在我指出正确的一个之后,错误就消失了 首先检查提供地址是否正确,或者首先部署合约,然后尝试访问它。因为
contractance.options.address=null
您使用的是什么版本的web3.js,以及结果的值是什么。ContractHashs
?这是一个奇怪的变量,表示合约的地址。您好,smarx,谢谢你抽出时间。我有1.0.0-beta.34版。另外,我同意命名,应该是contractAddress,必须在另一个项目中更改它。它的价值是什么?你把它记录下来了吗?(我猜是空的。)斯马特,谢谢!所以我记录了“结果”并看到了ContractHashs值。但是,我没有看到它实际上必须是结果[0]。ContractHashs。有点傻,但是谢谢你的建议,让我们看得更具体一些。这并不能回答这个问题。一旦你有足够的钱,你将能够;相反-
call({ from: result.contractHashes }, function(error, result) {....})