以前遇到一个需求:跨链转换代币,可能从以太链转到自己的链。再从自己的链转回以太链。
期望:当本地切换的时候,metamask的网络也跟着切换
推荐一个网络id和链名称的git库:https://github.com/ethereum-l...
大家都是老码农了,废话就不多说了。直接上代码
最完美的方式:
//添加网络 chainId 你需要切换的id
addOrChangeNetWork(chainId) {
const toHex = (num) => {
return \'0x\' + num.toString(16)
}
const chain = require(`@/moke/json/eip155-${chainId}.json`)
let net_data = {
chainId: toHex(chain.chainId),
chainName: chain.name,
nativeCurrency: {
name: chain.nativeCurrency.name,
symbol: chain.nativeCurrency.symbol,
decimals: chain.nativeCurrency.decimals
},
rpcUrls: chain.rpc,
blockExplorerUrls: [chain.explorers && chain.explorers.length > 0 && chain.explorers[0].url ? chain.explorers[0].url : chain.infoURL]
}
web3.eth.getAccounts((error, accounts) => {
window.ethereum
.request({
method: \'wallet_addEthereumChain\',
params: [net_data, accounts[0]]
})
.then((result) => {
console.log(result, \'返回数据\')
})
.catch((error) => {
console.log(error,\'错误数据\')
})
})
}
简单的方式:
window.ethereum.request({
method: \'wallet_switchEthereumChain\',
params: [
{
chainId: Web3.utils.numberToHex(1) //链id
}
]
})
收工!