Estoy desarrollando una aplicación que usa el token MATIC en la red MATIC. Quiero asegurarme de que el usuario esté conectado a esta red con MetaMask, ¿es posible?
En este momento, en mi client.js adjunto a mi página html, solo tengo lo siguiente:
let accounts, web3, contract; if (typeof window.ethereum !== 'undefined') { console.log('MetaMask is installed!'); } else { alert("Hello! Consider adding an ethereum wallet such as MetaMask to fully use this website."); } accounts = ethereum.request({ method: 'eth_requestAccounts' }); web3 = new Web3();El problema es que si el usuario intenta interactuar con otras funciones del sitio web, podría intentar usar ETH, lo que podría hacer que pierda su token y que la función simplemente no funcione. Así que quiero pedirles que ingresen a la red MATIC.
¿Hay alguna forma de que ingresen a esta red automáticamente, sin que tengan que ingresarla en MetaMask manualmente? Ayudaría a reducir la fricción. 
Esta es la red MATIC que he estado usando en mi backend server.js para esta aplicación:
const WEB3_PROVIDER = "https://polygon-rpc.com" // https://blog.polygon.technology/polygon-rpc-gateway-will-provide-a-free-high-performance-connection-to-the-polygon-pos-blockchain/ if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); console.log("web3 already initialized."); } else { // set the provider you want from Web3.providers web3 = new Web3(new Web3.providers.HttpProvider(WEB3_PROVIDER)); console.log("New web3 object initialized."); }puede verificar la red de usuario como esta usando su instancia web3 (documento web3 ):
const yourNetworkId = '137' web3.eth.net.getId() .then((networkId) => { if (networkId != yourNetworkId) { // MetaMask network is wrong } }) .catch((err) => { // unable to retrieve network id });para agregar la red mediante programación ( documento metamask ):
ethereum.request({ method: 'wallet_addEthereumChain', params: [{ chainId: web3.utils.toHex('137'), chainName: 'Polygon', nativeCurrency: { name: 'MATIC', symbol: 'MATIC', decimals: 18 }, rpcUrls: ['https://polygon-rpc.com'], blockExplorerUrls: ['https://www.polygonscan.com'] }], }) .then(() => console.log('network added')) .catch(() => console.log('could not add network'))y si desea configurar la red Metamask mediante programación ( documento Metamask ):
ethereum.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: web3.utils.toHex('137') }], }) .then(() => console.log('network has been set')) .catch((e) => { if (e.code === 4902) { console.log('network is not available, add it') } else { console.log('could not set network') } }) también puede escuchar el evento chainChanged en Metamask para detectar cuándo el usuario cambia la red Metamask (documento metamask ):
ethereum.on("chainChanged", () => { // if network was wrong, you can open a modal to disable activity and ask // user to change network back to Polygon or even change it yourself on // user clicking a button, but i don't suggest setting network by yourself // without users permission because users may using other dApps on other // networks at the same time which changing network immediately on chainChanged // would be a bad UX })