[英]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.