首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元问题是如何知道一个契约是为了萎缩还是为了主网络?

元问题是如何知道一个契约是为了萎缩还是为了主网络?
EN

Ethereum用户
提问于 2020-01-27 18:55:51
回答 2查看 499关注 0票数 0

我使用这段代码来检测元问题。

现在我正在使用ropsten,但我想知道元my如何知道我的合同只适用于ropsten?

代码语言:javascript
复制
window.addEventListener('load', async () => {
    // Modern dapp browsers...
    if (window.ethereum) {
        window.web3 = new Web3(ethereum);
        try {
            await ethereum.enable();
            var accounts= await web3.eth.getAccounts();
            var option={from: accounts[0] };
            var contract = new web3.eth.Contract(abi,address);
            const agiContract = new web3.eth.Contract(agiabi,agiContractAddress);

            const balance = await contract.methods.balanceOf(accounts[0]).call();
            const myDivs = await contract.methods.dividendsOf(accounts[0]).call();


            var supply = await contract.methods.totalSupply().call();
            var agiBalance = await contract.methods.totalAgiBalance().call();

            const agiAccountBalance = await agiContract.methods.balanceOf(accounts[0]).call();



            document.getElementById('agiAvailable').innerHTML = agiAccountBalance/100000000;
            document.getElementById('agiContractBalance').innerHTML = agiBalance/100000000 + ' AGI';
            document.getElementById('contractBalanceSnet').innerHTML = supply/100000000 + ' SNET';
            document.getElementById('snet-holding').innerHTML = balance/100000000;
            document.getElementById('myDividends').innerHTML = myDivs/100000000;
            document.getElementById('wallet').innerHTML = accounts;


            ethereum.on('accountsChanged', async (accounts) => {
              await ethereum.enable();
              var accounts= await web3.eth.getAccounts();
              var option={from: accounts[0] };
              var contract = new web3.eth.Contract(abi,address);
              const agiContract = new web3.eth.Contract(agiabi,agiContractAddress);

              const balance = await contract.methods.balanceOf(accounts[0]).call();
              const myDivs = await contract.methods.dividendsOf(accounts[0]).call();


              var supply = await contract.methods.totalSupply().call();
              var agiBalance = await contract.methods.totalAgiBalance().call();

              const agiAccountBalance = await agiContract.methods.balanceOf(accounts[0]).call();



              document.getElementById('agiAvailable').innerHTML = agiAccountBalance/100000000;
              document.getElementById('agiContractBalance').innerHTML = agiBalance/100000000;
              document.getElementById('contractBalanceSnet').innerHTML = supply/100000000;
              document.getElementById('snet-holding').innerHTML = balance/100000000;
              document.getElementById('myDividends').innerHTML = myDivs/100000000;
              document.getElementById('wallet').innerHTML = accounts;
            })
        } catch (error) {
            // User denied account access...
            console.log(error)
        }
    }
    // Legacy dapp browsers...
    else if (window.web3) {
        window.web3 = new Web3(web3.currentProvider);
        // Acccounts always exposed
        web3.eth.sendTransaction({/* ... */});
    }
    // Non-dapp browsers...
    else {
        document.getElementById('wallet').innerHTML = "Use Metamask on a Desktop or use TrustWallet on a mobile";
        document.getElementById('agiAvailable').innerHTML = "<a href='https://binance.com/' style='color:green'>BUY</a> ";
    }
});
EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-01-27 19:26:06

代码语言:javascript
复制
var contract = new web3.eth.Contract(abi,address);
const agiContract = new web3.eth.Contract(agiabi,agiContractAddress);

只有在实现该功能的契约部署在contract上时,通过address进行的任何链上函数调用才能成功完成。

只有在实现该功能的契约部署在agiContract上时,通过agiContractAddress进行的任何链上函数调用才能成功完成。

这意味着您的程序可能在一个网络上成功运行,但在另一个网络上失败。

MetaMask不是这里的原因;您的输入地址是。

票数 0
EN

Ethereum用户

发布于 2020-01-27 19:03:20

Metamask不知道您的合同只存在于Ropsten中。当您登录元问题时,您可以在下图的下拉列表中选择要使用的网络。

这是web3将与之交互的网络。您可以通过查看web3对象的网络id来检查正在使用的网络。您可以使用下面的代码来完成此操作。如果您的合同只适用于Ropsten,那么如果用户不在Ropsten上,您可能需要提出一个警告或建议来更改网络。

代码语言:javascript
复制
web3.version.getNetwork((err, netId) => {
  switch (netId) {
    case "1":
      console.log('This is mainnet')
      break
    case "2":
      console.log('This is the deprecated Morden test network.')
      break
    case "3":
      console.log('This is the ropsten test network.')
      break
    default:
      console.log('This is an unknown network.')
  }
})

这个答案的代码

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/79376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档