钱包SDK
This commit is contained in:
@@ -9,6 +9,8 @@ import { WxPlatformSDK } from "./platform/WxPlatformSDK";
|
|||||||
import { WxAdSDK } from "./ads/WxAdSDK";
|
import { WxAdSDK } from "./ads/WxAdSDK";
|
||||||
import { LuffaWalletSDK } from "./wallet/LuffaWalletSDK";
|
import { LuffaWalletSDK } from "./wallet/LuffaWalletSDK";
|
||||||
import { UmaAnalyticsSDK } from "./analytics/UmaAnalyticsSDK";
|
import { UmaAnalyticsSDK } from "./analytics/UmaAnalyticsSDK";
|
||||||
|
import { ISignCap } from "./core/ISignCap";
|
||||||
|
import { ITransactionCap } from "./core/ITransactionCap";
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
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 {
|
public getWalletAddress(): string | null {
|
||||||
if (!this.walletSDK) return null;
|
if (!this.walletSDK) return null;
|
||||||
return this.walletSDK.getWalletAddress()
|
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 { IAdSDK } from "../core/IAdSDK";
|
||||||
|
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||||
|
|
||||||
export class WxAdSDK implements IAdSDK {
|
export class WxAdSDK implements IAdSDK {
|
||||||
init(cb?: Function): void {
|
init(cb?: Function): void {
|
||||||
console.log("微信广告初始化");
|
logger.log("微信广告初始化");
|
||||||
cb && cb();
|
cb && cb();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 展示激励视频广告
|
// 展示激励视频广告
|
||||||
showRewardVideo(cb: (ok: boolean) => void): void {
|
showRewardVideo(cb: (ok: boolean) => void): void {
|
||||||
console.log("展示微信激励广告");
|
logger.log("展示微信激励广告");
|
||||||
cb(true);
|
cb(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 展示插屏广告
|
// 展示插屏广告
|
||||||
showInterstitial(): void {
|
showInterstitial(): void {
|
||||||
console.log("展示微信插屏广告");
|
logger.log("展示微信插屏广告");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 展示 Banner 广告
|
// 展示 Banner 广告
|
||||||
showBanner(): void {
|
showBanner(): void {
|
||||||
console.log("展示微信Banner广告");
|
logger.log("展示微信Banner广告");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 隐藏 Banner 广告
|
// 隐藏 Banner 广告
|
||||||
hideBanner(): void {
|
hideBanner(): void {
|
||||||
console.log("隐藏微信Banner广告");
|
logger.log("隐藏微信Banner广告");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 主动拉起分享
|
// 主动拉起分享
|
||||||
showShare(): void {
|
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";
|
import { ISDK } from "./ISDK";
|
||||||
@@ -16,7 +17,7 @@ export interface IWalletSDK extends ISDK {
|
|||||||
* - address: 钱包地址(字符串)
|
* - address: 钱包地址(字符串)
|
||||||
* - publicKey?: 钱包公钥(部分钱包可能返回,用于后续签名验证)
|
* - 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)。
|
* 清理当前钱包的会话信息(如地址、公钥、缓存的 session)。
|
||||||
* 调用后 getWalletAddress() 应返回 null。
|
* 调用后 getWalletAddress() 应返回 null。
|
||||||
*/
|
*/
|
||||||
disconnect(): void;
|
disconnectWallet(): void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前钱包地址
|
* 获取当前钱包地址
|
||||||
@@ -33,16 +34,4 @@ export interface IWalletSDK extends ISDK {
|
|||||||
* 如果尚未连接,则返回 null。
|
* 如果尚未连接,则返回 null。
|
||||||
*/
|
*/
|
||||||
getWalletAddress(): string | 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 { IPlatformSDK } from "../core/IPlatformSDK";
|
||||||
|
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||||
|
|
||||||
export class WxPlatformSDK implements IPlatformSDK {
|
export class WxPlatformSDK implements IPlatformSDK {
|
||||||
init(cb?: Function): void {
|
init(cb?: Function): void {
|
||||||
console.log("微信平台初始化");
|
logger.log("微信平台初始化");
|
||||||
cb && cb();
|
cb && cb();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 登录
|
// 登录
|
||||||
login(cb?: Function): void {
|
login(cb?: Function): void {
|
||||||
console.log("调用微信登录");
|
logger.log("调用微信登录");
|
||||||
cb && cb({ code: "wx-code" });
|
cb && cb({ code: "wx-code" });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +1,49 @@
|
|||||||
import { IWalletSDK } from "../core/IWalletSDK";
|
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;
|
private address: string | null = null;
|
||||||
|
|
||||||
|
// 初始化
|
||||||
init(cb?: Function): void {
|
init(cb?: Function): void {
|
||||||
console.log("Luffa 钱包初始化");
|
logger.log("Luffa 钱包初始化");
|
||||||
cb && cb();
|
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"; // 模拟地址
|
this.address = "0x123456"; // 模拟地址
|
||||||
cb(this.address, "public-key");
|
cb(this.address, "public-key");
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(): void {
|
// 断开钱包连接
|
||||||
|
disconnectWallet(): void {
|
||||||
this.address = null;
|
this.address = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取当前钱包地址
|
||||||
getWalletAddress(): string | null {
|
getWalletAddress(): string | null {
|
||||||
return this.address;
|
return this.address;
|
||||||
}
|
}
|
||||||
|
|
||||||
async signMessage(message: string, nonce: number): Promise<any> {
|
// 签名消息
|
||||||
console.log("调用 Luffa 单签签名");
|
async signMessage(message: string, options?: any): Promise<{ signature: string; fullMessage?: string }> {
|
||||||
return { signature: "xxx", fullMessage: `${message}-${nonce}` };
|
logger.log("调用 Luffa 单签签名");
|
||||||
|
return { signature: "0xsignedmsg", fullMessage: message };
|
||||||
}
|
}
|
||||||
|
|
||||||
async buildTransaction(payload: any): Promise<any> {
|
// 签名交易
|
||||||
console.log("构建交易", payload);
|
async signTransaction(rawData: any): Promise<{ signedData: string }> {
|
||||||
return { raw: "rawTx" };
|
logger.log("签名交易", rawData);
|
||||||
|
return { signedData: "0xsignedtx" };
|
||||||
}
|
}
|
||||||
|
|
||||||
async signTransaction(rawData: any): Promise<any> {
|
// 发送交易(广播到链上)
|
||||||
console.log("签名交易", rawData);
|
async sendTransaction(signedData: string): Promise<{ hash: string }> {
|
||||||
return { signed: "signedTx" };
|
logger.log("发送交易", signedData);
|
||||||
}
|
return { hash: "0xhash" };
|
||||||
|
|
||||||
async sendTransaction(signed: any): Promise<{ hash: string }> {
|
|
||||||
console.log("发送交易", signed);
|
|
||||||
return { hash: "0xabcdef" };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user