Solidity
如何以程式方式更改(或提示更改)使用者目前的元遮罩網路?
我製作了一個 dApp,允許使用者在多個不同的鏈上收集代幣獎勵。舉例來說,它是
Rinkeby
andMumbai
。為了讓簽名者和提供者執行我的契約功能,
ethers.js
我使用了以下程式碼:const provider = new ethers.providers.Web3Provider(web3.currentProvider); const wallet = new ethers.Wallet(privateKey, provider); const signer = wallet.provider.getSigner(wallet.address);
它獲取目前提供者並使用合約功能允許在使用者目前鏈上索取獎勵,
Rinkeby
. 那麼如果使用者想在另一條鏈上領取獎勵Mumbai
,他必須在 Metamask 中更改網路。"Claim"
我希望它在使用者按下按鈕時自動完成。如何以程式方式更改使用者的網路?
這是您需要使用
window.ethereum
MetaMask 直接注入的全域 API 來提示從目前選擇的網路切換到孟買的程式碼。// Prompt the user to switch to the Mumbai testnet async function switchNetwork() { await window.ethereum.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: '0x13881' }], // chainId must be in HEX with 0x in front }); }
您可以使用此轉換器將小數轉換為 HEX。
請注意,如果尚未在 MetaMask 上設置網路,這將給出錯誤。您可以查看MetaMask 文件以了解他們建議如何處理此問題 :)