以太坊钱包如何弹框提示用户切换链接

有的DAPP网站,刚进去,以太坊钱包就会弹出提醒,让你切换到火币之类的链。那么这个方法是怎么实现的呢。
以太坊钱包如何弹框提示用户切换链接_第1张图片

这个需求我找了几个小时,然后发现和ethereum.enable()有点类似,都是操作客户端的。

然后国内网站没找到,国外的ethereum文档
然后找到一段代码如下,

以太坊钱包如何弹框提示用户切换链接_第2张图片

不过这里我们需要清楚对应链的chainId。

因为要先手动切换链,分别打印下

console.log(ethereum.chainId);

然后记住链对应的chainId,比如我获取的是火币网的chainId为0x80。完整代码(vue):

mounted() {
 	this.switch();
  },
  methods:{
	  async switch(){
		  console.log(ethereum)
		  let id = ethereum.chainId;
		  console.log(id)
		  
		  let hecoMainnet = {
			  chainId:'0x80',rpcUrls:['https://http-mainnet-node.huobichain.com'],chainName:'heco - mainnet',nativeCurrency:{
					  name: 'HT',
				      symbol: 'HT', // 2-6 characters long
				      decimals: 18,
			  }
		  };
		  
		  
		  this.switchChain(hecoMainnet);
	  },
	  async addChain(data){
		  try {
		    await ethereum.request({
		      method: 'wallet_addEthereumChain',
		      params: [data],
		    });
		  } catch (addError) {
		  				  console.log(addError)
		    // handle "add" error
		  }
	  },
	  async switchChain(data){
	  	  try {
			  let {chainId} = data;
	  	    await ethereum.request({
	  	      method: 'wallet_switchEthereumChain',
	  	      params: [{ chainId }],
	  	    });
	  	  } catch (switchError) {
	  	    // This error code indicates that the chain has not been added to MetaMask.
			console.log(switchError)
	  	    if (switchError.code === 4902) {
	  	      
			  this.addChain(data);
	  	    }
	  	    // handle other "switch" errors
	  	  }
	  }
	  
  }

当然你们的chainId或许不一样,注意替换掉。一定是ethereum.chainId得到的,而不是自己填写的数字。

因为chainId是10进制的。而不是自己填写的16进制。

另外附上添加链的参数

以太坊钱包如何弹框提示用户切换链接_第3张图片

你可能感兴趣的:(dapp,网站搭建)