在比特币生态中,DApp 开发者经常需要与用户的钱包进行安全交互,Injected Provider API 正是实现这一目标的核心工具。它允许开发者请求账户信息、读取链上数据,并协助用户签署消息与交易,为构建去中心化应用提供了坚实基础。
什么是 Injected Provider API?
Injected Provider API 基于 JavaScript 模型,由钱包提供商嵌入用户访问的网站中。DApp 项目可通过调用此 API 请求用户账户信息、从连接的区块链读取数据,并支持用户进行消息和交易签署。这种机制使得 DApp 能够与用户钱包无缝交互,提升用户体验和安全性。
核心账户管理方法
连接钱包:connect 方法
通过 okxwallet.bitcoin.connect() 方法可请求连接用户钱包。该方法无需参数,返回一个 Promise 对象,包含当前账户的地址和公钥信息。
返回值示例:
- address:当前账户的地址(字符串类型)
- publicKey:当前账户的公钥(字符串类型)
请求账户访问:requestAccounts 方法
okxwallet.bitcoin.requestAccounts() 方法用于请求连接当前账户。调用此方法会触发钱包界面,请求用户授权 DApp 访问其账户信息。
返回值: 返回包含当前账户地址的 Promise 对象。
获取账户地址:getAccounts 方法
使用 okxwallet.bitcoin.getAccounts() 可直接获取当前已连接账户的地址,无需用户再次授权。
返回值: 返回包含当前账户地址的 Promise 对象。
获取公钥信息:getPublicKey 方法
okxwallet.bitcoin.getPublicKey() 提供获取当前账户公钥的能力,这在许多加密操作中至关重要。
返回值: 返回包含公钥的 Promise 对象。
网络与资产查询
获取网络信息:getNetwork 方法
okxwallet.bitcoin.getNetwork() 用于获取当前连接的网络信息。
重要提示:
- 不支持测试网络
- 仅适用于插件端版本 2.77.1 或更高
返回值: 返回网络信息的 Promise 对象。
查询余额:getBalance 方法
通过 okxwallet.bitcoin.getBalance() 可获取 BTC 余额详情。
适用版本: 移动端 6.51.0+ 和插件端 2.77.1+
返回值包含:
- confirmed:已确认的聪数量
- unconfirmed:未经确认的聪数量
- total:总聪量
获取铭文列表:getInscriptions 方法
okxwallet.bitcoin.getInscriptions() 提供当前账户的铭文列表查询功能。
参数说明:
- cursor:偏移量(可选,默认0)
- size:每页数量(可选,默认20)
返回值包含丰富信息: 铭文ID、编号、地址、输出值、内容长度、类型、时间戳等详细信息。
交易与转账操作
发送比特币:sendBitcoin 方法
使用 okxwallet.bitcoin.sendBitcoin(toAddress, satoshis, options) 执行比特币转账。
参数说明:
- toAddress:目标地址
- satoshis:发送的聪数量
- options:可选参数,可设置网络资费率
返回值: 交易哈希
高级转账:send 方法
okxwallet.bitcoin.send() 方法支持带有 memo 字段的比特币转移,提供更丰富的转账功能。
参数说明:
- from:发送地址
- to:接收地址
- value:发送数量
- satBytes:自定义费率(可选)
- memo:OP_RETURN 内容(可选)
- memoPos:memo 输出位置(可选)
铭文转移操作
发送单个铭文:sendInscription 方法
okxwallet.bitcoin.sendInscription(address, inscriptionId, options) 专用于铭文转移。
支持协议: Ordinals 和 Atomicals 协议
可选参数: 可设置自定义费率
批量转移铭文:transferNft 方法
okxwallet.bitcoin.transferNft() 支持批量转移铭文,与 sendInscription 相比更适合大量操作。
适用版本: 仅插件端版本
消息签名与安全验证
签名消息:signMessage 方法
okxwallet.bitcoin.signMessage(signStr[, type]) 提供消息签名功能,支持多种签名算法。
参数说明:
- signStr:需要签名的数据
- type:签名算法类型(可选,默认"ecdsa")
注意: 版本低于 6.51.0 的应用仅支持"ecdsa"算法
PSBT 交易处理
PSBT(部分签名的比特币交易)是比特币生态中的重要标准,以下方法提供完整的 PSBT 支持。
签名 PSBT:signPsbt 方法
okxwallet.bitcoin.signPsbt(psbtHex[, options]) 用于签名 PSBT 交易。
参数说明:
- psbtHex:要签名的 PSBT 十六进制字符串
- options:签名选项,包括自动完成、签名输入设置等
批量签名 PSBT:signPsbts 方法
okxwallet.bitcoin.signPsbts(psbtHexs[, options]) 支持同时签署多个 PSBT。
适用版本: 移动端 6.51.0+ 和插件端 2.77.1+
广播 PSBT 交易
提供多种方式广播 PSBT 交易:
pushPsbt(psbtHex):单笔交易广播sendPsbt(txs, from):批量交易广播(仅插件端)
高级功能操作
拆分 UTXO:splitUtxo 方法
okxwallet.bitcoin.splitUtxo() 用于 UTXO 拆分,初始化钱包环境。
适用版本: 仅插件端版本
铭刻功能
铭刻 BRC-20:inscribe 方法
okxwallet.bitcoin.inscribe() 支持铭刻可转移的 BRC-20 代币。
通用铭刻:mint 方法
okxwallet.bitcoin.mint() 支持 Ordinal 协议的通用铭刻,包括批量操作。
支持类型:
- BRC-20 deploy/mint/transfer
- 图片铭刻
- 纯文本铭刻
事件监听与处理
账户变更事件
钱包提供多种账户变更事件监听:
accountChanged:用户切换账户时触发accountsChanged:暴露的账户地址变化时触发(版本 6.51.0+ 和 2.77.1+)
这些事件允许 DApp 实时响应账户状态变化,提供更流畅的用户体验。
常见问题
什么是 Injected Provider API?
Injected Provider API 是钱包提供商嵌入到网页中的 JavaScript 接口,允许 DApp 与用户钱包安全交互,包括获取账户信息、读取链上数据和签署交易。
如何请求用户连接钱包?
使用 okxwallet.bitcoin.connect() 或 okxwallet.bitcoin.requestAccounts() 方法可以请求用户授权连接钱包,前者返回地址和公钥,后者只返回地址。
哪些版本支持获取网络信息?
getNetwork() 方法仅支持插件端版本 2.77.1 或更高,且不支持测试网络,仅适用于主网环境。
sendInscription 和 transferNft 有什么区别?
sendInscription 只支持单个铭文转移,而 transferNft 支持批量转移多个铭文。此外,transferNft 目前仅适用于插件端版本。
如何签署 PSBT 交易?
使用 signPsbt(psbtHex, options) 方法可以签署 PSBT 交易,options 参数允许配置签名选项,包括指定要签名的输入和签名算法类型。
账户变更时如何保持连接?
当用户切换账户时,钱包会发出 accountChanged 事件。如果新账户已将 DApp 列入白名单,连接将保持有效,同时传递新账户的公钥信息。