本文将详细介绍如何通过 UI 界面和 API 方式将您的去中心化应用(DApp)与 Aptos 区块链钱包进行集成,涵盖连接、签名、交易等核心操作流程。
准备工作
在开始集成前,请确保您的开发环境满足以下要求:
- 若使用 OKX App 进行连接,请确保其版本为 6.92.0 或更高
- 通过 npm 安装 OKX Connect 依赖包,以便在项目中使用相关功能
- 准备应用的基本元数据,包括名称和图标链接,用于在钱包中展示
初始化连接界面
在连接钱包之前,需要创建一个提供 UI 界面的对象,用于后续的钱包连接和交易发送等操作。
请求参数说明
dappMetaData(对象类型)
- name:应用名称,仅用于展示,不作为唯一标识
- icon:应用图标的 URL 地址,支持 PNG、ICO 格式,推荐使用 180x180px 的 PNG 图标
actionsConfiguration(对象类型)
- modals:设置交易过程中提示框的显示模式,可选 'before' | 'success' | 'error' 或 'all',默认为 'before'
- returnStrategy:指定应用钱包在用户签名/拒绝请求后的返回策略
- tmaReturnUrl:针对 Telegram 迷你钱包的返回策略设置
uiPreferences(对象类型)
- theme:界面主题设置,支持深色、浅色和系统默认三种模式
- language:语言设置,支持多种语言选项,默认为英文
返回值
返回 OKXUniversalConnectUI 对象实例,用于后续操作。
钱包连接流程
连接钱包的主要目的是获取钱包地址作为标识符,以及获取签名交易所需的必要参数。
连接参数配置
namespaces:连接请求的必要信息
- 键值设置:EVM 系统使用 'eip155',Aptos 系统使用 'aptos'
- chains:支持的链 ID 信息
- defaultChain:默认链设置(可选)
optionalNamespaces:连接请求的可选信息
- 配置方式与必要命名空间类似,但如果钱包不支持相应链信息,连接仍然可以进行
sessionConfig:会话配置
- redirect:连接成功后的跳转参数
返回值
返回 Promise 对象,包含以下信息:
- topic:会话标识符
- namespaces:成功连接的命名空间信息
- chains:连接链信息
- accounts:账户信息
- methods:钱包在当前命名空间下支持的方法
- defaultChain:当前会话的默认链
- sessionConfig:会话配置信息
- dappInfo:DApp 信息
连接并签名操作
此操作同时完成钱包连接和数据签名功能,结果将通过 'connect_signResponse' 事件回调。
请求参数
除了连接参数外,还需提供签名请求参数:
- method:请求的方法名称,Aptos 支持 'aptos_signMessage'
- chainId:方法执行的链 ID,必须包含在上述命名空间中
- params:请求方法对应的参数
钱包连接状态检查
通过调用相应方法可以检查钱包是否已连接。
返回值
返回布尔值,true 表示已连接,false 表示未连接。
交易准备与执行
在进行交易操作前,需要创建 OKXAptosProvider 对象,并通过构造函数传入 OKXUniversalProvider。
获取钱包地址和公钥
请求参数
- chain:要获取钱包地址的链 ID,如不传递则使用第一个连接的 Aptos 系统地址
返回值
返回包含以下信息的对象:
- address:钱包地址
- publicKey:公钥
消息签名
请求参数
message:签名消息对象
- address:是否在消息中包含账户地址
- application:是否包含 DApp 的域名信息
- chainId:是否包含钱包当前连接的链 ID
- message:要签名并显示给用户的消息内容
- nonce:DApp 生成的随机数
- chain:请求签名执行的链,建议传递此参数;当连接多链时必须传递
返回值
返回 Promise 对象,包含完整的签名信息。
单笔交易签名
请求参数
- transaction:交易数据对象
- chain:请求签名执行的链,建议传递此参数;当连接多链时必须传递
返回值
返回 Promise 对象,包含签名结果的 Buffer。
签名并广播交易
通过 okxAptosProvider.signAndSubmitTransaction(transaction, chain) 方法可实现交易签名并广播上链。
请求参数
- transaction:交易数据对象
- chain:请求签名执行的链
返回值
返回 Promise 对象,包含交易哈希字符串。
断开钱包连接
断开已连接的钱包并删除当前会话。如需切换连接的钱包,请先断开当前钱包连接。
事件处理
在连接、交易和断开连接过程中,需要监听和处理相应的事件。
错误代码说明
以下是在连接、交易和断开连接过程中可能抛出的异常错误代码:
| 错误代码 | 描述 |
|---|---|
| OKX_CONNECT_ERROR_CODES.UNKNOWN_ERROR | 未知错误 |
| OKX_CONNECT_ERROR_CODES.ALREADY_CONNECTED_ERROR | 钱包已连接 |
| OKX_CONNECT_ERROR_CODES.NOT_CONNECTED_ERROR | 钱包未连接 |
| OKX_CONNECT_ERROR_CODES.USER_REJECTS_ERROR | 用户拒绝操作 |
| OKX_CONNECT_ERROR_CODES.METHOD_NOT_SUPPORTED | 方法不支持 |
| OKX_CONNECT_ERROR_CODES.CHAIN_NOT_SUPPORTED | 链不支持 |
| OKX_CONNECT_ERROR_CODES.WALLET_NOT_SUPPORTED | 钱包不支持 |
| OKX_CONNECT_ERROR_CODES.CONNECTION_ERROR | 连接错误 |
常见问题
如何选择适合的集成方式?
根据您的应用场景决定:如果需要在 Telegram 中运行 DApp,用户可以选择打开移动应用钱包或使用 OKX 迷你钱包;如果追求更灵活的定制性,建议使用 API 方式集成。
连接钱包时需要注意哪些参数配置?
关键参数包括命名空间设置、链ID配置、返回策略和语言主题偏好。特别是 namespaces 和 optionalNamespaces 的设置,决定了钱包能否成功连接和支持的功能范围。
签名过程中常见的问题有哪些?
最常见的是用户拒绝签名、链不支持或方法不支持错误。建议在代码中做好异常处理,并为用户提供清晰的错误提示和解决方案。
多链连接时需要注意什么?
当连接多条链时,必须在每个签名请求中明确指定 chain 参数,否则可能导致操作失败。同时要确保请求的链在命名空间中已声明支持。
交易广播后如何获取状态?
交易广播成功后返回的是交易哈希,您可以通过 Aptos 区块链浏览器查询交易状态,或使用相应的 API 接口监控交易确认情况。
如何处理用户拒绝连接或签名的情况?
应该优雅地处理用户拒绝操作的情况,提供友好的提示信息,并允许用户重新尝试操作。同时记录错误日志以便后续分析和优化用户体验。