常见问题
1. 无法检测到 bitkeep.ethereum
当检测不到 window.bitkeep.ethereum
时,开发者可以引导用户到 Bitget Wallet 官网下载插件。
示例代码如下:
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 插件。它提供与 web3.currentProvider
和 window.ethereum
相同的功能。
3. 多钱包冲突问题
在切换钱包连接之前,请清除之前钱包的事件监听器。
async function connect(type = 'bitkeep') {
const lastProvider = provider
const newProvider = getProvider(type)
await newProvider.request({ method: 'eth_requestAccounts' })
// 1. 移除前一个钱包的监听器以防止逻辑冲突
if (lastProvider) {
provider.removeAllListeners()
}
// 2. 成功授权并替换钱包提供者
provider = newProvider
web3 = new Web3(provider)
// 3. 监听地址和链ID变化的事件监听器;如果地址不存在则考虑断开连接
provider.on('accountsChanged', async (accounts) => {
accountsChanged(accounts)
})
provider.on('chainChanged', async (chainId) => {
chainChanged(chainId)
})
// 获取当前地址和链ID
accountsChanged()
chainChanged()
// 4. 缓存默认连接的钱包
localStorage.setItem('injected', type)
}
4. web3modal 集成问题
Bitget Wallet 插件提供以下 2 种解决方案示例:
- 打开 Bitget Wallet 但无法使用的解决方案:https://github.com/WalletConnect/web3modal/issues/574
- 使用
bitkeep-web3modal
示例代码来支持Bitget Wallet 插件
多钱包集成方法:
import web3modal from 'bitkeep-web3modal'
const web3Modal = new Web3Modal({
network: 'mainnet', // 可选
cacheProvider: true, // 可选
providerOptions: {
bitkeep: {
package: true,
},
walletconnect: {
display: {
logo: 'data:image/gif;base64,INSERT_BASE64_STRING',
name: 'Mobile',
description: '使用移动钱包扫描二维码',
},
package: WalletConnectProvider,
options: {
infuraId: 'INFURA_ID', // 必需
},
},
}, // 必需
})
5. ethers.js 集成问题
不推荐使用 ethers.js 在 window 上挂载 _ethers 对象,以避免因加载顺序而导致的冲突。
建议使用 BitKeep
注入的 _ethers
对象,并参考以下方法使用:
// 直接导入使用
import ethers from 'ethers'
const ethers = require('ethers')
// CDN
window.ethers
6. Ton Connect 高风险问题
为了确保 Ton Connect 链接的安全性并防止用户遭受经济损失,Bitget Wallet 实现了域名检测逻辑。逻辑如下:
在 DApp 中,通过 Ton Connect 调用 Bitget Wallet 进行授权时,Deeplink URL 将包含授权连接数据。
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 文件数据。请求数据如下:
{
"url": "https://mini-app.tomarket.ai",
"name": "Tomarket",
"iconUrl": "https://mini-app.tomarket.ai/assets/tomarket-gray-180x180.png"
}
Bitget Wallet 将比较从 manifestUrl
请求的 URL 主域名与 manifest.json
文件中的 URL。
例如:
- manifestUrl:
https://mini-app.tomarket.ai/tonconnect-manifest.json
- tonconnect-manifest.json 文件中的 URL:
https://mini-app.tomarket.ai
如果上述两个链接的主域名(tomarket.ai
)一致,则通过检查;如果不一致,将显示警告。
Last updated on