常见问题
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.currentProvider
、window.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 种解决方案示例代码
- 打开 Bitget Wallet,但无法使用问题的解决方案 https://github.com/WalletConnect/web3modal/issues/574
- 使用 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
6. Ton Connect High Risk 问题
为了保证Ton Connect的链接安全,避免用户产生资金损失,Bitget Wallet上线了域名检测逻辑,逻辑如下
在Dapp中,通过Ton Connect唤起Bitget Wallet进行授权时,调用的Deeplink Url中会传入授权连接数据
js
https://bkcode.vip/ton-connect?
v=2&
id=xxxxx&
r={"manifestUrl":"https://mini-app.tomarket.ai/tonconnect-manifest.json","items":[{"name":"ton_addr"}]}&
ret=none
https://bkcode.vip/ton-connect?
v=2&
id=xxxxx&
r={"manifestUrl":"https://mini-app.tomarket.ai/tonconnect-manifest.json","items":[{"name":"ton_addr"}]}&
ret=none
Bitget Wallet会解析以上数据中的 manifestUrl
对应的JSON文件数据,请求数据如下
json
{
"url": "https://mini-app.tomarket.ai",
"name": "Tomarket",
"iconUrl": "https://mini-app.tomarket.ai/assets/tomarket-gray-180x180.png"
}
{
"url": "https://mini-app.tomarket.ai",
"name": "Tomarket",
"iconUrl": "https://mini-app.tomarket.ai/assets/tomarket-gray-180x180.png"
}
Bitget Wallet会根据mainfestUrl
的请求url与manifest.json
文件中的url进行主域名对比
如:
- manifestUrl:
https://mini-app.tomarket.ai/tonconnect-manifest.json
- tonconnect-manifest.json 文件中的Url:
https://mini-app.tomarket.ai
如以上两个链接的主域名(tomarket.ai
)为一致则为通过状态,不一致会出现警告提醒。