未处理的拒绝错误:此合约对象尚未设置地址,请先设置地址。

19

我目前正在尝试通过Web3在我的计算机上使用Infura。当我设置运行我的node index.js文件时,我收到以下错误:

Unhandled rejection Error: This contract object doesn't have address set yet, please set an address first.
    at Object._processExecuteArguments (/Users/Oso.Lu/cryptokitty-miner/node_modules/web3-eth-contract/src/index.js:739:15)
    at Object._executeMethod (/Users/Oso.Lu/cryptokitty-miner/node_modules/web3-eth-contract/src/index.js:760:54


var helpers = require("./helpers.js")

var Web3 = require('web3');
var Tx = require('ethereumjs-tx');

// You should be running a local Eth node or use Infura.
var web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io:443"));
var prompt = require('prompt');


var sendingAddress = "********************"  // with your sending ETH address
var pKey = "******************************"; // This will store the corresponding private key.  we'll be getting the private key for this Eth address from a command prompt


// Keep track of kitties we'll mine to avoid double-mining
var kittyArray = []

var theNonce = "";
// Gas price.   Todo: Use Eth gas station Oracle to predict gas prices
var gwei = '26'

// Track # of received
var num_requested = 0
var num_received = 0

我想问题可能是在Infura的443端口上运行。


这通常意味着您尚未将MyContract.options.address设置为部署后合同实例返回的地址。您需要发布完整的代码以进行确认。 - Adam Kipnis
4个回答

5

简单解决方案

Voting.options.address = "0x6ee9957aef5f4073c6af71441ec7962527c37671"

其中 Voting 是我的智能合约实例名称

"0x6ee9957aef5f4073c6af71441ec7962527c37671" 是已部署的智能合约地址

我的 web3.js 版本为 "web3": "^1.0.0-beta.31",


在哪里写入“Voting.options.address =“0x6ee9957aef5f4073c6af71441ec7962527c37671”? - Zeeshan Ahmad Khalil
我遇到了你遇到的相同错误。你找到了@ngCourse建议添加代码的位置吗? - Jessie
请指出需要添加上述代码的文件。 - Codemaker

2
const accounts = await web3.eth.getAccounts()
this.setState({ 'account': accounts[0] });
const networkId = await web3.eth.net.getId()
const networkData = SocialNetwork.networks[networkId]
if (networkData) {
    const socialNetwork = web3.eth.Contract(SocialNetwork.abi, networkData.address)

} else {
    window.alert('oops')
}

这是正确的设置合约地址的方法。您可以通过networkData.address来设置地址。


1
非常感谢这次对话,我刚开始在本地环境中使用Truffle并遇到了这个问题;这个问题已经解决了,在App.js中添加了以下代码:
const instance = new web3.eth.Contract(
        SimpleStorageContract.abi,
        deployedNetwork && deployedNetwork.address,
      );

刚刚添加了这个:

instance.options.address = "特定测试网络上的合约地址";

可以在CONTRACT_NAME.js文件中找到,在网络ID为5777的网络中。


0
在我的情况下,我意识到我的truffle-config.js文件中缺少我的目录,这就是为什么我的migration.sol中的networks字段没有得到更新的原因。我不得不添加以下行来满足contracts_build_directory: path.join(__dirname, "client/src/contracts")。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接