Ethereum / EVM
使用 OneKey 注入的 EIP-1193 Provider 构建 EVM dApp。所有 EVM 兼容链(Ethereum、Polygon、BSC、Arbitrum、Optimism、Base 等)共享同一个 Provider。
Provider 检测
EIP-6963(推荐)
现代多钱包检测,避免冲突:
const providers: any[] = []
window.addEventListener('eip6963:announceProvider', (e: any) => {
providers.push(e.detail)
})
window.dispatchEvent(new Event('eip6963:requestProvider'))
// 通过 rdns 找到 OneKey
const onekey = providers.find(p => p.info.rdns === 'so.onekey.app.wallet')
const accounts = await onekey.provider.request({ method: 'eth_requestAccounts' })直接访问(回退方案)
const provider = window.$onekey?.ethereum
if (!provider) throw new Error('未检测到 OneKey')
const accounts = await provider.request({ method: 'eth_requestAccounts' })事件
// 账户变更
provider.on('accountsChanged', (accounts) => {
console.log('账户:', accounts[0])
})
// 网络变更
provider.on('chainChanged', (chainId) => {
console.log('链:', chainId)
window.location.reload() // 推荐
})
// 已连接
provider.on('connect', (info) => {
console.log('已连接到链:', info.chainId)
})错误码
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 4001 | 用户拒绝 | 优雅处理拒绝情况 |
| 4902 | 未知链 | 使用 wallet_addEthereumChain 添加链 |
| -32602 | 参数无效 | 使用 0x 前缀的十六进制字符串 |
| -32603 | 内部错误 | 检查请求格式 |
Chain ID
| 网络 | Chain ID | 十六进制 |
|---|---|---|
| Ethereum 主网 | 1 | 0x1 |
| Polygon | 137 | 0x89 |
| BSC | 56 | 0x38 |
| Arbitrum One | 42161 | 0xa4b1 |
| Optimism | 10 | 0xa |
| Base | 8453 | 0x2105 |
更多链请访问 chainlist.org 。
如需快速集成并使用 UI 组件,请使用 RainbowKit 或 Web3Modal。
Last updated on