reactjs 如何连接Metamask或Coinbase钱包?

jutyujz0  于 2023-04-11  发布在  React
关注(0)|答案(2)|浏览(184)

如何分别指定与Coinbase钱包和Metamask的连接?
现在,当使用window.ethereum.enable()时,Metamask和Coinbase钱包扩展都会弹出。我想要两个单独的按钮,一个用于Metamask,另一个用于Coinbase钱包。
我的代码:

const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(alchemyKey);

export const connectWallet = async () => {
    if (window.ethereum) { //check if Metamask is installed 
      try {
            const address = await window.ethereum.enable(); //connect Metamask
      }
   }
})
f2uvfpb9

f2uvfpb91#

从这个讨论中,似乎可以使用不同的Metamask请求方法来强制连接选择:

const connectWallet = async () => {
    if (window.ethereum) { //check if Metamask is installed 
      try {
        const address = await window.ethereum.request({
          method: 'wallet_requestPermissions',
          params: [{ eth_accounts: {}}]
        }); 
      } catch (error) {
        console.log(error);
      }
    }
  }

wallet_requestPermissions似乎做到了这一点。

gopyfrb3

gopyfrb32#

对我有用的是找到MetaMask提供程序并将其设置为window.ethereum.selectedProvider

const {ethereum} = window as any;
const metamaskProvider = ethereum?.providers?.find((p: any) => p.isMetaMask);

if (metamaskProvider && typeof ethereum.selectedProvider !== 'undefined') {
  ethereum.selectedProvider = metamaskProvider;
}

请注意,providersselectedProvider只有在安装了Coinbase钱包的情况下才会出现,而Metamask则不同。
这个答案对于调用ethereum.setSelectedProvider(provider)的类似方法也很有用。

相关问题