Sui 钱包集成:UI 接入与 DEX API 开发指南

·

在 SDK 基础之上,我们还提供了用户界面(UI)接入方案。选择 UI 接入,若 DApp 运行于 Telegram 环境,用户可选择唤起移动端 App 钱包,或直接在 Telegram 内唤起 Ouyi Telegram 迷你钱包,实现更流畅的操作体验。

安装与环境初始化

集成前,请确保 OKX App 已更新至 6.90.1 或更高版本。

使用 npm 安装 OKX Connect 依赖包:

npm install @okx/web3-connect

在连接钱包前,需初始化一个 UI 对象,用于后续连接钱包、发送交易等操作:

OKXUniversalConnectUI.init(dappMetaData, actionsConfiguration, uiPreferences, language);

请求参数说明

返回值

返回 OKXUniversalConnectUI 对象实例,用于后续操作。

连接钱包操作

通过以下方法打开连接模态框,获取钱包地址及交易签名所需参数:

okxUniversalConnectUI.openModal(connectParams);

请求参数详解

返回值

返回 Promise 对象,包含会话标识(topic)、命名空间信息、链数据、账户列表、支持方法及默认链等关键信息。

👉 查看实时链上交易工具

连接并签名消息

该方法支持在连接钱包的同时请求消息签名,结果通过 'connect_signResponse' 事件回调:

connectAndSign(connectParams, signRequest);

请求参数说明

返回值

返回 Promise 对象,包含连接会话的详细数据及签名结果。

钱包连接状态管理

检查连接状态

使用以下方法获取当前钱包是否处于连接状态:

isConnected();

返回布尔值,true 表示已连接。

断开钱包连接

断开当前连接并删除会话记录。如需切换钱包,请先断开当前连接:

disconnect();

交易与消息签名实践

创建 Sui 提供者对象

首先需创建 OKXSuiProvider 对象,将 okxUniversalConnectUI 传入构造函数:

const suiProvider = new OKXSuiProvider(okxUniversalConnectUI);

获取账户信息

suiProvider.getAccount();

返回对象包含钱包地址(address)及公钥(publicKey,要求 App 6.92.0 及以上版本)。

签名消息

请求参数为 SuiSignMessageInput 对象,包含 Uint8Array 类型的 message 字段。返回 Promise 对象,包含 messageBytes 及 signature。

签名个人消息

类似签名消息操作,返回 bytes 和 signature 字段。

签名交易

请求参数包含交易数据,返回 signature 及 transactionBlockBytes。

签名并广播交易

请求签名并即时广播上链,返回确认状态(confirmedLocalExecution)、交易摘要(digest)及交易字节(txBytes)。

事件与错误处理

事件详情与 EVM 兼容链一致,涵盖连接、交易状态变更等回调通知。错误代码系统也与 EVM 兼容链保持一致,便于开发者统一处理异常情况。

常见问题

如何选择 App 钱包与迷你钱包?

若 DApp 在 Telegram 内运行,用户可选择直接使用迷你钱包(无需跳转)或唤起外部 App 钱包(功能更全面)。非 Telegram 环境仅支持 App 钱包。

初始化时图标无法显示怎么办?

请检查图标 URL 是否为 PNG 或 ICO 格式(不支持 SVG),且建议尺寸为 180×180 像素。图标需可通过公网访问。

连接请求被拒绝可能的原因?

最常见原因是请求的链信息(namespaces 或 chains)不被钱包支持。请确认链 ID 填写正确,且用户钱包已添加该网络。

签名方法支持哪些类型?

Sui 链目前支持 'sui_signMessage' 及 'sui_signPersonalMessage' 两类签名方法,具体参数需符合 Sui 区块链规范。

交易广播后如何获取状态?

交易广播返回 digest 后,可通过 Sui 区块链浏览器查询交易状态。如需实时监听,建议使用 Sui 官方 SDK 结合 OKX 提供者对象进行状态订阅。

👉 获取更多高级开发策略

通过以上 UI 集成方案,开发者可快速实现 Sui 钱包连接、交易签名及链上交互功能,提升用户体验并降低开发门槛。