diff --git a/assets/Scripts/Main/Channel/SDKManager.ts b/assets/Scripts/Main/Channel/SDKManager.ts index 36012b4a..c2b1bb95 100644 --- a/assets/Scripts/Main/Channel/SDKManager.ts +++ b/assets/Scripts/Main/Channel/SDKManager.ts @@ -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 功能"); + } + /** --------------------------------------------------------- 平台基础 --------------------------------------------------------- */ // 登录 diff --git a/assets/Scripts/Main/Channel/ads/WxAdSDK.ts b/assets/Scripts/Main/Channel/ads/WxAdSDK.ts index 85136f2c..6315146f 100644 --- a/assets/Scripts/Main/Channel/ads/WxAdSDK.ts +++ b/assets/Scripts/Main/Channel/ads/WxAdSDK.ts @@ -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("主动拉起分享"); } } diff --git a/assets/Scripts/Main/Channel/core/ISignCap.ts b/assets/Scripts/Main/Channel/core/ISignCap.ts new file mode 100644 index 00000000..eb2dcb78 --- /dev/null +++ b/assets/Scripts/Main/Channel/core/ISignCap.ts @@ -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 }>; +} diff --git a/assets/Scripts/Main/Channel/core/ISignCap.ts.meta b/assets/Scripts/Main/Channel/core/ISignCap.ts.meta new file mode 100644 index 00000000..2cb17a1b --- /dev/null +++ b/assets/Scripts/Main/Channel/core/ISignCap.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "25e17c8e-1f72-4937-81cf-9ecbd2cb664d", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/Main/Channel/core/ITransactionCap.ts b/assets/Scripts/Main/Channel/core/ITransactionCap.ts new file mode 100644 index 00000000..3de565c6 --- /dev/null +++ b/assets/Scripts/Main/Channel/core/ITransactionCap.ts @@ -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 }>; +} diff --git a/assets/Scripts/Main/Channel/core/ITransactionCap.ts.meta b/assets/Scripts/Main/Channel/core/ITransactionCap.ts.meta new file mode 100644 index 00000000..71222f46 --- /dev/null +++ b/assets/Scripts/Main/Channel/core/ITransactionCap.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "930e2711-3254-4f6c-9e8f-be5a565ae0a4", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/Main/Channel/core/IWalletSDK.ts b/assets/Scripts/Main/Channel/core/IWalletSDK.ts index a4f85cc3..90a1295e 100644 --- a/assets/Scripts/Main/Channel/core/IWalletSDK.ts +++ b/assets/Scripts/Main/Channel/core/IWalletSDK.ts @@ -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; - - // - buildTransaction(payload: any): Promise; - - // - signTransaction(rawData: any): Promise; - - // - sendTransaction(signedData: any): Promise<{ hash: string }>; } diff --git a/assets/Scripts/Main/Channel/platform/WxPlatformSDK.ts b/assets/Scripts/Main/Channel/platform/WxPlatformSDK.ts index e7bb250d..ff07eeda 100644 --- a/assets/Scripts/Main/Channel/platform/WxPlatformSDK.ts +++ b/assets/Scripts/Main/Channel/platform/WxPlatformSDK.ts @@ -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" }); } diff --git a/assets/Scripts/Main/Channel/wallet/LuffaWalletSDK.ts b/assets/Scripts/Main/Channel/wallet/LuffaWalletSDK.ts index f3896022..b27fa4b9 100644 --- a/assets/Scripts/Main/Channel/wallet/LuffaWalletSDK.ts +++ b/assets/Scripts/Main/Channel/wallet/LuffaWalletSDK.ts @@ -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 { - 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 { - console.log("构建交易", payload); - return { raw: "rawTx" }; + // 签名交易 + async signTransaction(rawData: any): Promise<{ signedData: string }> { + logger.log("签名交易", rawData); + return { signedData: "0xsignedtx" }; } - async signTransaction(rawData: any): Promise { - 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" }; } }