在 SDK 的基础上,我们也提供了 UI 界面。如果选择通过UI接入,若DApp运营在 Telegram内,则用户可以选择停留在Telegram并唤起移动端App钱包或者唤起欧易 Mini 钱包。
请确保更新OKX App到 6.90.1版本或以后版本,即可开始接入:
将 OKX Connect 集成到您的 DApp 中,可以使用 npm:
npm install @okxconnect/ui
npm install @okxconnect/solana-provider
连接钱包之前,需要先创建一个可以提供UI界面的对象,用于后续连接钱包、发送交易等操作。
OKXUniversalConnectUI.init(dappMetaData, actionsConfiguration, uiPreferences, language)
请求参数
${string}://${string}
; 针对app 钱包,指定当用户签署/拒绝请求时深层链接的返回策略,如果是在telegram中,可以配置tg://resolve${string}://${string}
; Telegram Mini Wallet 钱包中,用户签署/拒绝请求时深层链接的返回策略,一般配置back,表示签名后关闭钱包,会自动展示出dapp;none 表示签名后不做处理;默认为back;返回值
示例
import { OKXUniversalConnectUI } from "@okxconnect/ui";
const universalUi = await OKXUniversalConnectUI.init({
dappMetaData: {
icon: "https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png",
name: "OKX Connect Demo"
},
actionsConfiguration: {
returnStrategy: 'tg://resolve',
modals:"all",
tmaReturnUrl:'back'
},
language: "en_US",
uiPreferences: {
theme: THEME.LIGHT
},
});
连接钱包去获取钱包地址,作为标识符和用于签名交易的必要参数。
universalUi.openModal(connectParams: ConnectParams);
请求参数
返回值
<SessionTypes.Struct | undefined>
Record<string, Namespace>
; 成功连接的namespace 信息;
示例
var session = await universalUi.openModal({
namespaces: {
solana: {
chains: ["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", // solana mainnet
// "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",// solana testnet
// "sonic:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",// sonic testnet ;
],
}
}
})
连接钱包获取钱包地址,并对数据进行签名;签名结果会在"connect_signResponse"的event中回调;
await okxUniversalConnectUI.openModalAndSign(connectParams: ConnectParams, signRequest: RequestParams[]);
请求参数
<string, unknown>
| object | undefined; 请求的方法对应的参数;返回值
<SessionTypes.Struct | undefined>
Record<string, Namespace>
; 成功连接的namespace 信息;
name:string
icon:string
示例
// 先添加签名结果监听
universalUi.on("connect_signResponse", (signResponse) => {
console.log(signResponse);
});
var session = await universalUi.openModalAndSign({
namespaces: {
solana: {
chains: ["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", // solana mainnet
// "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",// solana testnet
// "sonic:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",// sonic testnet ;
],
}
},
sessionConfig: {
redirect: "tg://resolve"
}
},[
{
chainId: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
method: "solana_signMessage",
params: {
message: "Hello Solana",
}
}
])
获取当前是否有连接钱包;
返回值
示例
universalUi.connected();
向钱包发送消息的方法,支持签名,交易。
首先创建一个OKXSolanaProvider对象,构造函数传入OKXUniversalProviderUI,当 调用 OKXSolanaProvider 相关的方法时,actionsConfiguration.mode 的配置会按照init 时候传递的值处理;
import { OKXSolanaProvider } from "@okxconnect/solana-provider";
let okxSolanaProvider = new OKXSolanaProvider(universalUi)
okxSolanaProvider.signMessage(message, chain);
请求参数
返回值
签单笔交易
okxSolanaProvider.signTransaction(transaction, chain);
请求参数
返回值
okxSolanaProvider.signAllTransactions(transactions, chain);
请求参数
返回值
okxSolanaProvider.signAndSendTransaction(transaction, chain);
请求参数
返回值
okxSolanaProvider.getAccount(chain);
请求参数
返回值
示例
//在solana mainnet上签名一笔转账交易
let provider = new OKXSolanaProvider(universalUi)
const transaction = new Transaction({
feePayer: new PublicKey(provider.getAccount().address),
recentBlockhash: "xNWbUfdEPktMsZQHY6Zk5RJqamWFcTKasekjr7c3wFX",
}).add(SystemProgram.transfer(
{
fromPubkey: new PublicKey(provider.getAccount().address),
toPubkey: new PublicKey(provider.getAccount().address),
lamports: 1000,
}
))
let result = await provider.signTransaction(transaction, "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp")
断开已连接钱包,并删除当前会话,如果要切换连接钱包,请先断开当前钱包。
universalUi.disconnect();