#!/usr/bin/env tsx /** * 简化版 Pacifica 账户生成器 * 只生成账户地址和私钥,用于快速注入和执行交易 */ import { ethers } from 'ethers'; import { promises as fs } from 'fs'; import path from 'path'; // 简化的账户接口 interface SimpleAccount { name: string; address: string; privateKey: string; } // 简化的账户生成器 class SimpleAccountGenerator { private readonly configDir: string; private readonly accountsFile: string; constructor(configDir: string = './config') { this.configDir = configDir; this.accountsFile = path.join(configDir, 'simple-accounts.json'); } /** * 生成单个账户 */ generateAccount(name: string): SimpleAccount { const wallet = ethers.Wallet.createRandom(); return { name, address: wallet.address, privateKey: wallet.privateKey }; } /** * 批量生成账户 */ generateMultipleAccounts(count: number, baseName: string = 'Account'): SimpleAccount[] { const accounts: SimpleAccount[] = []; for (let i = 1; i <= count; i++) { const accountName = `${baseName}${i}`; const account = this.generateAccount(accountName); accounts.push(account); } return accounts; } /** * 保存账户到文件 */ async saveAccounts(accounts: SimpleAccount[]): Promise { await fs.mkdir(this.configDir, { recursive: true }); await fs.writeFile( this.accountsFile, JSON.stringify(accounts, null, 2), 'utf-8' ); console.log(`✅ 已保存 ${accounts.length} 个账户到 ${this.accountsFile}`); } /** * 从文件加载账户 */ async loadAccounts(): Promise { try { const data = await fs.readFile(this.accountsFile, 'utf-8'); return JSON.parse(data); } catch (error) { console.error('❌ 加载账户失败:', error); return []; } } /** * 显示账户信息 */ displayAccount(account: SimpleAccount): void { console.log(`📋 ${account.name}:`); console.log(` 地址: ${account.address}`); console.log(` 私钥: ${account.privateKey}`); } /** * 显示所有账户 */ displayAccounts(accounts: SimpleAccount[]): void { console.log(`\n📊 共 ${accounts.length} 个账户:`); accounts.forEach((account, index) => { console.log(` ${index + 1}. ${account.name} - ${account.address}`); }); } } // 交易执行器 class SimpleTradeExecutor { private accounts: SimpleAccount[] = []; constructor(accounts: SimpleAccount[]) { this.accounts = accounts; } /** * 获取账户私钥用于签名 */ getAccountPrivateKey(accountName: string): string | null { const account = this.accounts.find(acc => acc.name === accountName); return account ? account.privateKey : null; } /** * 获取账户地址 */ getAccountAddress(accountName: string): string | null { const account = this.accounts.find(acc => acc.name === accountName); return account ? account.address : null; } /** * 列出所有可用账户 */ listAccounts(): void { console.log('\n📋 可用账户:'); this.accounts.forEach((account, index) => { console.log(` ${index + 1}. ${account.name} (${account.address})`); }); } /** * 模拟交易执行(实际使用时需要连接Pacifica API) */ async executeTrade(accountName: string, symbol: string, side: 'buy' | 'sell', amount: number): Promise { const account = this.accounts.find(acc => acc.name === accountName); if (!account) { throw new Error(`账户 ${accountName} 不存在`); } console.log(`\n🔄 执行交易:`); console.log(` 账户: ${account.name} (${account.address})`); console.log(` 交易对: ${symbol}`); console.log(` 方向: ${side === 'buy' ? '买入' : '卖出'}`); console.log(` 数量: ${amount}`); console.log(` 私钥: ${account.privateKey.substring(0, 10)}...${account.privateKey.substring(62)}`); // 这里可以集成实际的Pacifica API调用 console.log(`✅ 交易已提交 (模拟)`); } } // 主函数 async function main() { const args = process.argv.slice(2); if (args.length === 0) { // 显示帮助信息 console.log('🚀 简化版 Pacifica 账户生成器\n'); console.log('使用方法:'); console.log(' npx tsx examples/simple-account-generator.ts generate [数量] [名称] # 生成账户'); console.log(' npx tsx examples/simple-account-generator.ts list # 列出账户'); console.log(' npx tsx examples/simple-account-generator.ts trade [账户] [交易对] [方向] [数量] # 执行交易'); console.log(' npx tsx examples/simple-account-generator.ts demo # 运行演示'); return; } const generator = new SimpleAccountGenerator(); if (args[0] === 'generate') { // 生成账户 const count = parseInt(args[1]) || 2; const baseName = args[2] || 'Account'; console.log(`🚀 生成 ${count} 个账户...`); const accounts = generator.generateMultipleAccounts(count, baseName); await generator.saveAccounts(accounts); generator.displayAccounts(accounts); } else if (args[0] === 'list') { // 列出账户 const accounts = await generator.loadAccounts(); if (accounts.length === 0) { console.log('❌ 没有找到账户,请先生成账户'); return; } generator.displayAccounts(accounts); } else if (args[0] === 'trade') { // 执行交易 const accountName = args[1]; const symbol = args[2] || 'ETH/USD'; const side = args[3] as 'buy' | 'sell' || 'buy'; const amount = parseFloat(args[4]) || 0.1; if (!accountName) { console.log('❌ 请指定账户名称'); return; } const accounts = await generator.loadAccounts(); if (accounts.length === 0) { console.log('❌ 没有找到账户,请先生成账户'); return; } const executor = new SimpleTradeExecutor(accounts); await executor.executeTrade(accountName, symbol, side, amount); } else if (args[0] === 'demo') { // 运行演示 console.log('🚀 运行演示...\n'); // 生成账户 console.log('📝 步骤1: 生成账户'); const accounts = generator.generateMultipleAccounts(3, 'DemoAccount'); await generator.saveAccounts(accounts); generator.displayAccounts(accounts); // 列出账户 console.log('\n📝 步骤2: 列出账户'); const loadedAccounts = await generator.loadAccounts(); generator.displayAccounts(loadedAccounts); // 执行交易 console.log('\n📝 步骤3: 执行交易'); const executor = new SimpleTradeExecutor(loadedAccounts); executor.listAccounts(); // 模拟交易 await executor.executeTrade('DemoAccount1', 'ETH/USD', 'buy', 0.5); await executor.executeTrade('DemoAccount2', 'ETH/USD', 'sell', 0.3); console.log('\n🎉 演示完成!'); console.log('\n💡 下一步:'); console.log(' 1. 将生成的账户导入到Pacifica DEX'); console.log(' 2. 为账户充值'); console.log(' 3. 使用私钥执行实际交易'); } else { console.log('❌ 未知命令,请查看帮助信息'); } } // 运行主函数 if (import.meta.url === `file://${process.argv[1]}`) { main().catch(console.error); } export { SimpleAccountGenerator, SimpleTradeExecutor, SimpleAccount };