Im using this code to detect for metamask.
Now im using ropsten but i want to know how does metamsk know that my contract only works with 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> ";
}
});

addressandagiContractAddressas input to your code. Where do you send that input from? What are the values of these two addresses? Most likely, they are the addresses of your two contracts deployed on Ropsten but not on Mainnet, hence your code will work on the former but not on the latter. – goodvibration Jan 27 '20 at 19:10var contract = new web3.eth.Contract(abi,address);will not work correctly because whatever address you are providing isn't actually the address the smart contract you are trying to interact with. – Steven V Jan 27 '20 at 19:12