簡體   English   中英

"Ethereum.on 如果鏈還沒有添加到元掩碼中,如何得到錯誤"

[英]Ethereum.on How to get error if chain is not added into metamask yet

使用此方法,應用程序正在偵聽鏈更改:

    ethereum.on('chainChanged', (chainId) => {
})

但是如果用戶要去的鏈還沒有添加到元掩碼中,它會拋出:

inpage.js:1 MetaMask - RPC Error: Unrecognized chain ID "0x89".
Try adding the chain using wallet_addEthereumChain first. Object

當然,有一種方法可以將新鏈添加到元掩碼中,但是如何捕獲這個元掩碼錯誤? 嘗試在 ethereum.on 之外捕捉到任何東西

謝謝!

為元掩碼網絡編寫映射:

const NETWORKS = {
  1: "Ethereum Main Network",
  3: "Ropsten Test Network",
  4: "Rinkeby Test Network",
  5: "Goerli Test Network",
  42: "Kovan Test Network",
  56: "Binance Smart Chain",
  1337: "Ganache",
};

設置目標網絡

const targetNetwork = NETWORKS[process.env.TARGET_CHAIN_ID];

const getChainId= async () => {
      const chainId = await web3.eth.getChainId();
      if (!chainId) {
        throw new Error(
          "Cannot retrieve an account. Please refresh the browser"
        );
      }
      return NETWORKS[chainId];
    }
  );

對我來說,最簡單的方法似乎是在切換之前先添加鏈,成功添加 Metamask 后會要求用戶將網絡切換到新添加的此處示例代碼以添加 BSC 網絡:

export async function addBSCToMetamask() {
    if (typeof window !== 'undefined') {
        window.ethereum.request({
            jsonrpc: '2.0',
            method: 'wallet_addEthereumChain',
            params: [
                {
                    chainId: '0x38',
                    chainName: 'Binance Smart Chain Mainnet',
                    rpcUrls: ['https://bsc-dataseed.binance.org/'],
                    nativeCurrency: {
                        name: 'BNB',
                        symbol: 'BNB',
                        decimals: 18
                    },
                    blockExplorerUrls: ['https://bscscan.com']
                }
            ],
            id: 0
        })
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM