Skip to content

常见问题

1. 检测不到 bitkeep.ethereum

检测不到 window.bitkeep.ethereum 时,开发者可引导用户跳转到 Bitget Wallet 官网下载插件。 示例代码如下:

js
 function getProvider() {
    const provider = window?.bitkeep?.ethereum;
    if (!provider) {
        window.open('https://web3.bitget.com/wallet-download?type=2');
        throw "可以引导用户官网下载"
    }
    return provider;
}
 function getProvider() {
    const provider = window?.bitkeep?.ethereum;
    if (!provider) {
        window.open('https://web3.bitget.com/wallet-download?type=2');
        throw "可以引导用户官网下载"
    }
    return provider;
}

2. 钱包调用冲突问题

请使用 window.bitkeep.ethereum 接入 Bitget Wallet Extension,它和 web3.currentProviderwindow.ethereum 提供功能是相同的。

3. 多个钱包冲突问题

在切换钱包链接之前,清空上一次钱包监听的事件。

js
async function connect(type = "bitkeep") {
  const lastProvider = provider;
  const newProvider = getProvider(type);

  await newProvider.request({ method: "eth_requestAccounts" });

  //1. 删除上一个钱包的监听 防止逻辑冲突
  if (lastProvider) {
    provider.removeAllListeners();
  }

  //2. 授权链接成功替换钱包的providers
  provider = newProvider;
  web3 = new Web3(provider);

  //3. 事件监听 地址 和链id的变化 地址不存在就算是断开了
  provider.on("accountsChanged", async (accounts) => {
    accountsChanged(accounts);
  });
  provider.on("chainChanged", async (chainId) => {
    chainChanged(chainId);
  });
  //获取当前地址 chainId
  accountsChanged();
  chainChanged();

  // 4. 缓存默认链接钱包
  localStorage.setItem("injected", type);
}
async function connect(type = "bitkeep") {
  const lastProvider = provider;
  const newProvider = getProvider(type);

  await newProvider.request({ method: "eth_requestAccounts" });

  //1. 删除上一个钱包的监听 防止逻辑冲突
  if (lastProvider) {
    provider.removeAllListeners();
  }

  //2. 授权链接成功替换钱包的providers
  provider = newProvider;
  web3 = new Web3(provider);

  //3. 事件监听 地址 和链id的变化 地址不存在就算是断开了
  provider.on("accountsChanged", async (accounts) => {
    accountsChanged(accounts);
  });
  provider.on("chainChanged", async (chainId) => {
    chainChanged(chainId);
  });
  //获取当前地址 chainId
  accountsChanged();
  chainChanged();

  // 4. 缓存默认链接钱包
  localStorage.setItem("injected", type);
}

4. web3modal 接入问题

Bitget Wallet Extension 提供如下 2 种解决方案示例代码

  1. 打开 Bitget Wallet,但无法使用问题的解决方案 https://github.com/WalletConnect/web3modal/issues/574
  2. 使用 bitkeep-web3modal 示例代码来支持 Bitget Wallet Extension

支持多钱包存在的集成方式:

js
import web3modal from 'bitkeep-web3modal';
const web3Modal = new Web3Modal({
  network: 'mainnet', // optional
  cacheProvider: true, // optional
  providerOptions: {
    bitkeep: {
      package: true,
    },
    walletconnect: {
      display: {
        logo: 'data:image/gif;base64,INSERT_BASE64_STRING',
        name: 'Mobile',
        description: 'Scan qrcode with your mobile wallet',
      },
      package: WalletConnectProvider,
      options: {
        infuraId: 'INFURA_ID', // required
      },
    },
  }, // required
});
import web3modal from 'bitkeep-web3modal';
const web3Modal = new Web3Modal({
  network: 'mainnet', // optional
  cacheProvider: true, // optional
  providerOptions: {
    bitkeep: {
      package: true,
    },
    walletconnect: {
      display: {
        logo: 'data:image/gif;base64,INSERT_BASE64_STRING',
        name: 'Mobile',
        description: 'Scan qrcode with your mobile wallet',
      },
      package: WalletConnectProvider,
      options: {
        infuraId: 'INFURA_ID', // required
      },
    },
  }, // required
});

5. ethers.js 接入问题

不建议使用 ethers.js 在window 上挂载 _ethers 对象,避免使用 _ethers 因为加载顺序造成使用冲突。

推荐使用 BitKeep 注入的 _ethers 对象,参考以下方式引入使用

js
//直接引入使用
import ethers from "ethers"
const ethers = rquire("ethers")
//cdn
window.ethers
//直接引入使用
import ethers from "ethers"
const ethers = rquire("ethers")
//cdn
window.ethers