123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #!/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<void> {
- 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<SimpleAccount[]> {
- 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<void> {
- 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 };
|