钱包SDK
This commit is contained in:
@@ -9,6 +9,8 @@ import { WxPlatformSDK } from "./platform/WxPlatformSDK";
|
||||
import { WxAdSDK } from "./ads/WxAdSDK";
|
||||
import { LuffaWalletSDK } from "./wallet/LuffaWalletSDK";
|
||||
import { UmaAnalyticsSDK } from "./analytics/UmaAnalyticsSDK";
|
||||
import { ISignCap } from "./core/ISignCap";
|
||||
import { ITransactionCap } from "./core/ITransactionCap";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -122,12 +124,57 @@ export class SDKManager {
|
||||
|
||||
/** --------------------------------------------------------- 钱包 --------------------------------------------------------- */
|
||||
|
||||
// 连接钱包
|
||||
public connectWallet(cb: (address: string, publicKey?: string) => void): void {
|
||||
if (!this.walletSDK) return;
|
||||
this.walletSDK.connectWallet(cb);
|
||||
}
|
||||
|
||||
// 断开钱包连接
|
||||
public disconnectWallet(): void {
|
||||
if (!this.walletSDK) return;
|
||||
this.walletSDK.disconnectWallet();
|
||||
}
|
||||
|
||||
// 获取当前钱包地址
|
||||
public getWalletAddress(): string | null {
|
||||
if (!this.walletSDK) return null;
|
||||
return this.walletSDK.getWalletAddress()
|
||||
}
|
||||
|
||||
// 签名消息
|
||||
public async signMessage(message: string, options?: any): Promise<{ signature: string; fullMessage?: string }> {
|
||||
if (!this.walletSDK) return;
|
||||
// 判断是否实现签名能力
|
||||
if ("signMessage" in this.walletSDK) {
|
||||
const signer = this.walletSDK as unknown as ISignCap;
|
||||
return signer.signMessage(message, options);
|
||||
}
|
||||
throw new Error("当前钱包 SDK 不支持 signMessage 功能");
|
||||
}
|
||||
|
||||
// 签名交易
|
||||
public async signTransaction(rawData: any): Promise<{ signedData: string }> {
|
||||
if (!this.walletSDK) return;
|
||||
// 判断是否实现交易能力
|
||||
if ("signTransaction" in this.walletSDK) {
|
||||
const txCap = this.walletSDK as unknown as ITransactionCap;
|
||||
return txCap.signTransaction(rawData);
|
||||
}
|
||||
throw new Error("当前钱包 SDK 不支持 signTransaction 功能");
|
||||
}
|
||||
|
||||
// 发送交易(广播到链上)
|
||||
public async sendTransaction(signedData: string): Promise<{ hash: string }> {
|
||||
if (!this.walletSDK) return;
|
||||
// 判断是否实现交易能力
|
||||
if ("sendTransaction" in this.walletSDK) {
|
||||
const txCap = this.walletSDK as unknown as ITransactionCap;
|
||||
return txCap.sendTransaction(signedData);
|
||||
}
|
||||
throw new Error("当前钱包 SDK 不支持 sendTransaction 功能");
|
||||
}
|
||||
|
||||
/** --------------------------------------------------------- 平台基础 --------------------------------------------------------- */
|
||||
|
||||
// 登录
|
||||
|
||||
@@ -1,34 +1,35 @@
|
||||
import { IAdSDK } from "../core/IAdSDK";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class WxAdSDK implements IAdSDK {
|
||||
init(cb?: Function): void {
|
||||
console.log("微信广告初始化");
|
||||
logger.log("微信广告初始化");
|
||||
cb && cb();
|
||||
}
|
||||
|
||||
// 展示激励视频广告
|
||||
showRewardVideo(cb: (ok: boolean) => void): void {
|
||||
console.log("展示微信激励广告");
|
||||
logger.log("展示微信激励广告");
|
||||
cb(true);
|
||||
}
|
||||
|
||||
// 展示插屏广告
|
||||
showInterstitial(): void {
|
||||
console.log("展示微信插屏广告");
|
||||
logger.log("展示微信插屏广告");
|
||||
}
|
||||
|
||||
// 展示 Banner 广告
|
||||
showBanner(): void {
|
||||
console.log("展示微信Banner广告");
|
||||
logger.log("展示微信Banner广告");
|
||||
}
|
||||
|
||||
// 隐藏 Banner 广告
|
||||
hideBanner(): void {
|
||||
console.log("隐藏微信Banner广告");
|
||||
logger.log("隐藏微信Banner广告");
|
||||
}
|
||||
|
||||
// 主动拉起分享
|
||||
showShare(): void {
|
||||
console.log("主动拉起分享");
|
||||
logger.log("主动拉起分享");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 签名能力接口
|
||||
* - 提供消息签名功能(常用于登录 / 身份认证)
|
||||
*/
|
||||
|
||||
export interface ISignCap {
|
||||
/**
|
||||
* 签名消息
|
||||
*
|
||||
* @param message 待签名的消息
|
||||
* @param options 可选参数(nonce、防重放字段、是否包含链ID等)
|
||||
* @returns 签名结果
|
||||
*/
|
||||
signMessage(message: string, options?: { nonce?: number; [key: string]: any }): Promise<{ signature: string; fullMessage?: string }>;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "25e17c8e-1f72-4937-81cf-9ecbd2cb664d",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* 交易能力接口
|
||||
* - 提供交易签名和广播的能力
|
||||
*/
|
||||
|
||||
export interface ITransactionCap {
|
||||
/**
|
||||
* 签名交易(由 DApp 构造交易对象)
|
||||
*
|
||||
* @param rawData 原始交易对象
|
||||
* @returns 已签名交易
|
||||
*/
|
||||
signTransaction(rawData: any): Promise<{ signedData: string }>;
|
||||
|
||||
/**
|
||||
* 发送交易(广播到链上)
|
||||
*
|
||||
* @param signedData 已签名交易
|
||||
* @returns 交易哈希
|
||||
*/
|
||||
sendTransaction(signedData: string): Promise<{ hash: string }>;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "930e2711-3254-4f6c-9e8f-be5a565ae0a4",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
/**
|
||||
* 定义钱包 SDK 的统一接口,用于封装不同平台的钱包接入逻辑(例如 Luffa、MetaMask、Phantom)。
|
||||
*
|
||||
* 钱包基础能力接口
|
||||
* - 只包含连接 / 断开 / 获取地址
|
||||
* - 更高级的签名、交易能力通过扩展接口实现
|
||||
*/
|
||||
|
||||
import { ISDK } from "./ISDK";
|
||||
@@ -16,7 +17,7 @@ export interface IWalletSDK extends ISDK {
|
||||
* - address: 钱包地址(字符串)
|
||||
* - publicKey?: 钱包公钥(部分钱包可能返回,用于后续签名验证)
|
||||
*/
|
||||
connect(cb: (address: string, publicKey?: string) => void): void;
|
||||
connectWallet(cb: (address: string, publicKey?: string) => void): void;
|
||||
|
||||
/**
|
||||
* 断开钱包连接
|
||||
@@ -24,7 +25,7 @@ export interface IWalletSDK extends ISDK {
|
||||
* 清理当前钱包的会话信息(如地址、公钥、缓存的 session)。
|
||||
* 调用后 getWalletAddress() 应返回 null。
|
||||
*/
|
||||
disconnect(): void;
|
||||
disconnectWallet(): void;
|
||||
|
||||
/**
|
||||
* 获取当前钱包地址
|
||||
@@ -33,16 +34,4 @@ export interface IWalletSDK extends ISDK {
|
||||
* 如果尚未连接,则返回 null。
|
||||
*/
|
||||
getWalletAddress(): string | null;
|
||||
|
||||
//
|
||||
signMessage(message: string, nonce: number, options?: any): Promise<any>;
|
||||
|
||||
//
|
||||
buildTransaction(payload: any): Promise<any>;
|
||||
|
||||
//
|
||||
signTransaction(rawData: any): Promise<any>;
|
||||
|
||||
//
|
||||
sendTransaction(signedData: any): Promise<{ hash: string }>;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import { IPlatformSDK } from "../core/IPlatformSDK";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class WxPlatformSDK implements IPlatformSDK {
|
||||
init(cb?: Function): void {
|
||||
console.log("微信平台初始化");
|
||||
logger.log("微信平台初始化");
|
||||
cb && cb();
|
||||
}
|
||||
|
||||
// 登录
|
||||
login(cb?: Function): void {
|
||||
console.log("调用微信登录");
|
||||
logger.log("调用微信登录");
|
||||
cb && cb({ code: "wx-code" });
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +1,49 @@
|
||||
import { IWalletSDK } from "../core/IWalletSDK";
|
||||
import { ISignCap } from "../core/ISignCap";
|
||||
import { ITransactionCap } from "../core/ITransactionCap";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class LuffaWalletSDK implements IWalletSDK {
|
||||
export class LuffaWalletSDK implements IWalletSDK, ISignCap, ITransactionCap {
|
||||
private address: string | null = null;
|
||||
|
||||
// 初始化
|
||||
init(cb?: Function): void {
|
||||
console.log("Luffa 钱包初始化");
|
||||
logger.log("Luffa 钱包初始化");
|
||||
cb && cb();
|
||||
}
|
||||
|
||||
connect(cb: (address: string, publicKey?: string) => void): void {
|
||||
console.log("连接 Luffa 钱包");
|
||||
// 连接钱包
|
||||
connectWallet(cb: (address: string, publicKey?: string) => void): void {
|
||||
logger.log("连接 Luffa 钱包");
|
||||
this.address = "0x123456"; // 模拟地址
|
||||
cb(this.address, "public-key");
|
||||
}
|
||||
|
||||
disconnect(): void {
|
||||
// 断开钱包连接
|
||||
disconnectWallet(): void {
|
||||
this.address = null;
|
||||
}
|
||||
|
||||
// 获取当前钱包地址
|
||||
getWalletAddress(): string | null {
|
||||
return this.address;
|
||||
}
|
||||
|
||||
async signMessage(message: string, nonce: number): Promise<any> {
|
||||
console.log("调用 Luffa 单签签名");
|
||||
return { signature: "xxx", fullMessage: `${message}-${nonce}` };
|
||||
// 签名消息
|
||||
async signMessage(message: string, options?: any): Promise<{ signature: string; fullMessage?: string }> {
|
||||
logger.log("调用 Luffa 单签签名");
|
||||
return { signature: "0xsignedmsg", fullMessage: message };
|
||||
}
|
||||
|
||||
async buildTransaction(payload: any): Promise<any> {
|
||||
console.log("构建交易", payload);
|
||||
return { raw: "rawTx" };
|
||||
// 签名交易
|
||||
async signTransaction(rawData: any): Promise<{ signedData: string }> {
|
||||
logger.log("签名交易", rawData);
|
||||
return { signedData: "0xsignedtx" };
|
||||
}
|
||||
|
||||
async signTransaction(rawData: any): Promise<any> {
|
||||
console.log("签名交易", rawData);
|
||||
return { signed: "signedTx" };
|
||||
}
|
||||
|
||||
async sendTransaction(signed: any): Promise<{ hash: string }> {
|
||||
console.log("发送交易", signed);
|
||||
return { hash: "0xabcdef" };
|
||||
// 发送交易(广播到链上)
|
||||
async sendTransaction(signedData: string): Promise<{ hash: string }> {
|
||||
logger.log("发送交易", signedData);
|
||||
return { hash: "0xhash" };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user