在 SDK 的基础上,我们也提供了 UI 界面。如果选择通过UI接入,若DApp运营在 Telegram内,则用户可以选择唤起移动端App钱包或者停留在Telegram并唤起欧易 Telegram Mini 钱包。
npm install @okxconnect/ui
连接钱包之前,需要先创建一个对象,用于后续连接钱包、发送交易等操作。
OKXUniversalConnectUI.init(dappMetaData, actionsConfiguration, uiPreferences, language, restoreConnection)
请求参数
${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
},
});
连接钱包去获取钱包地址,作为标识符和用于签名交易的必要参数,
await universalUi.openModal(connectParams: ConnectParams);
请求参数
返回值
<SessionTypes.Struct | undefined>
Record<string, Namespace>
; 成功连接的namespace 信息;
示例
var session = await universalUi.openModal({
namespaces: {
eip155: {
// 请按需组合需要的链id传入,多条链就传入多个
chains: ["eip155:1"],
defaultChain: "1"
}
},
optionalNamespaces: {
eip155: {
chains: ["eip155:43114"]
}
}
})
连接钱包获取钱包地址,并对数据进行签名;签名结果会在"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: {
eip155: {
// 请按需组合需要的链id传入,多条链就传入多个
chains: ["eip155:1"],
defaultChain: "1"
}
},
optionalNamespaces: {
eip155: {
chains: ["eip155:43114"]
}
},
sessionConfig: {
redirect: "tg://resolve"
}
},[{
method: "personal_sign",
chainId: "eip155:1",
params: [
"0x4d7920656d61696c206973206a6f686e40646f652e636f6d202d2031373237353937343537313336",
],
}])
获取当前是否有连接钱包;
返回值
示例
universalUi.connected();
向钱包发送消息的方法,支持签名,交易;
universalUi.request(requestArguments, chain, actionConfigurationRequest);
请求参数
<string, unknown>
| object | undefined; 请求的方法对应的参数;${string}://${string}
; Telegram Mini Wallet 钱包中,用户签署/拒绝请求时深层链接的返回策略,一般配置back,表示签名后关闭钱包,会自动展示出dapp;none 表示签名后不做处理;默认为back;${string}://${string}
; App 钱包中,用户签署或拒绝请求时深层链接的返回策略,如果是Telegram中的Mini App,可以配置tg://resolve,如果这里没有配置的话,会取init方法传递的 returnStrategy,默认为 ‘none’返回值
示例
let chain = 'eip155:1'
var data = {}
data = {
"method": "personal_sign",
"params": [
"0x506c65617365207369676e2074686973206d65737361676520746f20636f6e6669726d20796f7572206964656e746974792e",
"0x4B0897b0513FdBeEc7C469D9aF4fA6C0752aBea7"
]
}
var personalSignResult = await universalUi.request(data, chain,'all')
//personalSignResult: 0xe8d34297c33a61"
示例
universalUi.closeModal();
示例
const unsubscribe = universalUi.onModalStateChange((state)=>{
})
不需要监听的时候移除监听
unsubscribe()
获取当前是否有连接钱包,以及已连接的钱包的相关信息;
示例
universalUi.session;
支持修改主题,文字语言设置,也可以在初始化的时候添加这些配置;
示例
universalUi.uiOptions = {
language: 'zh_CN',
uiPreferences: {
theme: THEME.DARK
}
};
在连接多个网络的状况下,如果开发者没有明确指定当前操作所在网络,则通过默认网络进行交互。
'setDefaultChain(chain)'
示例
universalUi.setDefaultChain("eip155:1")
示例
universalUi.disconnect();
// 生成 universalLink
universalUi.on("display_uri", (uri) => {
console.log(uri);
});
// session 信息变更(例如添加自定义链)会触发该事件;
universalUi.on("session_update", (session) => {
console.log(JSON.stringify(session));
});
// 断开连接会触发该事件;
universalUi.on("session_delete", ({topic}) => {
console.log(topic);
});
// 连接并签名时,签名结果会触发该事件;
universalUi.on("connect_signResponse", (signResponse) => {
console.log(signResponse);
});