@okxconnect/solana-provider v1.4.2
Solana
Solana 是一种高性能的区块链平台,致力于为去中心化应用和加密货币提供快速、安全和可扩展的解决方案。该平台采用了创新的共识算法——Proof of History (PoH),可以处理高达数万笔交易每秒 (TPS),同时保持了去中心化和安全性。总的来说,Solana 的目标是通过其独特的技术优势,实现区块链的大规模采用,服务于各种复杂的去中心化应用和全球金融系统。
Sonic是为在Solana上实现主权游戏经济而构建的首个原子SVM链。
安装及初始化
请确保更新OKX App到 6.90.1版本或以后版本,即可开始接入:
将 OKX Connect 集成到您的 DApp 中,可以使用 npm:
npm install @okxconnect/solana-provider
连接钱包之前,需要先创建一个对象,用于后续连接钱包、发送交易等操作。
OKXUniversalProvider.init({dappMetaData: {name, icon}})
请求参数
- dappMetaData - object
- name - string: 应用名称,不会作为唯一表示
- icon - string: 应用图标的 URL。必须是 PNG、ICO 等格式,不支持 SVG 图标。最好传递指向 180x180px PNG 图标的 url。
返回值
- OKXUniversalProvider
示例
import { OKXUniversalProvider } from "@okxconnect/universal-provider";
const okxUniversalProvider = await OKXUniversalProvider.init({
dappMetaData: {
name: "application name",
icon: "application icon url"
},
})
连接钱包
连接钱包去获取钱包地址,作为标识符和用于签名交易的必要参数。
okxUniversalProvider.connect(connectParams: ConnectParams);
请求参数
- connectParams - ConnectParams
- namespaces - namespace: string: ConnectNamespace ; 请求连接的必要信息,EVM系的key为"eip155",Solana系的key为"solana"
,如果请求的链中,有任何一个链钱包不支持的话,钱包会拒绝连接;
- chains: string[]; 链id信息,
- rpcMap?: chainId: string: string; rpc 信息,配置了rpc url才能请求链上rpc信息;
- defaultChain?: string; 默认链
- optionalNamespaces - namespace: string: ConnectNamespace; 请求连接的可选信息, EVM系的key为"eip155",,Solana系的key为"solana"
,如果对应的链信息钱包不支持,依然可以连接;
- chains: string[]; 链id信息,
- rpcMap?: chainId: string: string; rpc 信息;
- defaultChain?: string; 默认链
- chains: string[]; 链id信息,
- sessionConfig: object
- redirect: string 连接成功后的跳转参数,如果是Telegram中的Mini App,这里可以设置为Telegram的deeplink: "tg://resolve"
- namespaces - namespace: string: ConnectNamespace ; 请求连接的必要信息,EVM系的key为"eip155",Solana系的key为"solana"
,如果请求的链中,有任何一个链钱包不支持的话,钱包会拒绝连接;
返回值
- Promise
<SessionTypes.Struct | undefined>
- topic: string; 会话标识;
- namespaces:
Record<string, Namespace>
; 成功连接的namespace 信息;- chains: string[]; 连接的链信息;
- accounts: string[]; 连接的账户信息;
- methods: string[]; 当前namespace下,钱包支持的方法;
- rpcMap?: chainId: string: string; rpc 信息;
- defaultChain?: string; 当前会话的默认链
- sessionConfig?: SessionConfig
- dappInfo: object DApp 信息;
- name:string
- icon:string
- redirect?:string, 连接成功后的跳转参数;
- dappInfo: object DApp 信息;
示例
var session = await okxUniversalProvider.connect({
namespaces: {
solana: {
chains: ["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", //solana mainnet
"solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",//solana testnet
"sonic:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z"// sonic testnet
],
}
},
sessionConfig: {
redirect: "tg://resolve"
}
})
发送签名和交易
向钱包发送消息的方法,支持签名,交易,rpc请求。
首先创建一个OKXSolanaProvider对象,构造函数传入OKXUniversalProvider
import { OKXSolanaProvider } from "@okxconnect/solana-provider/OKXSolanaProvider";
let okxSolanaProvider = new OKXSolanaProvider(okxUniversalProvider)
签名
okxSolanaProvider.signMessage(message, chain);
请求参数
- message - string 需要签名的消息
- chain: string, 请求签名执行的链,建议传递此参数;连接多条链时为必传参数;连接一条链如果未传,则按照solan:mainnet或sonic:testnet处理;
返回值
- Promise - object
- publicKey:string 钱包地址
- signature:Uint8Array 签名结果;
签单笔交易
okxSolanaProvider.signTransaction(transaction, chain);
请求参数
- transaction - Transaction | VersionedTransaction 交易数据对象
- chain: string, 请求签名执行的链,建议传递此参数;连接多条链时为必传参数;连接一条链如果未传,则按照solan:mainnet或sonic:testnet处理;
返回值
- Promise - Transaction | VersionedTransaction 签名后的交易对象;
签多笔交易
okxSolanaProvider.signAllTransactions(transactions, chain);
请求参数
- transactions - Transaction | VersionedTransaction 交易数据对象数组
- chain: string, 请求签名执行的链,建议传递此参数;连接多条链时为必传参数;连接一条链如果未传,则按照solan:mainnet或sonic:testnet处理;
返回值
- Promise - Transaction | VersionedTransaction 签名后的交易对象数组;
签一笔交易并广播上链
okxSolanaProvider.signAndSendTransaction(transaction, chain);
请求参数
- transactions - Transaction | VersionedTransaction 交易数据对象
- chain: string, 请求签名执行的链,建议传递此参数;连接多条链时为必传参数;连接一条链如果未传,则按照solan:mainnet或sonic:testnet处理;
返回值
- Promise - string 交易hash;
获取钱包地址及pubKey
okxSolanaProvider.getAccount(chain);
请求参数
- chain: string, 获取钱包地址的链Id,不传则默认取第一个连接的svm地址
返回值
- Object
- address: string 钱包地址
- publicKey: PublicKey
示例
//在solana mainnet上签名一笔转账交易
let provider = new OKXSolanaProvider(okxUniversalProvider)
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")
断开钱包连接
断开已连接钱包,并删除当前会话,如果要切换连接钱包,请先断开当前钱包。
okxUniversalProvider.disconnect();
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago