Solidity

如何以程式方式更改(或提示更改)使用者目前的元遮罩網路?

  • August 30, 2022

我製作了一個 dApp,允許使用者在多個不同的鏈上收集代幣獎勵。舉例來說,它是Rinkebyand Mumbai

為了讓簽名者和提供者執行我的契約功能,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.ethereumMetaMask 直接注入的全域 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 文件以了解他們建議如何處理此問題 :)

引用自:https://ethereum.stackexchange.com/questions/134674