钱包SDK

This commit is contained in:
chen wei bo
2025-09-27 14:04:13 +08:00
parent 6d1a705991
commit 19417f1089
9 changed files with 141 additions and 43 deletions
+47
View File
@@ -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 功能");
}
/** --------------------------------------------------------- 平台基础 --------------------------------------------------------- */
// 登录
+7 -6
View File
@@ -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": {}
}
+5 -16
View File
@@ -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" };
}
}