Injected Provider API 开发指南:连接比特币钱包与 DApp 交互

·

在比特币生态中,DApp 开发者经常需要与用户的钱包进行安全交互,Injected Provider API 正是实现这一目标的核心工具。它允许开发者请求账户信息、读取链上数据,并协助用户签署消息与交易,为构建去中心化应用提供了坚实基础。

什么是 Injected Provider API?

Injected Provider API 基于 JavaScript 模型,由钱包提供商嵌入用户访问的网站中。DApp 项目可通过调用此 API 请求用户账户信息、从连接的区块链读取数据,并支持用户进行消息和交易签署。这种机制使得 DApp 能够与用户钱包无缝交互,提升用户体验和安全性。

核心账户管理方法

连接钱包:connect 方法

通过 okxwallet.bitcoin.connect() 方法可请求连接用户钱包。该方法无需参数,返回一个 Promise 对象,包含当前账户的地址和公钥信息。

返回值示例:

请求账户访问:requestAccounts 方法

okxwallet.bitcoin.requestAccounts() 方法用于请求连接当前账户。调用此方法会触发钱包界面,请求用户授权 DApp 访问其账户信息。

返回值: 返回包含当前账户地址的 Promise 对象。

获取账户地址:getAccounts 方法

使用 okxwallet.bitcoin.getAccounts() 可直接获取当前已连接账户的地址,无需用户再次授权。

返回值: 返回包含当前账户地址的 Promise 对象。

获取公钥信息:getPublicKey 方法

okxwallet.bitcoin.getPublicKey() 提供获取当前账户公钥的能力,这在许多加密操作中至关重要。

返回值: 返回包含公钥的 Promise 对象。

网络与资产查询

获取网络信息:getNetwork 方法

okxwallet.bitcoin.getNetwork() 用于获取当前连接的网络信息。

重要提示:

返回值: 返回网络信息的 Promise 对象。

查询余额:getBalance 方法

通过 okxwallet.bitcoin.getBalance() 可获取 BTC 余额详情。

适用版本: 移动端 6.51.0+ 和插件端 2.77.1+

返回值包含:

获取铭文列表:getInscriptions 方法

okxwallet.bitcoin.getInscriptions() 提供当前账户的铭文列表查询功能。

参数说明:

返回值包含丰富信息: 铭文ID、编号、地址、输出值、内容长度、类型、时间戳等详细信息。

交易与转账操作

发送比特币:sendBitcoin 方法

使用 okxwallet.bitcoin.sendBitcoin(toAddress, satoshis, options) 执行比特币转账。

参数说明:

返回值: 交易哈希

高级转账:send 方法

okxwallet.bitcoin.send() 方法支持带有 memo 字段的比特币转移,提供更丰富的转账功能。

参数说明:

铭文转移操作

发送单个铭文:sendInscription 方法

okxwallet.bitcoin.sendInscription(address, inscriptionId, options) 专用于铭文转移。

支持协议: Ordinals 和 Atomicals 协议
可选参数: 可设置自定义费率

批量转移铭文:transferNft 方法

okxwallet.bitcoin.transferNft() 支持批量转移铭文,与 sendInscription 相比更适合大量操作。

适用版本: 仅插件端版本

消息签名与安全验证

签名消息:signMessage 方法

okxwallet.bitcoin.signMessage(signStr[, type]) 提供消息签名功能,支持多种签名算法。

参数说明:

注意: 版本低于 6.51.0 的应用仅支持"ecdsa"算法

PSBT 交易处理

PSBT(部分签名的比特币交易)是比特币生态中的重要标准,以下方法提供完整的 PSBT 支持。

签名 PSBT:signPsbt 方法

okxwallet.bitcoin.signPsbt(psbtHex[, options]) 用于签名 PSBT 交易。

参数说明:

批量签名 PSBT:signPsbts 方法

okxwallet.bitcoin.signPsbts(psbtHexs[, options]) 支持同时签署多个 PSBT。

适用版本: 移动端 6.51.0+ 和插件端 2.77.1+

广播 PSBT 交易

提供多种方式广播 PSBT 交易:

高级功能操作

拆分 UTXO:splitUtxo 方法

okxwallet.bitcoin.splitUtxo() 用于 UTXO 拆分,初始化钱包环境。

适用版本: 仅插件端版本

铭刻功能

铭刻 BRC-20:inscribe 方法

okxwallet.bitcoin.inscribe() 支持铭刻可转移的 BRC-20 代币。

通用铭刻:mint 方法

okxwallet.bitcoin.mint() 支持 Ordinal 协议的通用铭刻,包括批量操作。

支持类型:

事件监听与处理

账户变更事件

钱包提供多种账户变更事件监听:

这些事件允许 DApp 实时响应账户状态变化,提供更流畅的用户体验。

👉 深入了解比特币 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 列入白名单,连接将保持有效,同时传递新账户的公钥信息。