@enclave-hq/wallet-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/events.ts","../../src/core/errors.ts","../../src/adapters/base/wallet-adapter.ts","../../src/adapters/base/browser-wallet-adapter.ts","../../src/utils/address/universal-address.ts","../../src/utils/address/evm-utils.ts","../../src/utils/chain-info.ts","../../src/adapters/evm/metamask.ts","../../src/adapters/tron/tronlink.ts","../../src/adapters/evm/private-key.ts","../../src/core/adapter-registry.ts","../../src/core/wallet-manager.ts","../../src/react/WalletContext.tsx","../../src/react/hooks/useAccount.ts","../../src/react/hooks/useConnect.ts","../../src/react/hooks/useDisconnect.ts","../../src/react/hooks/useSignMessage.ts"],"names":["EventEmitter","isAddress","getAddress","createWalletClient","custom","createPublicClient","http","privateKeyToAccount","createContext","useState","useCallback","account","useEffect","React","useContext","error"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 事件系统\n */\n\nimport EventEmitter from 'eventemitter3'\n\n/**\n * 类型安全的事件发射器\n * 使用类型断言来提供类型安全的 API,同时避免与基类的类型冲突\n */\nexport class TypedEventEmitter<\n TEvents extends Record<string, (...args: any[]) => void>\n> {\n private emitter = new EventEmitter()\n\n on<K extends keyof TEvents>(\n event: K,\n handler: TEvents[K]\n ): this {\n this.emitter.on(event as string, handler as any)\n return this\n }\n\n once<K extends keyof TEvents>(\n event: K,\n handler: TEvents[K]\n ): this {\n this.emitter.once(event as string, handler as any)\n return this\n }\n\n off<K extends keyof TEvents>(\n event: K,\n handler: TEvents[K]\n ): this {\n this.emitter.off(event as string, handler as any)\n return this\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: Parameters<TEvents[K]>\n ): boolean {\n return this.emitter.emit(event as string, ...args)\n }\n\n removeAllListeners<K extends keyof TEvents>(event?: K): this {\n if (event !== undefined) {\n this.emitter.removeAllListeners(event as string)\n } else {\n this.emitter.removeAllListeners()\n }\n return this\n }\n}\n\n","/**\n * 错误类型定义\n */\n\n/**\n * 基础错误类\n */\nexport class WalletSDKError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: any\n ) {\n super(message)\n this.name = 'WalletSDKError'\n Object.setPrototypeOf(this, WalletSDKError.prototype)\n }\n}\n\n/**\n * 钱包未连接错误\n */\nexport class WalletNotConnectedError extends WalletSDKError {\n constructor(walletType?: string) {\n super(\n walletType\n ? `Wallet ${walletType} is not connected`\n : 'No wallet is connected',\n 'WALLET_NOT_CONNECTED',\n { walletType }\n )\n this.name = 'WalletNotConnectedError'\n }\n}\n\n/**\n * 钱包不可用错误\n */\nexport class WalletNotAvailableError extends WalletSDKError {\n constructor(walletType: string, downloadUrl?: string) {\n super(\n `Wallet ${walletType} is not available. Please install it first.`,\n 'WALLET_NOT_AVAILABLE',\n { walletType, downloadUrl }\n )\n this.name = 'WalletNotAvailableError'\n }\n}\n\n/**\n * 连接被拒绝错误\n */\nexport class ConnectionRejectedError extends WalletSDKError {\n constructor(walletType: string) {\n super(\n `Connection to ${walletType} was rejected by user`,\n 'CONNECTION_REJECTED',\n { walletType }\n )\n this.name = 'ConnectionRejectedError'\n }\n}\n\n/**\n * 链不支持错误\n */\nexport class ChainNotSupportedError extends WalletSDKError {\n constructor(chainId: number, walletType: string) {\n super(\n `Chain ${chainId} is not supported by ${walletType}`,\n 'CHAIN_NOT_SUPPORTED',\n { chainId, walletType }\n )\n this.name = 'ChainNotSupportedError'\n }\n}\n\n/**\n * 签名被拒绝错误\n */\nexport class SignatureRejectedError extends WalletSDKError {\n constructor(message?: string) {\n super(\n message || 'Signature was rejected by user',\n 'SIGNATURE_REJECTED'\n )\n this.name = 'SignatureRejectedError'\n }\n}\n\n/**\n * 交易失败错误\n */\nexport class TransactionFailedError extends WalletSDKError {\n constructor(txHash: string, reason?: string) {\n super(\n `Transaction ${txHash} failed${reason ? `: ${reason}` : ''}`,\n 'TRANSACTION_FAILED',\n { txHash, reason }\n )\n this.name = 'TransactionFailedError'\n }\n}\n\n/**\n * 方法不支持错误\n */\nexport class MethodNotSupportedError extends WalletSDKError {\n constructor(method: string, walletType: string) {\n super(\n `Method ${method} is not supported by ${walletType}`,\n 'METHOD_NOT_SUPPORTED',\n { method, walletType }\n )\n this.name = 'MethodNotSupportedError'\n }\n}\n\n/**\n * 配置错误\n */\nexport class ConfigurationError extends WalletSDKError {\n constructor(message: string, details?: any) {\n super(message, 'CONFIGURATION_ERROR', details)\n this.name = 'ConfigurationError'\n }\n}\n\n/**\n * 网络错误\n */\nexport class NetworkError extends WalletSDKError {\n constructor(message: string, details?: any) {\n super(message, 'NETWORK_ERROR', details)\n this.name = 'NetworkError'\n }\n}\n\n","/**\n * 钱包适配器基类\n */\n\nimport EventEmitter from 'eventemitter3'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n IWalletAdapter,\n ContractReadParams,\n ContractWriteParams,\n TransactionReceipt,\n} from '../../core/types'\nimport { WalletNotConnectedError, MethodNotSupportedError } from '../../core/errors'\n\n/**\n * 钱包适配器基类\n */\nexport abstract class WalletAdapter extends EventEmitter implements IWalletAdapter {\n // 元数据\n abstract readonly type: WalletType\n abstract readonly chainType: ChainType\n abstract readonly name: string\n readonly icon?: string\n\n // 状态\n state: WalletState = WalletState.DISCONNECTED\n currentAccount: Account | null = null\n\n // 连接管理\n abstract connect(chainId?: number): Promise<Account>\n abstract disconnect(): Promise<void>\n abstract isAvailable(): Promise<boolean>\n\n // 签名\n abstract signMessage(message: string): Promise<string>\n\n signTransaction?(_transaction: any): Promise<string> {\n throw new MethodNotSupportedError('signTransaction', this.type)\n }\n\n signTypedData?(_typedData: any): Promise<string> {\n throw new MethodNotSupportedError('signTypedData', this.type)\n }\n\n // 链切换(默认不支持)\n switchChain?(_chainId: number): Promise<void> {\n throw new MethodNotSupportedError('switchChain', this.type)\n }\n\n addChain?(_chainConfig: any): Promise<void> {\n throw new MethodNotSupportedError('addChain', this.type)\n }\n\n // 合约调用(默认不支持)\n async readContract<T = any>(_params: ContractReadParams): Promise<T> {\n throw new MethodNotSupportedError('readContract', this.type)\n }\n\n async writeContract(_params: ContractWriteParams): Promise<string> {\n throw new MethodNotSupportedError('writeContract', this.type)\n }\n\n async estimateGas(_params: ContractWriteParams): Promise<bigint> {\n throw new MethodNotSupportedError('estimateGas', this.type)\n }\n\n async waitForTransaction(_txHash: string, _confirmations?: number): Promise<TransactionReceipt> {\n throw new MethodNotSupportedError('waitForTransaction', this.type)\n }\n\n // Provider 访问\n abstract getProvider(): any\n\n getSigner?(): any {\n throw new MethodNotSupportedError('getSigner', this.type)\n }\n\n // 工具方法\n protected ensureConnected(): void {\n if (this.state !== WalletState.CONNECTED || !this.currentAccount) {\n throw new WalletNotConnectedError(this.type)\n }\n }\n\n protected setState(state: WalletState): void {\n this.state = state\n }\n\n protected setAccount(account: Account | null): void {\n this.currentAccount = account\n }\n\n protected emitAccountChanged(account: Account | null): void {\n this.emit('accountChanged', account)\n }\n\n protected emitChainChanged(chainId: number): void {\n this.emit('chainChanged', chainId)\n }\n\n protected emitDisconnected(): void {\n this.emit('disconnected')\n }\n\n protected emitError(error: Error): void {\n this.emit('error', error)\n }\n\n // EventEmitter 方法(从 EventEmitter3 继承)\n // removeAllListeners 已经由 EventEmitter 提供\n}\n\n","/**\n * 浏览器钱包适配器基类\n * 用于 MetaMask、TronLink 等浏览器插件钱包\n */\n\nimport { WalletAdapter } from './wallet-adapter'\nimport { WalletState } from '../../core/types'\nimport { WalletNotAvailableError } from '../../core/errors'\n\n/**\n * 浏览器钱包适配器基类\n */\nexport abstract class BrowserWalletAdapter extends WalletAdapter {\n /**\n * 获取浏览器中的钱包 provider\n */\n protected abstract getBrowserProvider(): any | undefined\n\n /**\n * 检查钱包是否可用\n */\n async isAvailable(): Promise<boolean> {\n if (typeof window === 'undefined') {\n return false\n }\n return this.getBrowserProvider() !== undefined\n }\n\n /**\n * 确保钱包已安装\n */\n protected async ensureAvailable(): Promise<void> {\n const isAvailable = await this.isAvailable()\n if (!isAvailable) {\n throw new WalletNotAvailableError(\n this.type,\n this.getDownloadUrl()\n )\n }\n }\n\n /**\n * 获取下载链接\n */\n protected abstract getDownloadUrl(): string\n\n /**\n * 设置事件监听\n */\n protected abstract setupEventListeners(): void\n\n /**\n * 移除事件监听\n */\n protected abstract removeEventListeners(): void\n\n /**\n * 断开连接时清理\n */\n async disconnect(): Promise<void> {\n this.removeEventListeners()\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitDisconnected()\n }\n}\n\n","/**\n * Universal Address 工具\n * 格式: \"chainId:address\"\n */\n\nimport type { UniversalAddress } from '../../core/types'\n\n/**\n * 创建 Universal Address\n */\nexport function createUniversalAddress(\n chainId: number,\n address: string\n): UniversalAddress {\n return `${chainId}:${address}`\n}\n\n/**\n * 解析 Universal Address\n */\nexport function parseUniversalAddress(universalAddress: UniversalAddress): {\n chainId: number\n address: string\n} | null {\n const parts = universalAddress.split(':')\n if (parts.length !== 2) {\n return null\n }\n \n const chainId = parseInt(parts[0], 10)\n if (isNaN(chainId)) {\n return null\n }\n \n return {\n chainId,\n address: parts[1],\n }\n}\n\n/**\n * 验证 Universal Address 格式\n */\nexport function isValidUniversalAddress(universalAddress: string): boolean {\n return parseUniversalAddress(universalAddress) !== null\n}\n\n/**\n * 从 Universal Address 提取链 ID\n */\nexport function getChainIdFromUniversalAddress(\n universalAddress: UniversalAddress\n): number | null {\n const parsed = parseUniversalAddress(universalAddress)\n return parsed ? parsed.chainId : null\n}\n\n/**\n * 从 Universal Address 提取地址\n */\nexport function getAddressFromUniversalAddress(\n universalAddress: UniversalAddress\n): string | null {\n const parsed = parseUniversalAddress(universalAddress)\n return parsed ? parsed.address : null\n}\n\n/**\n * 比较两个 Universal Address 是否相同\n */\nexport function compareUniversalAddresses(\n a: UniversalAddress,\n b: UniversalAddress\n): boolean {\n return a.toLowerCase() === b.toLowerCase()\n}\n\n","/**\n * EVM 地址工具\n */\n\nimport { getAddress, isAddress } from 'viem'\n\n/**\n * 验证 EVM 地址\n */\nexport function isValidEVMAddress(address: string): boolean {\n return isAddress(address)\n}\n\n/**\n * 格式化 EVM 地址(checksum)\n */\nexport function formatEVMAddress(address: string): string {\n if (!isAddress(address)) {\n throw new Error(`Invalid EVM address: ${address}`)\n }\n return getAddress(address)\n}\n\n/**\n * 比较两个 EVM 地址是否相同\n */\nexport function compareEVMAddresses(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return false\n }\n}\n\n/**\n * 缩短地址显示\n * 例如: 0x1234...5678\n */\nexport function shortenAddress(address: string, chars = 4): string {\n if (!isAddress(address)) {\n return address\n }\n const formatted = getAddress(address)\n return `${formatted.substring(0, chars + 2)}...${formatted.substring(42 - chars)}`\n}\n\n","/**\n * 链信息常量\n */\n\nimport { ChainType } from '../core/types'\n\n/**\n * 链信息接口\n */\nexport interface ChainInfo {\n id: number\n name: string\n chainType: ChainType\n nativeCurrency: {\n name: string\n symbol: string\n decimals: number\n }\n rpcUrls: string[]\n blockExplorerUrls?: string[]\n iconUrls?: string[]\n}\n\n/**\n * 预定义的链信息\n */\nexport const CHAIN_INFO: Record<number, ChainInfo> = {\n // EVM Mainnet\n 1: {\n id: 1,\n name: 'Ethereum Mainnet',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://eth.llamarpc.com'],\n blockExplorerUrls: ['https://etherscan.io'],\n },\n \n // EVM Testnets\n 11155111: {\n id: 11155111,\n name: 'Sepolia Testnet',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'Sepolia Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.sepolia.org'],\n blockExplorerUrls: ['https://sepolia.etherscan.io'],\n },\n \n // Binance Smart Chain\n 56: {\n id: 56,\n name: 'BNB Smart Chain',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18,\n },\n rpcUrls: ['https://bsc-dataseed.binance.org'],\n blockExplorerUrls: ['https://bscscan.com'],\n },\n \n 97: {\n id: 97,\n name: 'BNB Smart Chain Testnet',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18,\n },\n rpcUrls: ['https://data-seed-prebsc-1-s1.binance.org:8545'],\n blockExplorerUrls: ['https://testnet.bscscan.com'],\n },\n \n // Polygon\n 137: {\n id: 137,\n name: 'Polygon Mainnet',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'MATIC',\n symbol: 'MATIC',\n decimals: 18,\n },\n rpcUrls: ['https://polygon-rpc.com'],\n blockExplorerUrls: ['https://polygonscan.com'],\n },\n \n 80002: {\n id: 80002,\n name: 'Polygon Amoy Testnet',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'MATIC',\n symbol: 'MATIC',\n decimals: 18,\n },\n rpcUrls: ['https://rpc-amoy.polygon.technology'],\n blockExplorerUrls: ['https://www.oklink.com/amoy'],\n },\n \n // Tron\n 195: {\n id: 195,\n name: 'Tron Mainnet',\n chainType: ChainType.TRON,\n nativeCurrency: {\n name: 'TRX',\n symbol: 'TRX',\n decimals: 6,\n },\n rpcUrls: ['https://api.trongrid.io'],\n blockExplorerUrls: ['https://tronscan.org'],\n },\n \n // Arbitrum\n 42161: {\n id: 42161,\n name: 'Arbitrum One',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://arb1.arbitrum.io/rpc'],\n blockExplorerUrls: ['https://arbiscan.io'],\n },\n \n // Optimism\n 10: {\n id: 10,\n name: 'Optimism',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: ['https://mainnet.optimism.io'],\n blockExplorerUrls: ['https://optimistic.etherscan.io'],\n },\n \n // Avalanche\n 43114: {\n id: 43114,\n name: 'Avalanche C-Chain',\n chainType: ChainType.EVM,\n nativeCurrency: {\n name: 'AVAX',\n symbol: 'AVAX',\n decimals: 18,\n },\n rpcUrls: ['https://api.avax.network/ext/bc/C/rpc'],\n blockExplorerUrls: ['https://snowtrace.io'],\n },\n}\n\n/**\n * 获取链信息\n */\nexport function getChainInfo(chainId: number): ChainInfo | undefined {\n return CHAIN_INFO[chainId]\n}\n\n/**\n * 获取链类型\n */\nexport function getChainType(chainId: number): ChainType | undefined {\n return CHAIN_INFO[chainId]?.chainType\n}\n\n/**\n * 判断是否为 EVM 链\n */\nexport function isEVMChain(chainId: number): boolean {\n return getChainType(chainId) === ChainType.EVM\n}\n\n/**\n * 判断是否为 Tron 链\n */\nexport function isTronChain(chainId: number): boolean {\n return getChainType(chainId) === ChainType.TRON\n}\n\n","/**\n * MetaMask 适配器\n */\n\nimport { createWalletClient, createPublicClient, custom, http, type WalletClient, type PublicClient } from 'viem'\nimport { BrowserWalletAdapter } from '../base/browser-wallet-adapter'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n AddChainParams,\n ContractReadParams,\n ContractWriteParams,\n TransactionReceipt,\n} from '../../core/types'\nimport { createUniversalAddress } from '../../utils/address/universal-address'\nimport { formatEVMAddress } from '../../utils/address/evm-utils'\nimport { ConnectionRejectedError, SignatureRejectedError, TransactionFailedError } from '../../core/errors'\nimport { getChainInfo } from '../../utils/chain-info'\n\n/**\n * MetaMask 适配器\n */\nexport class MetaMaskAdapter extends BrowserWalletAdapter {\n readonly type = WalletType.METAMASK\n readonly chainType = ChainType.EVM\n readonly name = 'MetaMask'\n readonly icon = 'https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Fox.svg'\n\n private walletClient: WalletClient | null = null\n private publicClient: PublicClient | null = null\n\n /**\n * 连接钱包\n */\n async connect(chainId?: number): Promise<Account> {\n await this.ensureAvailable()\n\n try {\n this.setState(WalletState.CONNECTING)\n\n const provider = this.getBrowserProvider()\n\n // 请求账户\n const accounts = await provider.request({\n method: 'eth_requestAccounts',\n })\n\n if (!accounts || accounts.length === 0) {\n throw new ConnectionRejectedError(this.type)\n }\n\n // 获取当前链 ID\n const currentChainId = await provider.request({\n method: 'eth_chainId',\n })\n const parsedChainId = parseInt(currentChainId, 16)\n\n // 如果指定了链 ID 且不匹配,尝试切换\n if (chainId && chainId !== parsedChainId) {\n await this.switchChain(chainId)\n }\n\n // 创建客户端\n this.walletClient = createWalletClient({\n account: accounts[0] as `0x${string}`,\n transport: custom(provider),\n })\n\n const finalChainId = chainId || parsedChainId\n\n this.publicClient = createPublicClient({\n chain: this.getViemChain(finalChainId) as any,\n transport: http(),\n }) as any\n\n // 创建账户信息\n const address = formatEVMAddress(accounts[0])\n const account: Account = {\n universalAddress: createUniversalAddress(finalChainId, address),\n nativeAddress: address,\n chainId: finalChainId,\n chainType: ChainType.EVM,\n isActive: true,\n }\n\n this.setState(WalletState.CONNECTED)\n this.setAccount(account)\n this.setupEventListeners()\n\n return account\n } catch (error: any) {\n this.setState(WalletState.ERROR)\n this.setAccount(null)\n\n if (error.code === 4001) {\n throw new ConnectionRejectedError(this.type)\n }\n\n throw error\n }\n }\n\n /**\n * 签名消息\n */\n async signMessage(message: string): Promise<string> {\n this.ensureConnected()\n\n try {\n const provider = this.getBrowserProvider()\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, this.currentAccount!.nativeAddress],\n })\n\n return signature\n } catch (error: any) {\n if (error.code === 4001) {\n throw new SignatureRejectedError()\n }\n throw error\n }\n }\n\n /**\n * 签名 TypedData (EIP-712)\n */\n async signTypedData(typedData: any): Promise<string> {\n this.ensureConnected()\n\n try {\n const provider = this.getBrowserProvider()\n const signature = await provider.request({\n method: 'eth_signTypedData_v4',\n params: [this.currentAccount!.nativeAddress, JSON.stringify(typedData)],\n })\n\n return signature\n } catch (error: any) {\n if (error.code === 4001) {\n throw new SignatureRejectedError()\n }\n throw error\n }\n }\n\n /**\n * 切换链\n */\n async switchChain(chainId: number): Promise<void> {\n this.ensureConnected()\n\n const provider = this.getBrowserProvider()\n\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }],\n })\n\n // 更新账户信息\n if (this.currentAccount) {\n const updatedAccount: Account = {\n ...this.currentAccount,\n chainId,\n universalAddress: createUniversalAddress(chainId, this.currentAccount.nativeAddress),\n }\n this.setAccount(updatedAccount)\n this.emitChainChanged(chainId)\n }\n } catch (error: any) {\n // 链不存在,尝试添加\n if (error.code === 4902) {\n const chainInfo = getChainInfo(chainId)\n if (chainInfo) {\n await this.addChain({\n chainId: chainInfo.id,\n chainName: chainInfo.name,\n nativeCurrency: chainInfo.nativeCurrency,\n rpcUrls: chainInfo.rpcUrls,\n blockExplorerUrls: chainInfo.blockExplorerUrls,\n })\n // 添加成功后再次尝试切换\n await this.switchChain(chainId)\n } else {\n throw new Error(`Chain ${chainId} not supported`)\n }\n } else {\n throw error\n }\n }\n }\n\n /**\n * 添加链\n */\n async addChain(chainConfig: AddChainParams): Promise<void> {\n const provider = this.getBrowserProvider()\n\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [{\n chainId: `0x${chainConfig.chainId.toString(16)}`,\n chainName: chainConfig.chainName,\n nativeCurrency: chainConfig.nativeCurrency,\n rpcUrls: chainConfig.rpcUrls,\n blockExplorerUrls: chainConfig.blockExplorerUrls,\n }],\n })\n }\n\n /**\n * 读取合约\n */\n async readContract<T = any>(params: ContractReadParams): Promise<T> {\n if (!this.publicClient) {\n throw new Error('Public client not initialized')\n }\n\n const result = await this.publicClient.readContract({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n } as any)\n\n return result as T\n }\n\n /**\n * 写入合约\n */\n async writeContract(params: ContractWriteParams): Promise<string> {\n this.ensureConnected()\n\n if (!this.walletClient) {\n throw new Error('Wallet client not initialized')\n }\n\n try {\n const txHash = await this.walletClient.writeContract({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n value: params.value ? BigInt(params.value) : undefined,\n gas: params.gas ? BigInt(params.gas) : undefined,\n gasPrice: params.gasPrice ? BigInt(params.gasPrice) : undefined,\n } as any)\n\n return txHash\n } catch (error: any) {\n if (error.code === 4001) {\n throw new SignatureRejectedError('Transaction was rejected by user')\n }\n throw error\n }\n }\n\n /**\n * 估算 gas\n */\n async estimateGas(params: ContractWriteParams): Promise<bigint> {\n if (!this.publicClient) {\n throw new Error('Public client not initialized')\n }\n\n const gas = await this.publicClient.estimateContractGas({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n value: params.value ? BigInt(params.value) : undefined,\n account: this.currentAccount!.nativeAddress as `0x${string}`,\n } as any)\n\n return gas\n }\n\n /**\n * 等待交易确认\n */\n async waitForTransaction(txHash: string, confirmations: number = 1): Promise<TransactionReceipt> {\n if (!this.publicClient) {\n throw new Error('Public client not initialized')\n }\n\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash as `0x${string}`,\n confirmations,\n })\n\n if (receipt.status === 'reverted') {\n throw new TransactionFailedError(txHash, 'Transaction reverted')\n }\n\n return {\n transactionHash: receipt.transactionHash,\n blockNumber: Number(receipt.blockNumber),\n blockHash: receipt.blockHash,\n from: receipt.from,\n to: receipt.to || undefined,\n status: receipt.status === 'success' ? 'success' : 'failed',\n gasUsed: receipt.gasUsed.toString(),\n effectiveGasPrice: receipt.effectiveGasPrice?.toString(),\n logs: receipt.logs,\n }\n }\n\n /**\n * 获取 Provider\n */\n getProvider(): any {\n return this.getBrowserProvider()\n }\n\n /**\n * 获取 Signer\n */\n getSigner(): WalletClient | null {\n return this.walletClient\n }\n\n /**\n * 获取浏览器中的 MetaMask provider\n */\n protected getBrowserProvider(): any | undefined {\n if (typeof window === 'undefined') {\n return undefined\n }\n const w = window as any\n return w.ethereum && w.ethereum.isMetaMask ? w.ethereum : undefined\n }\n\n /**\n * 获取下载链接\n */\n protected getDownloadUrl(): string {\n return 'https://metamask.io/download/'\n }\n\n /**\n * 设置事件监听\n */\n protected setupEventListeners(): void {\n const provider = this.getBrowserProvider()\n if (!provider) return\n\n provider.on('accountsChanged', this.handleAccountsChanged)\n provider.on('chainChanged', this.handleChainChanged)\n provider.on('disconnect', this.handleDisconnect)\n }\n\n /**\n * 移除事件监听\n */\n protected removeEventListeners(): void {\n const provider = this.getBrowserProvider()\n if (!provider) return\n\n provider.removeListener('accountsChanged', this.handleAccountsChanged)\n provider.removeListener('chainChanged', this.handleChainChanged)\n provider.removeListener('disconnect', this.handleDisconnect)\n }\n\n /**\n * 处理账户变化\n */\n private handleAccountsChanged = (accounts: string[]) => {\n if (accounts.length === 0) {\n // 用户断开连接或锁定钱包\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitAccountChanged(null)\n } else {\n // 用户切换账户\n const address = formatEVMAddress(accounts[0])\n const account: Account = {\n universalAddress: createUniversalAddress(this.currentAccount!.chainId, address),\n nativeAddress: address,\n chainId: this.currentAccount!.chainId,\n chainType: ChainType.EVM,\n isActive: true,\n }\n this.setAccount(account)\n this.emitAccountChanged(account)\n }\n }\n\n /**\n * 处理链变化\n */\n private handleChainChanged = (chainIdHex: string) => {\n const chainId = parseInt(chainIdHex, 16)\n\n if (this.currentAccount) {\n const account: Account = {\n ...this.currentAccount,\n chainId,\n universalAddress: createUniversalAddress(chainId, this.currentAccount.nativeAddress),\n }\n this.setAccount(account)\n this.emitChainChanged(chainId)\n }\n }\n\n /**\n * 处理断开连接\n */\n private handleDisconnect = () => {\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitDisconnected()\n }\n\n /**\n * 获取 viem chain 配置(简化版)\n */\n private getViemChain(chainId: number): any {\n const chainInfo = getChainInfo(chainId)\n if (chainInfo) {\n return {\n id: chainId,\n name: chainInfo.name,\n network: chainInfo.name.toLowerCase().replace(/\\s+/g, '-'),\n nativeCurrency: chainInfo.nativeCurrency,\n rpcUrls: {\n default: { http: chainInfo.rpcUrls },\n public: { http: chainInfo.rpcUrls },\n },\n blockExplorers: chainInfo.blockExplorerUrls ? {\n default: { name: 'Explorer', url: chainInfo.blockExplorerUrls[0] },\n } : undefined,\n }\n }\n\n // 默认配置\n return {\n id: chainId,\n name: `Chain ${chainId}`,\n network: `chain-${chainId}`,\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: {\n default: { http: [] },\n public: { http: [] },\n },\n }\n }\n}\n\n","/**\n * TronLink 适配器\n */\n\nimport { BrowserWalletAdapter } from '../base/browser-wallet-adapter'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n} from '../../core/types'\nimport { createUniversalAddress } from '../../utils/address/universal-address'\nimport { ConnectionRejectedError, SignatureRejectedError } from '../../core/errors'\n\n/**\n * TronLink 适配器\n */\nexport class TronLinkAdapter extends BrowserWalletAdapter {\n readonly type = WalletType.TRONLINK\n readonly chainType = ChainType.TRON\n readonly name = 'TronLink'\n readonly icon = 'https://www.tronlink.org/static/logoIcon.svg'\n\n // Tron 主网链 ID\n private static readonly TRON_MAINNET_CHAIN_ID = 195\n\n /**\n * 连接钱包\n */\n async connect(chainId?: number): Promise<Account> {\n await this.ensureAvailable()\n\n try {\n this.setState(WalletState.CONNECTING)\n\n const tronWeb = this.getTronWeb()\n\n // 请求连接\n const result = await tronWeb.request({\n method: 'tron_requestAccounts',\n })\n\n if (!result || !result.code || result.code !== 200) {\n throw new ConnectionRejectedError(this.type)\n }\n\n // 获取当前地址\n const address = tronWeb.defaultAddress?.base58\n if (!address) {\n throw new Error('Failed to get Tron address')\n }\n\n // Tron 主网的链 ID\n const tronChainId = chainId || TronLinkAdapter.TRON_MAINNET_CHAIN_ID\n\n // 创建账户信息\n const account: Account = {\n universalAddress: createUniversalAddress(tronChainId, address),\n nativeAddress: address,\n chainId: tronChainId,\n chainType: ChainType.TRON,\n isActive: true,\n }\n\n this.setState(WalletState.CONNECTED)\n this.setAccount(account)\n this.setupEventListeners()\n\n return account\n } catch (error: any) {\n this.setState(WalletState.ERROR)\n this.setAccount(null)\n\n if (error.code === 4001 || error.message?.includes('User rejected')) {\n throw new ConnectionRejectedError(this.type)\n }\n\n throw error\n }\n }\n\n /**\n * 签名消息\n */\n async signMessage(message: string): Promise<string> {\n this.ensureConnected()\n\n try {\n const tronWeb = this.getTronWeb()\n\n // TronLink 使用 tronWeb.trx.sign 签名消息\n const signature = await tronWeb.trx.sign(message)\n\n return signature\n } catch (error: any) {\n if (error.message?.includes('User rejected') || error.message?.includes('Confirmation declined')) {\n throw new SignatureRejectedError()\n }\n throw error\n }\n }\n\n /**\n * 获取 Provider\n */\n getProvider(): any {\n return this.getTronWeb()\n }\n\n /**\n * 获取浏览器中的 TronWeb\n */\n protected getBrowserProvider(): any | undefined {\n if (typeof window === 'undefined') {\n return undefined\n }\n const w = window as any\n return w.tronWeb || w.tronLink?.tronWeb\n }\n\n /**\n * 获取 TronWeb 实例\n */\n private getTronWeb(): any {\n const provider = this.getBrowserProvider()\n if (!provider) {\n throw new Error('TronWeb not found')\n }\n return provider\n }\n\n /**\n * 获取下载链接\n */\n protected getDownloadUrl(): string {\n return 'https://www.tronlink.org/'\n }\n\n /**\n * 设置事件监听\n */\n protected setupEventListeners(): void {\n // TronLink 事件监听\n if (typeof window === 'undefined') return\n\n const w = window as any\n \n // 监听账户变化\n if (w.tronLink) {\n w.tronLink.on('accountsChanged', this.handleAccountsChanged)\n w.tronLink.on('disconnect', this.handleDisconnect)\n }\n }\n\n /**\n * 移除事件监听\n */\n protected removeEventListeners(): void {\n if (typeof window === 'undefined') return\n\n const w = window as any\n\n if (w.tronLink) {\n w.tronLink.off('accountsChanged', this.handleAccountsChanged)\n w.tronLink.off('disconnect', this.handleDisconnect)\n }\n }\n\n /**\n * 处理账户变化\n */\n private handleAccountsChanged = (data: any) => {\n if (!data || !data.address) {\n // 用户断开连接\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitAccountChanged(null)\n } else {\n // 用户切换账户\n const address = data.address.base58 || data.address\n const account: Account = {\n universalAddress: createUniversalAddress(this.currentAccount!.chainId, address),\n nativeAddress: address,\n chainId: this.currentAccount!.chainId,\n chainType: ChainType.TRON,\n isActive: true,\n }\n this.setAccount(account)\n this.emitAccountChanged(account)\n }\n }\n\n /**\n * 处理断开连接\n */\n private handleDisconnect = () => {\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitDisconnected()\n }\n}\n\n","/**\n * EVM 私钥适配器\n * 用于开发和测试,不推荐在生产环境中使用\n */\n\nimport { createWalletClient, createPublicClient, http, type WalletClient, type PublicClient } from 'viem'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport { WalletAdapter } from '../base/wallet-adapter'\nimport {\n WalletType,\n ChainType,\n WalletState,\n Account,\n ContractReadParams,\n ContractWriteParams,\n TransactionReceipt,\n} from '../../core/types'\nimport { createUniversalAddress } from '../../utils/address/universal-address'\nimport { formatEVMAddress } from '../../utils/address/evm-utils'\nimport { TransactionFailedError } from '../../core/errors'\nimport { getChainInfo } from '../../utils/chain-info'\n\n/**\n * EVM 私钥适配器\n */\nexport class EVMPrivateKeyAdapter extends WalletAdapter {\n readonly type = WalletType.PRIVATE_KEY\n readonly chainType = ChainType.EVM\n readonly name = 'Private Key (EVM)'\n\n private privateKey: string | null = null\n private walletClient: WalletClient | null = null\n private publicClient: PublicClient | null = null\n\n /**\n * 连接(导入私钥)\n */\n async connect(chainId: number = 1): Promise<Account> {\n if (!this.privateKey) {\n throw new Error('Private key not set. Call setPrivateKey() first.')\n }\n\n try {\n this.setState(WalletState.CONNECTING)\n\n // 从私钥创建账户\n const account = privateKeyToAccount(this.privateKey as `0x${string}`)\n\n // 创建客户端\n this.walletClient = createWalletClient({\n account,\n chain: this.getViemChain(chainId),\n transport: http(),\n })\n\n this.publicClient = createPublicClient({\n chain: this.getViemChain(chainId) as any,\n transport: http(),\n }) as any\n\n // 创建账户信息\n const address = formatEVMAddress(account.address)\n const accountInfo: Account = {\n universalAddress: createUniversalAddress(chainId, address),\n nativeAddress: address,\n chainId,\n chainType: ChainType.EVM,\n isActive: true,\n }\n\n this.setState(WalletState.CONNECTED)\n this.setAccount(accountInfo)\n\n return accountInfo\n } catch (error) {\n this.setState(WalletState.ERROR)\n this.setAccount(null)\n throw error\n }\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.privateKey = null\n this.walletClient = null\n this.publicClient = null\n this.setState(WalletState.DISCONNECTED)\n this.setAccount(null)\n this.emitDisconnected()\n }\n\n /**\n * 检查是否可用(私钥钱包总是可用)\n */\n async isAvailable(): Promise<boolean> {\n return true\n }\n\n /**\n * 设置私钥\n */\n setPrivateKey(privateKey: string): void {\n // 确保私钥有 0x 前缀\n this.privateKey = privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`\n }\n\n /**\n * 签名消息\n */\n async signMessage(message: string): Promise<string> {\n this.ensureConnected()\n\n if (!this.walletClient || !this.walletClient.account) {\n throw new Error('Wallet client not initialized')\n }\n\n const signature = await this.walletClient.signMessage({\n message,\n account: this.walletClient.account,\n })\n\n return signature\n }\n\n /**\n * 签名 TypedData\n */\n async signTypedData(typedData: any): Promise<string> {\n this.ensureConnected()\n\n if (!this.walletClient || !this.walletClient.account) {\n throw new Error('Wallet client not initialized')\n }\n\n const signature = await this.walletClient.signTypedData({\n ...typedData,\n account: this.walletClient.account,\n })\n\n return signature\n }\n\n /**\n * 切换链\n */\n async switchChain(chainId: number): Promise<void> {\n this.ensureConnected()\n\n // 重新创建客户端\n const account = this.walletClient!.account!\n\n this.walletClient = createWalletClient({\n account,\n chain: this.getViemChain(chainId),\n transport: http(),\n })\n\n this.publicClient = createPublicClient({\n chain: this.getViemChain(chainId) as any,\n transport: http(),\n }) as any\n\n // 更新账户信息\n const updatedAccount: Account = {\n ...this.currentAccount!,\n chainId,\n universalAddress: createUniversalAddress(chainId, this.currentAccount!.nativeAddress),\n }\n this.setAccount(updatedAccount)\n this.emitChainChanged(chainId)\n }\n\n /**\n * 读取合约\n */\n async readContract<T = any>(params: ContractReadParams): Promise<T> {\n if (!this.publicClient) {\n throw new Error('Public client not initialized')\n }\n\n const result = await this.publicClient.readContract({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n } as any)\n\n return result as T\n }\n\n /**\n * 写入合约\n */\n async writeContract(params: ContractWriteParams): Promise<string> {\n this.ensureConnected()\n\n if (!this.walletClient) {\n throw new Error('Wallet client not initialized')\n }\n\n const txHash = await this.walletClient.writeContract({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n value: params.value ? BigInt(params.value) : undefined,\n gas: params.gas ? BigInt(params.gas) : undefined,\n gasPrice: params.gasPrice ? BigInt(params.gasPrice) : undefined,\n } as any)\n\n return txHash\n }\n\n /**\n * 估算 gas\n */\n async estimateGas(params: ContractWriteParams): Promise<bigint> {\n if (!this.publicClient || !this.currentAccount) {\n throw new Error('Client not initialized')\n }\n\n const gas = await this.publicClient.estimateContractGas({\n address: params.address as `0x${string}`,\n abi: params.abi,\n functionName: params.functionName,\n ...(params.args ? { args: params.args as readonly any[] } : {}),\n value: params.value ? BigInt(params.value) : undefined,\n account: this.currentAccount.nativeAddress as `0x${string}`,\n } as any)\n\n return gas\n }\n\n /**\n * 等待交易确认\n */\n async waitForTransaction(txHash: string, confirmations: number = 1): Promise<TransactionReceipt> {\n if (!this.publicClient) {\n throw new Error('Public client not initialized')\n }\n\n const receipt = await this.publicClient.waitForTransactionReceipt({\n hash: txHash as `0x${string}`,\n confirmations,\n })\n\n if (receipt.status === 'reverted') {\n throw new TransactionFailedError(txHash, 'Transaction reverted')\n }\n\n return {\n transactionHash: receipt.transactionHash,\n blockNumber: Number(receipt.blockNumber),\n blockHash: receipt.blockHash,\n from: receipt.from,\n to: receipt.to || undefined,\n status: receipt.status === 'success' ? 'success' : 'failed',\n gasUsed: receipt.gasUsed.toString(),\n effectiveGasPrice: receipt.effectiveGasPrice?.toString(),\n logs: receipt.logs,\n }\n }\n\n /**\n * 获取 Provider\n */\n getProvider(): any {\n return this.publicClient\n }\n\n /**\n * 获取 Signer\n */\n getSigner(): WalletClient | null {\n return this.walletClient\n }\n\n /**\n * 获取 viem chain 配置\n */\n private getViemChain(chainId: number): any {\n const chainInfo = getChainInfo(chainId)\n if (chainInfo) {\n return {\n id: chainId,\n name: chainInfo.name,\n network: chainInfo.name.toLowerCase().replace(/\\s+/g, '-'),\n nativeCurrency: chainInfo.nativeCurrency,\n rpcUrls: {\n default: { http: chainInfo.rpcUrls },\n public: { http: chainInfo.rpcUrls },\n },\n blockExplorers: chainInfo.blockExplorerUrls ? {\n default: { name: 'Explorer', url: chainInfo.blockExplorerUrls[0] },\n } : undefined,\n }\n }\n\n return {\n id: chainId,\n name: `Chain ${chainId}`,\n network: `chain-${chainId}`,\n nativeCurrency: {\n name: 'ETH',\n symbol: 'ETH',\n decimals: 18,\n },\n rpcUrls: {\n default: { http: [] },\n public: { http: [] },\n },\n }\n }\n}\n\n","/**\n * 适配器注册表\n */\n\nimport { IWalletAdapter, WalletType, ChainType } from './types'\nimport { MetaMaskAdapter } from '../adapters/evm/metamask'\nimport { TronLinkAdapter } from '../adapters/tron/tronlink'\nimport { EVMPrivateKeyAdapter } from '../adapters/evm/private-key'\n\n/**\n * 适配器注册表\n */\nexport class AdapterRegistry {\n private adapters: Map<WalletType, () => IWalletAdapter> = new Map()\n\n constructor() {\n this.registerDefaultAdapters()\n }\n\n /**\n * 注册默认适配器\n */\n private registerDefaultAdapters(): void {\n // EVM 适配器\n this.register(WalletType.METAMASK, () => new MetaMaskAdapter())\n this.register(WalletType.PRIVATE_KEY, () => new EVMPrivateKeyAdapter())\n\n // Tron 适配器\n this.register(WalletType.TRONLINK, () => new TronLinkAdapter())\n }\n\n /**\n * 注册适配器\n */\n register(type: WalletType, factory: () => IWalletAdapter): void {\n this.adapters.set(type, factory)\n }\n\n /**\n * 获取适配器\n */\n getAdapter(type: WalletType): IWalletAdapter | null {\n const factory = this.adapters.get(type)\n if (!factory) {\n return null\n }\n return factory()\n }\n\n /**\n * 判断适配器是否已注册\n */\n has(type: WalletType): boolean {\n return this.adapters.has(type)\n }\n\n /**\n * 获取所有已注册的适配器类型\n */\n getRegisteredTypes(): WalletType[] {\n return Array.from(this.adapters.keys())\n }\n\n /**\n * 根据链类型获取适配器类型列表\n */\n getAdapterTypesByChainType(chainType: ChainType): WalletType[] {\n const types: WalletType[] = []\n\n for (const type of this.adapters.keys()) {\n const adapter = this.getAdapter(type)\n if (adapter && adapter.chainType === chainType) {\n types.push(type)\n }\n }\n\n return types\n }\n}\n\n","/**\n * 钱包管理器(核心)\n */\n\nimport { TypedEventEmitter } from './events'\nimport { AdapterRegistry } from './adapter-registry'\nimport {\n Account,\n ChainType,\n WalletType,\n IWalletAdapter,\n WalletManagerConfig,\n WalletManagerEvents,\n ConnectedWallet,\n StorageData,\n WalletHistoryRecord,\n TransactionReceipt,\n AddChainParams,\n} from './types'\nimport {\n WalletNotConnectedError,\n WalletNotAvailableError,\n} from './errors'\nimport { EVMPrivateKeyAdapter } from '../adapters/evm/private-key'\n\n/**\n * 钱包管理器\n */\nexport class WalletManager extends TypedEventEmitter<WalletManagerEvents> {\n private config: Required<WalletManagerConfig>\n private registry: AdapterRegistry\n\n // 主钱包\n private primaryWallet: IWalletAdapter | null = null\n\n // 已连接钱包池\n private connectedWallets: Map<ChainType, IWalletAdapter> = new Map()\n\n constructor(config: WalletManagerConfig = {}) {\n super()\n\n this.config = {\n enableStorage: config.enableStorage ?? true,\n storagePrefix: config.storagePrefix ?? 'enclave_wallet_',\n defaultChainId: config.defaultChainId ?? 1,\n defaultTronChainId: config.defaultTronChainId ?? 195,\n walletConnectProjectId: config.walletConnectProjectId ?? '',\n }\n\n this.registry = new AdapterRegistry()\n\n // 恢复之前的连接\n if (this.config.enableStorage) {\n this.restoreFromStorage()\n }\n }\n\n // ===== 连接管理 =====\n\n /**\n * 连接主钱包\n */\n async connect(type: WalletType, chainId?: number): Promise<Account> {\n const adapter = this.registry.getAdapter(type)\n if (!adapter) {\n throw new WalletNotAvailableError(type)\n }\n\n // 检查是否可用\n const isAvailable = await adapter.isAvailable()\n if (!isAvailable) {\n throw new WalletNotAvailableError(type)\n }\n\n // 连接钱包\n const account = await adapter.connect(chainId)\n\n // 设置为主钱包\n this.setPrimaryWallet(adapter)\n\n // 添加到已连接钱包池\n this.connectedWallets.set(adapter.chainType, adapter)\n\n // 设置事件监听\n this.setupAdapterListeners(adapter, true)\n\n // 保存到存储\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n\n return account\n }\n\n /**\n * 连接额外的钱包(不改变主钱包)\n */\n async connectAdditional(type: WalletType, chainId?: number): Promise<Account> {\n const adapter = this.registry.getAdapter(type)\n if (!adapter) {\n throw new WalletNotAvailableError(type)\n }\n\n const isAvailable = await adapter.isAvailable()\n if (!isAvailable) {\n throw new WalletNotAvailableError(type)\n }\n\n const account = await adapter.connect(chainId)\n\n // 添加到已连接钱包池(不设置为主钱包)\n this.connectedWallets.set(adapter.chainType, adapter)\n\n // 设置事件监听\n this.setupAdapterListeners(adapter, false)\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n\n return account\n }\n\n /**\n * 使用私钥连接(仅用于开发/测试)\n */\n async connectWithPrivateKey(privateKey: string, chainId?: number): Promise<Account> {\n const adapter = new EVMPrivateKeyAdapter()\n adapter.setPrivateKey(privateKey)\n\n const account = await adapter.connect(chainId || this.config.defaultChainId)\n\n this.setPrimaryWallet(adapter)\n this.connectedWallets.set(adapter.chainType, adapter)\n this.setupAdapterListeners(adapter, true)\n\n return account\n }\n\n /**\n * 断开主钱包\n */\n async disconnect(): Promise<void> {\n if (!this.primaryWallet) {\n return\n }\n\n await this.primaryWallet.disconnect()\n\n // 移除监听\n this.removeAdapterListeners(this.primaryWallet)\n\n // 从已连接钱包池中移除\n this.connectedWallets.delete(this.primaryWallet.chainType)\n\n this.primaryWallet = null\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n\n this.emit('disconnected')\n }\n\n /**\n * 断开所有钱包\n */\n async disconnectAll(): Promise<void> {\n const wallets = Array.from(this.connectedWallets.values())\n\n for (const wallet of wallets) {\n await wallet.disconnect()\n this.removeAdapterListeners(wallet)\n }\n\n this.primaryWallet = null\n this.connectedWallets.clear()\n\n if (this.config.enableStorage) {\n this.clearStorage()\n }\n\n this.emit('disconnected')\n }\n\n // ===== 主钱包管理 =====\n\n /**\n * 切换主钱包\n */\n async switchPrimaryWallet(chainType: ChainType): Promise<Account> {\n const adapter = this.connectedWallets.get(chainType)\n if (!adapter || !adapter.currentAccount) {\n throw new WalletNotConnectedError(`Wallet for chain type ${chainType} not connected`)\n }\n\n const oldPrimary = this.primaryWallet?.currentAccount || null\n\n // 移除旧主钱包的监听\n if (this.primaryWallet) {\n this.removeAdapterListeners(this.primaryWallet)\n }\n\n // 设置新主钱包\n this.setPrimaryWallet(adapter)\n\n // 设置新主钱包的监听\n this.setupAdapterListeners(adapter, true)\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n\n this.emit('primaryWalletSwitched', adapter.currentAccount, oldPrimary, chainType)\n\n return adapter.currentAccount\n }\n\n /**\n * 获取主钱包账户\n */\n getPrimaryAccount(): Account | null {\n return this.primaryWallet?.currentAccount || null\n }\n\n /**\n * 获取所有已连接的钱包\n */\n getConnectedWallets(): ConnectedWallet[] {\n return Array.from(this.connectedWallets.values()).map(adapter => ({\n account: adapter.currentAccount!,\n walletType: adapter.type,\n chainType: adapter.chainType,\n isPrimary: adapter === this.primaryWallet,\n canSwitchChain: this.canSwitchChain(adapter),\n adapter,\n }))\n }\n\n /**\n * 根据链类型获取钱包\n */\n getWalletByChainType(chainType: ChainType): IWalletAdapter | null {\n return this.connectedWallets.get(chainType) || null\n }\n\n // ===== 签名 =====\n\n /**\n * 使用主钱包签名\n */\n async signMessage(message: string): Promise<string> {\n if (!this.primaryWallet) {\n throw new WalletNotConnectedError()\n }\n\n return this.primaryWallet.signMessage(message)\n }\n\n /**\n * 使用指定链类型的钱包签名\n */\n async signMessageWithChainType(message: string, chainType?: ChainType): Promise<string> {\n if (!chainType) {\n return this.signMessage(message)\n }\n\n const adapter = this.connectedWallets.get(chainType)\n if (!adapter) {\n throw new WalletNotConnectedError(`Wallet for chain type ${chainType}`)\n }\n\n return adapter.signMessage(message)\n }\n\n /**\n * 签名 TypedData(仅 EVM)\n */\n async signTypedData(typedData: any, chainType?: ChainType): Promise<string> {\n const adapter = chainType\n ? this.connectedWallets.get(chainType)\n : this.primaryWallet\n\n if (!adapter) {\n throw new WalletNotConnectedError()\n }\n\n if (!adapter.signTypedData) {\n throw new Error(`signTypedData not supported by ${adapter.type}`)\n }\n\n return adapter.signTypedData(typedData)\n }\n\n // ===== 链切换 =====\n\n /**\n * 请求切换链(仅 EVM)\n */\n async requestSwitchChain(chainId: number, options?: {\n addChainIfNotExists?: boolean\n chainConfig?: AddChainParams\n }): Promise<Account> {\n if (!this.primaryWallet) {\n throw new WalletNotConnectedError()\n }\n\n if (!this.primaryWallet.switchChain) {\n throw new Error(`Chain switching not supported by ${this.primaryWallet.type}`)\n }\n\n try {\n await this.primaryWallet.switchChain(chainId)\n return this.primaryWallet.currentAccount!\n } catch (error: any) {\n // 如果链不存在且配置了自动添加\n if (options?.addChainIfNotExists && options.chainConfig && this.primaryWallet.addChain) {\n await this.primaryWallet.addChain(options.chainConfig)\n await this.primaryWallet.switchChain(chainId)\n return this.primaryWallet.currentAccount!\n }\n throw error\n }\n }\n\n // ===== 合约调用 =====\n\n /**\n * 读取合约\n */\n async readContract<T = any>(\n address: string,\n abi: any[],\n functionName: string,\n args?: any[],\n chainType?: ChainType\n ): Promise<T> {\n const adapter = chainType\n ? this.connectedWallets.get(chainType)\n : this.primaryWallet\n\n if (!adapter) {\n throw new WalletNotConnectedError()\n }\n\n if (!adapter.readContract) {\n throw new Error(`readContract not supported by ${adapter.type}`)\n }\n\n return adapter.readContract({ address, abi, functionName, args })\n }\n\n /**\n * 写入合约\n */\n async writeContract(\n address: string,\n abi: any[],\n functionName: string,\n args?: any[],\n options?: {\n value?: string\n gas?: number\n gasPrice?: string\n },\n chainType?: ChainType\n ): Promise<string> {\n const adapter = chainType\n ? this.connectedWallets.get(chainType)\n : this.primaryWallet\n\n if (!adapter) {\n throw new WalletNotConnectedError()\n }\n\n if (!adapter.writeContract) {\n throw new Error(`writeContract not supported by ${adapter.type}`)\n }\n\n return adapter.writeContract({\n address,\n abi,\n functionName,\n args,\n ...options,\n })\n }\n\n /**\n * 估算 Gas\n */\n async estimateGas(\n address: string,\n abi: any[],\n functionName: string,\n args?: any[],\n chainType?: ChainType\n ): Promise<bigint> {\n const adapter = chainType\n ? this.connectedWallets.get(chainType)\n : this.primaryWallet\n\n if (!adapter) {\n throw new WalletNotConnectedError()\n }\n\n if (!adapter.estimateGas) {\n throw new Error(`estimateGas not supported by ${adapter.type}`)\n }\n\n return adapter.estimateGas({ address, abi, functionName, args })\n }\n\n /**\n * 等待交易确认\n */\n async waitForTransaction(\n txHash: string,\n confirmations?: number,\n chainType?: ChainType\n ): Promise<TransactionReceipt> {\n const adapter = chainType\n ? this.connectedWallets.get(chainType)\n : this.primaryWallet\n\n if (!adapter) {\n throw new WalletNotConnectedError()\n }\n\n if (!adapter.waitForTransaction) {\n throw new Error(`waitForTransaction not supported by ${adapter.type}`)\n }\n\n return adapter.waitForTransaction(txHash, confirmations)\n }\n\n // ===== Provider 访问 =====\n\n /**\n * 获取主钱包 Provider\n */\n getProvider(): any {\n if (!this.primaryWallet) {\n throw new WalletNotConnectedError()\n }\n\n return this.primaryWallet.getProvider()\n }\n\n /**\n * 获取指定链类型的 Provider\n */\n getProviderByChainType(chainType: ChainType): any {\n const adapter = this.connectedWallets.get(chainType)\n if (!adapter) {\n throw new WalletNotConnectedError(`Wallet for chain type ${chainType}`)\n }\n\n return adapter.getProvider()\n }\n\n // ===== 私有方法 =====\n\n /**\n * 设置主钱包\n */\n private setPrimaryWallet(adapter: IWalletAdapter): void {\n this.primaryWallet = adapter\n }\n\n /**\n * 判断钱包是否支持链切换\n */\n private canSwitchChain(adapter: IWalletAdapter): boolean {\n return !!adapter.switchChain\n }\n\n /**\n * 设置适配器事件监听\n */\n private setupAdapterListeners(adapter: IWalletAdapter, isPrimary: boolean): void {\n adapter.on('accountChanged', (account: Account | null) => {\n if (isPrimary) {\n this.emit('accountChanged', account)\n }\n this.emit('walletAccountChanged', adapter.chainType, account, isPrimary)\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n })\n\n adapter.on('chainChanged', (chainId: number) => {\n if (isPrimary && adapter.currentAccount) {\n this.emit('chainChanged', chainId, adapter.currentAccount)\n }\n if (adapter.currentAccount) {\n this.emit('walletChainChanged', adapter.chainType, chainId, adapter.currentAccount, isPrimary)\n }\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n })\n\n adapter.on('disconnected', () => {\n if (isPrimary) {\n this.emit('disconnected')\n }\n this.emit('walletDisconnected', adapter.chainType, isPrimary)\n\n this.connectedWallets.delete(adapter.chainType)\n\n if (adapter === this.primaryWallet) {\n this.primaryWallet = null\n }\n\n if (this.config.enableStorage) {\n this.saveToStorage()\n }\n })\n\n adapter.on('error', (error: Error) => {\n this.emit('error', error)\n })\n }\n\n /**\n * 移除适配器事件监听\n */\n private removeAdapterListeners(adapter: IWalletAdapter): void {\n adapter.removeAllListeners()\n }\n\n // ===== 存储 =====\n\n /**\n * 保存到存储\n */\n private saveToStorage(): void {\n if (typeof window === 'undefined' || !this.config.enableStorage) {\n return\n }\n\n const data: StorageData = {\n current: this.primaryWallet?.currentAccount?.universalAddress || null,\n history: this.getHistoryRecords(),\n }\n\n try {\n localStorage.setItem(\n `${this.config.storagePrefix}data`,\n JSON.stringify(data)\n )\n } catch (error) {\n console.error('Failed to save wallet data to storage:', error)\n }\n }\n\n /**\n * 从存储恢复\n */\n private restoreFromStorage(): void {\n // 注意:自动重连可能需要用户授权,这里只是读取历史记录\n // 实际重连需要用户主动调用 connect()\n }\n\n /**\n * 清除存储\n */\n private clearStorage(): void {\n if (typeof window === 'undefined') {\n return\n }\n\n try {\n localStorage.removeItem(`${this.config.storagePrefix}data`)\n } catch (error) {\n console.error('Failed to clear wallet data from storage:', error)\n }\n }\n\n /**\n * 获取历史记录\n */\n private getHistoryRecords(): WalletHistoryRecord[] {\n const records: WalletHistoryRecord[] = []\n\n for (const adapter of this.connectedWallets.values()) {\n if (adapter.currentAccount) {\n records.push({\n universalAddress: adapter.currentAccount.universalAddress,\n nativeAddress: adapter.currentAccount.nativeAddress,\n chainId: adapter.currentAccount.chainId,\n chainType: adapter.chainType,\n walletType: adapter.type,\n lastConnected: Date.now(),\n name: adapter.currentAccount.name,\n })\n }\n }\n\n return records\n }\n}\n\n","/**\n * React Context for Wallet SDK\n */\n\nimport React, { createContext, useContext, useEffect, useState, useCallback, ReactNode } from 'react'\nimport { WalletManager } from '../core/wallet-manager'\nimport { Account, WalletType, ConnectedWallet, ChainType } from '../core/types'\n\n/**\n * Wallet Context 类型\n */\nexport interface WalletContextValue {\n // 状态\n walletManager: WalletManager\n account: Account | null\n isConnected: boolean\n connectedWallets: ConnectedWallet[]\n\n // 方法\n connect: (type: WalletType, chainId?: number) => Promise<Account>\n connectAdditional: (type: WalletType, chainId?: number) => Promise<Account>\n disconnect: () => Promise<void>\n switchPrimaryWallet: (chainType: ChainType) => Promise<Account>\n signMessage: (message: string) => Promise<string>\n}\n\n/**\n * Wallet Context\n */\nconst WalletContext = createContext<WalletContextValue | null>(null)\n\n/**\n * Wallet Provider Props\n */\nexport interface WalletProviderProps {\n children: ReactNode\n walletManager?: WalletManager\n}\n\n/**\n * Wallet Provider\n */\nexport function WalletProvider({ children, walletManager: externalWalletManager }: WalletProviderProps) {\n const [walletManager] = useState(() => externalWalletManager || new WalletManager())\n const [account, setAccount] = useState<Account | null>(null)\n const [connectedWallets, setConnectedWallets] = useState<ConnectedWallet[]>([])\n\n // 更新连接的钱包列表\n const updateConnectedWallets = useCallback(() => {\n setConnectedWallets(walletManager.getConnectedWallets())\n }, [walletManager])\n\n // 连接钱包\n const connect = useCallback(async (type: WalletType, chainId?: number) => {\n const account = await walletManager.connect(type, chainId)\n setAccount(account)\n updateConnectedWallets()\n return account\n }, [walletManager, updateConnectedWallets])\n\n // 连接额外的钱包\n const connectAdditional = useCallback(async (type: WalletType, chainId?: number) => {\n const account = await walletManager.connectAdditional(type, chainId)\n updateConnectedWallets()\n return account\n }, [walletManager, updateConnectedWallets])\n\n // 断开连接\n const disconnect = useCallback(async () => {\n await walletManager.disconnect()\n setAccount(null)\n updateConnectedWallets()\n }, [walletManager, updateConnectedWallets])\n\n // 切换主钱包\n const switchPrimaryWallet = useCallback(async (chainType: ChainType) => {\n const account = await walletManager.switchPrimaryWallet(chainType)\n setAccount(account)\n updateConnectedWallets()\n return account\n }, [walletManager, updateConnectedWallets])\n\n // 签名消息\n const signMessage = useCallback(async (message: string) => {\n return walletManager.signMessage(message)\n }, [walletManager])\n\n // 监听事件\n useEffect(() => {\n const handleAccountChanged = (newAccount: Account | null) => {\n setAccount(newAccount)\n updateConnectedWallets()\n }\n\n const handleChainChanged = (_chainId: number, newAccount: Account) => {\n setAccount(newAccount)\n updateConnectedWallets()\n }\n\n const handleDisconnected = () => {\n setAccount(null)\n updateConnectedWallets()\n }\n\n const handlePrimaryWalletSwitched = (newPrimary: Account) => {\n setAccount(newPrimary)\n updateConnectedWallets()\n }\n\n walletManager.on('accountChanged', handleAccountChanged)\n walletManager.on('chainChanged', handleChainChanged)\n walletManager.on('disconnected', handleDisconnected)\n walletManager.on('primaryWalletSwitched', handlePrimaryWalletSwitched)\n\n // 初始化账户\n setAccount(walletManager.getPrimaryAccount())\n updateConnectedWallets()\n\n return () => {\n walletManager.off('accountChanged', handleAccountChanged)\n walletManager.off('chainChanged', handleChainChanged)\n walletManager.off('disconnected', handleDisconnected)\n walletManager.off('primaryWalletSwitched', handlePrimaryWalletSwitched)\n }\n }, [walletManager, updateConnectedWallets])\n\n const value: WalletContextValue = {\n walletManager,\n account,\n isConnected: account !== null,\n connectedWallets,\n connect,\n connectAdditional,\n disconnect,\n switchPrimaryWallet,\n signMessage,\n }\n\n return <WalletContext.Provider value={value}>{children}</WalletContext.Provider>\n}\n\n/**\n * useWallet Hook\n */\nexport function useWallet(): WalletContextValue {\n const context = useContext(WalletContext)\n if (!context) {\n throw new Error('useWallet must be used within a WalletProvider')\n }\n return context\n}\n\n","/**\n * useAccount Hook\n * 获取当前账户信息\n */\n\nimport { useWallet } from '../WalletContext'\nimport { Account } from '../../core/types'\n\nexport interface UseAccountResult {\n account: Account | null\n isConnected: boolean\n address: string | null\n chainId: number | null\n universalAddress: string | null\n}\n\n/**\n * useAccount Hook\n */\nexport function useAccount(): UseAccountResult {\n const { account, isConnected } = useWallet()\n\n return {\n account,\n isConnected,\n address: account?.nativeAddress || null,\n chainId: account?.chainId || null,\n universalAddress: account?.universalAddress || null,\n }\n}\n\n","/**\n * useConnect Hook\n * 连接钱包\n */\n\nimport { useState } from 'react'\nimport { useWallet } from '../WalletContext'\nimport { WalletType, Account } from '../../core/types'\n\nexport interface UseConnectResult {\n connect: (type: WalletType, chainId?: number) => Promise<Account>\n connectAdditional: (type: WalletType, chainId?: number) => Promise<Account>\n isConnecting: boolean\n error: Error | null\n}\n\n/**\n * useConnect Hook\n */\nexport function useConnect(): UseConnectResult {\n const { connect: contextConnect, connectAdditional: contextConnectAdditional } = useWallet()\n const [isConnecting, setIsConnecting] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const connect = async (type: WalletType, chainId?: number): Promise<Account> => {\n setIsConnecting(true)\n setError(null)\n\n try {\n const account = await contextConnect(type, chainId)\n return account\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n setError(error)\n throw error\n } finally {\n setIsConnecting(false)\n }\n }\n\n const connectAdditional = async (type: WalletType, chainId?: number): Promise<Account> => {\n setIsConnecting(true)\n setError(null)\n\n try {\n const account = await contextConnectAdditional(type, chainId)\n return account\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n setError(error)\n throw error\n } finally {\n setIsConnecting(false)\n }\n }\n\n return {\n connect,\n connectAdditional,\n isConnecting,\n error,\n }\n}\n\n","/**\n * useDisconnect Hook\n * 断开钱包连接\n */\n\nimport { useState } from 'react'\nimport { useWallet } from '../WalletContext'\n\nexport interface UseDisconnectResult {\n disconnect: () => Promise<void>\n isDisconnecting: boolean\n error: Error | null\n}\n\n/**\n * useDisconnect Hook\n */\nexport function useDisconnect(): UseDisconnectResult {\n const { disconnect: contextDisconnect } = useWallet()\n const [isDisconnecting, setIsDisconnecting] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const disconnect = async (): Promise<void> => {\n setIsDisconnecting(true)\n setError(null)\n\n try {\n await contextDisconnect()\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n setError(error)\n throw error\n } finally {\n setIsDisconnecting(false)\n }\n }\n\n return {\n disconnect,\n isDisconnecting,\n error,\n }\n}\n\n","/**\n * useSignMessage Hook\n * 签名消息\n */\n\nimport { useState } from 'react'\nimport { useWallet } from '../WalletContext'\n\nexport interface UseSignMessageResult {\n signMessage: (message: string) => Promise<string>\n isSigning: boolean\n error: Error | null\n}\n\n/**\n * useSignMessage Hook\n */\nexport function useSignMessage(): UseSignMessageResult {\n const { signMessage: contextSignMessage } = useWallet()\n const [isSigning, setIsSigning] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const signMessage = async (message: string): Promise<string> => {\n setIsSigning(true)\n setError(null)\n\n try {\n const signature = await contextSignMessage(message)\n return signature\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n setError(error)\n throw error\n } finally {\n setIsSigning(false)\n }\n }\n\n return {\n signMessage,\n isSigning,\n error,\n }\n}\n\n"]}