关键词:Solana、SDK、Web3 钱包、DEX API、Mini 钱包、签名交易、SVM、兼容链
本文将以极轻量的语言,带你完成在应用或 Mini App 中 集成 Solana 兼容链、连接 Web3 钱包、调用 DEX API 的全流程。只需 30 分钟即可把「地址获取 → 交易签名 → 链上广播」串连成闭环体验。
Solana 与 Sonic:高性能链的“双引擎”
Solana 依托 Proof of History(PoH) 共识,单条链 TPS 高达数万笔,天生适合高频、低 Gas 场景。
而 Sonic 原子 SVM 链 在此基础上专为游戏经济而生,兼顾 “主权资产” + “Solana 同构” 两条优势,让交易量飙升的同时也得到极速确认。下文所有代码同时兼容 Solana 主网及 Sonic 网络,你可按需切换链 ID。
5 分钟环境准备
- OKX App ≥ 6.90.1(支持 Mini App)
- Node ≥ 18
- 建议包管理器使用
pnpm,但 npm 亦可
npm i @okxconnect/universal-provider导入时别名即可统一:
import OKXUniversalProvider from '@okxconnect/universal-provider';👉 直接复刻最简洁示例,免费获取可运行的 CodeSandbox 项目起点。
一站式接入流程
1. 初始化连接对象
你可以在页面加载完成时准备 Provider,后续所有交互都由此提交。
const provider = new OKXUniversalProvider({
dappMetaData: {
name: 'My Game/Social App',
icon: 'https://example.com/icon-180x180.png' // PNG 或 ICO
}
});| 字段 | 是否必填 | 说明 |
|---|---|---|
| name | ✅ | 应用名称,仅用于展示 |
| icon | ✅ | 180×180 PNG,用户授权窗口展示 |
2. 连接钱包
必须参数
namespaces:{ solana: { chains: ['solana:mainnet'], methods: [] } }- 如支持多链,可追加可选
optionalNamespaces。
const session = await provider.connect({
optionalNamespaces: {
solana: {
chains: ['solana:mainnet', 'sonic:testnet'], // 主网+测试网
methods: ['signTransaction', 'signMessage']
}
},
defaultChain: 'solana:mainnet',
sessionConfig: {
redirect: 'tg://resolve'
}
});连接成功后立即获得的 session.accounts 列表即所有已授权地址,稍后可直接使用。
3. 判断连接状态
const isConnected = provider.isConnected();4. 准备交易对象
交易构造需使用 @solana/web3.js:
import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js';
const tx = new Transaction();
tx.add(
SystemProgram.transfer({
fromPubkey: new PublicKey(sender),
toPubkey: new PublicKey(receiver),
lamports: 0.01 * 1e9
})
);
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
tx.feePayer = new PublicKey(payerPubkey);🔥 技巧:将复杂交易打包为 VersionedTransaction 可一次性通过新版 Versioned Transaction API 校验,避免老格式开启 skipPreflight 带来的反复广播。
签名与交易广播
常用 4 种调用
| 需求场景 | SDK 方法 | 额外说明 |
|---|---|---|
| 纯消息签名 | provider.signMessage(msg) | 登录动作最常见 |
| 单笔离线签名 | provider.signTransaction(tx) | 链下预付 Gas 场景 |
| 多笔批处理 | provider.signAllTransactions([tx1, tx2]) | 一键完成市场挂单 |
| 签名+广播一劳永逸 | provider.sendTransaction(tx) | DEX 立即撮合 |
合并示例:
// 1. 签名消息
const { signature } = await provider.signMessage('Hello Web3', 'solana:mainnet');
// 2. 发送并等确认
const txHash = await provider.sendTransaction(signedTx, 'solana:mainnet');
console.log('🎯 on-chain hash:', txHash);FAQ:开发者最想知道的 5 个问题
Q1. 如何同时支持 Solana 主网与基底测试网?
在连接时把两条链都加到 chains 中,再用 defaultChain 指定默认可减少用户弹窗。
Q2. Mini App 如何自动返回聊天窗口? sessionConfig.redirect 填 tg://resolve 即可,用户授权后浏览器自动拉起 Telegram。
Q3. 用户拒绝授权时怎样回退?
捕获 USER_REJECTS_ERROR 并提示「钱包未授权,功能受限」;仍提供浏览模式。
Q4. 广播上链后能直接拿到回执吗? sendTransaction 返回的是交易哈希,之后用 @solana/web3.js 的 confirmTransaction 监听锁仓 1.5 秒左右即可回执。
Q5. SDK 支持 Ledger 或 Keystone 硬件钱包吗?
只要用户通过 OKX 钱包连接并启用硬件签名,底层会自动走硬件链路,无须额外适配。
常见错误码速查
USER_REJECTS_ERROR:用户取消CHAIN_NOT_SUPPORTED:链 ID 写错METHOD_NOT_SUPPORTED:SDK 与当前钱包版本不对应
遇到异常可直接告知用户「请更新或切换钱包」。
延伸技巧:打造丝滑的 DEX UI
- 实时余额差值:轮询
connection.getBalance每 2 秒刷新,用户转账后立即看到更新。 - JWT 登录:将
signMessage返回的签名交给后端验证,减少反复授权,提升留存。
👋 轻松 10 行代码即可让你的社交小游戏变身高性能链上经济体,立即在线体验完整交互示例。](https://www.okx.com/join/8265080)
把所有片段拼起来,你就拥有了一套支持 Solana / Sonic 主网测试网、一次集成即多端通用的 Mini App 钱包连接模板。下一步,尽情加入你的 GameFi 逻辑、Swap 路由或 NFT 市场逻辑吧!