在 SDK 的基础上,我们也提供了 UI 界面。如果选择通过UI接入,若DApp运营在 Telegram内,则用户可以选择唤起移动端App钱包或者停留在Telegram并唤起欧易 Telegram Mini 钱包。
npm install @okxconnect/ui
连接钱包之前,需要先创建一个对象,用于后续连接钱包、发送交易等操作。
OKXUniversalConnectUI.init(dappMetaData, actionsConfiguration, uiPreferences, language, restoreConnection)
请求参数
${string}://${string}
; 针对app 钱包,指定当用户签署/拒绝请求时深层链接的返回策略,如果是在tg中,可以配置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 WalletConnect UI 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: {
chains: ["eip155:1", "eip155:xxx"],
rpcMap: {
1: "https://rpc" // set your own rpc url
},
defaultChain: "1"
}
},
optionalNamespaces: {
eip155: {
chains: ["eip155:43114"]
}
}
})
向钱包发送消息的方法,支持签名,交易,rpc请求;
universalUi.request(requestArguments, chain, actionConfigurationRequest);
请求参数
<string, unknown>
| object | undefined; 请求的方法对应的参数;${string}://${string}
; Telegram Mini Wallet 钱包中,用户签署/拒绝请求时深层链接的返回策略,一般配置back,表示签名后关闭钱包,会自动展示出dapp;none 表示签名后不做处理;默认为back;返回值
示例
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();
获取当前是否有连接钱包,以及已连接的钱包的相关信息;
示例
universalUi.session;
支持修改主题,文字语言设置,也可以在初始化的时候添加这些配置;
示例
universalUi.uiOptions = {
language: 'zh_CN',
uiPreferences: {
theme: THEME.DARK
}
};
在连接多个网络的状况下,如果开发者没有明确指定当前操作所在网络,则通过默认网络进行交互。
'setDefaultChain(chain, rpcUrl?)'
示例
universalUi.setDefaultChain("eip155:1", "rpcurl")
示例
universalUi.disconnect();
// 生成 universalLink
okxUniversalProvider.on("display_uri", (uri) => {
console.log(uri);
});
// session 信息变更(例如添加自定义链)会触发该事件;
okxUniversalProvider.on("session_update", (session) => {
console.log(JSON.stringify(session));
;
// 断开连接会触发该事件;
okxUniversalProvider.on("session_delete", ({topic}) => {
console.log(topic);
});