Skip to content

FAQ

Must: use window.bitkeep.ethereum from BitKeep

1. Cannot detect bitkeep?.ethereum

Cannot detect window?.bitkeep?.ethereum, intrudct user install wallet.

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

2. wallet confilct

Please user window.bitkeep.ethereum, same as web3.currentProvider and window.ethereum.

3. Mutil wallet confilct

delete cached wallet before every connnection

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

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

  //1. removeAllListeners
  if (lastProvider) {
    provider.removeAllListeners();
  }

  //2. user new providers
  provider = newProvider;
  web3 = new Web3(provider);

  //3. listen change
  provider.on("accountsChanged", async (accounts) => {
    accountsChanged(accounts);
  });
  provider.on("chainChanged", async (chainId) => {
    chainChanged(chainId);
  });
  //get current chainId
  accountsChanged();
  chainChanged();

  // 4. cache wallet
  localStorage.setItem("injected", type);
}
async function connect(type = "bitkeep") {
  const lastProvider = provider;
  const newProvider = getProvider(type);

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

  //1. removeAllListeners
  if (lastProvider) {
    provider.removeAllListeners();
  }

  //2. user new providers
  provider = newProvider;
  web3 = new Web3(provider);

  //3. listen change
  provider.on("accountsChanged", async (accounts) => {
    accountsChanged(accounts);
  });
  provider.on("chainChanged", async (chainId) => {
    chainChanged(chainId);
  });
  //get current chainId
  accountsChanged();
  chainChanged();

  // 4. cache wallet
  localStorage.setItem("injected", type);
}

4. web3modal problems

Bitget Wallet Extension supply 2 ways:

  1. bitkeep not work https://github.com/WalletConnect/web3modal/issues/574
  2. use bitkeep-web3modal support Bitget Wallet Extension
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 problems

Recomand use _ethers from BitKeep

import ethers from "ethers"
const ethers = rquire("ethers")

//cdn
window.ethers
import ethers from "ethers"
const ethers = rquire("ethers")

//cdn
window.ethers