Metamask添加网络和切换网络

Posted 人工智能-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Metamask添加网络和切换网络相关的知识,希望对你有一定的参考价值。

在Dapp中,自动给用户Metamask添加一个网络(比如Heco主网或Heco测试网),程序主动切换用户Metamask的网络为指定网络(比如Heco主网)

Metamask新增了一个AddEthereumChainParameter 的api,可以自动给用户Metamask添加一个网络,并把当前页面连接到这个网络。

执行这个api时,如果用户的Metamask还没有添加参数指定的网络,则Metamask会弹出一个提示框,提示用户当前页面要给Metamask添加一个网络,并显示要添加网络的信息。如果用户点确定,Metamask就会添加这个网络到用户的钱包。


如果用户的Metamask已经添加了参数指定的网络,但是当前钱包连接的网络不是这个网络,则Metamask会弹出一个提示框,提示用户当前页面要把Metamask的网络切换到指定网络,如果用户点确定,Metamask当前连接的网络就会切换到指定网络。

以上判断Metamask是否添加了指定网络,是根据参数中的ChainID来判断,网络id一样就认为是同一个网络。

如果执行时Metamask已经添加了指定网络,当前也正好连接的是这个网络,则什么也不会执行,不会有任何提示。

在官方文档中,说这个api必须由用户主动操作来触发(点某个按钮),但是实测并不需要,在页面加载时,程序自动执行这个api也是可以的。所以可以在应用初始化的地方,固定执行这个api,这样当用户没有添加网络时,会自动添加;用户没有连接到网络时,会自动连接;用户已连接网络时,什么也不会做。

以下是参考代码:

const addNetwork = () => 
    window.ethereum.request(
        method: 'wallet_addEthereumChain', // Metamask的api名称
        params: [
            chainId: "0x80", // 网络id,16进制的字符串
            chainName: "HecoMain", // 添加到钱包后显示的网络名称
            rpcUrls: [
                'https://http-mainnet-node.huobichain.com', // rpc地址
            ],
            iconUrls: [
                'https://testnet.hecoinfo.com/favicon.png' // 网络的图标,暂时没看到在哪里会显示
            ],
            blockExplorerUrls: [
                'https://hecoinfo.com' // 网络对应的区块浏览器
            ],
            nativeCurrency:   // 网络主币的信息
                name: 'HT',
                symbol: 'HT',
                decimals: 18
            
        ]
    )

addNetwork()

官方文档
EIP-3085: Wallet Add Ethereum Chain RPC Method (`wallet_addEthereumChain`)
RPC API | MetaMask Docs

以上是关于Metamask添加网络和切换网络的主要内容,如果未能解决你的问题,请参考以下文章

Metamask添加网络和切换网络

Metamask插件中-添加网络和切换网络

Metamask插件中-添加网络和切换网络

如何为 Velas 网络配置 Metamask(完整教程)

区块链本地部署智能合约环境

mac ganache安装以及在metamask创建ganache网络和账户导入