我使用这段代码来检测元问题。
现在我正在使用ropsten,但我想知道元my如何知道我的合同只适用于ropsten?
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> ";
}
});发布于 2020-01-27 19:26:06
var contract = new web3.eth.Contract(abi,address);
const agiContract = new web3.eth.Contract(agiabi,agiContractAddress);只有在实现该功能的契约部署在contract上时,通过address进行的任何链上函数调用才能成功完成。
只有在实现该功能的契约部署在agiContract上时,通过agiContractAddress进行的任何链上函数调用才能成功完成。
这意味着您的程序可能在一个网络上成功运行,但在另一个网络上失败。
MetaMask不是这里的原因;您的输入地址是。
发布于 2020-01-27 19:03:20
Metamask不知道您的合同只存在于Ropsten中。当您登录元问题时,您可以在下图的下拉列表中选择要使用的网络。

这是web3将与之交互的网络。您可以通过查看web3对象的网络id来检查正在使用的网络。您可以使用下面的代码来完成此操作。如果您的合同只适用于Ropsten,那么如果用户不在Ropsten上,您可能需要提出一个警告或建议来更改网络。
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.')
}
})https://ethereum.stackexchange.com/questions/79376
复制相似问题