/** * Test script for wallet discovery functionality * * Usage: npx ts-node test-discovery.ts */ import { EVMVM } from './utils/evm/evm'; import { SVMVM } from './utils/svm/svm'; import { JsonRpcProvider } from 'ethers'; import { Connection } from '@solana/web3.js'; import { DiscoveredWallet } from './utils/types'; const MNEMONIC = 'olive gasp beach rug swift voice during during differ reject reunion rib'; async function testEVMDiscovery() { console.log('\n=== EVM Wallet Discovery Test ===\n'); try { // Create EVM VM instance const evmVM = EVMVM.fromMnemonic(MNEMONIC) as EVMVM; // Use Ethereum mainnet RPC const provider = new JsonRpcProvider('https://eth.llamarpc.com'); console.log('Starting EVM wallet discovery...'); console.log('Network: Ethereum Mainnet'); console.log('Gap Limit: 20'); console.log('Max Index: 50\n'); const result = await evmVM.discoverWallets(provider, { startIndex: 0, maxIndex: 50, gapLimit: 20, onProgress: (current: number, total: number, found: number) => { process.stdout.write(`\rProgress: ${current}/${total} scanned, ${found} found`); }, onDiscovered: (wallet: DiscoveredWallet) => { console.log(`\n✓ Found wallet at index ${wallet.index}:`); console.log(` Address: ${wallet.address}`); console.log(` Balance: ${wallet.nativeBalance.formatted} ${wallet.nativeBalance.symbol}`); console.log(` Derivation Path: ${wallet.derivationPath}`); } }); console.log('\n\n--- EVM Discovery Results ---'); console.log(`Total wallets found: ${result.discovered.length}`); console.log(`Scanned indices: ${result.scannedIndices}`); console.log(`Highest index checked: ${result.highestIndex}`); console.log(`Total balance: ${Number(result.totalBalance) / 1e18} ETH`); console.log(`Stopped by gap limit: ${result.stoppedByGapLimit}`); console.log(`Duration: ${result.duration}ms`); if (result.discovered.length > 0) { console.log('\nDiscovered wallets:'); result.discovered.forEach((wallet: DiscoveredWallet) => { console.log(` [${wallet.index}] ${wallet.address} - ${wallet.nativeBalance.formatted} ETH`); }); } } catch (error) { console.error('EVM Discovery Error:', error); } } async function testSVMDiscovery() { console.log('\n\n=== SVM Wallet Discovery Test ===\n'); try { // Create SVM VM instance const svmVM = SVMVM.fromMnemonic(MNEMONIC) as SVMVM; // Use Solana mainnet RPC const connection = new Connection('https://api.mainnet-beta.solana.com'); console.log('Starting SVM wallet discovery...'); console.log('Network: Solana Mainnet'); console.log('Gap Limit: 20'); console.log('Max Index: 50\n'); const result = await svmVM.discoverWallets(connection, { startIndex: 0, maxIndex: 50, gapLimit: 20, onProgress: (current: number, total: number, found: number) => { process.stdout.write(`\rProgress: ${current}/${total} scanned, ${found} found`); }, onDiscovered: (wallet: DiscoveredWallet) => { console.log(`\n✓ Found wallet at index ${wallet.index}:`); console.log(` Address: ${wallet.address}`); console.log(` Balance: ${wallet.nativeBalance.formatted} ${wallet.nativeBalance.symbol}`); console.log(` Derivation Path: ${wallet.derivationPath}`); } }); console.log('\n\n--- SVM Discovery Results ---'); console.log(`Total wallets found: ${result.discovered.length}`); console.log(`Scanned indices: ${result.scannedIndices}`); console.log(`Highest index checked: ${result.highestIndex}`); console.log(`Total balance: ${Number(result.totalBalance) / 1e9} SOL`); console.log(`Stopped by gap limit: ${result.stoppedByGapLimit}`); console.log(`Duration: ${result.duration}ms`); if (result.discovered.length > 0) { console.log('\nDiscovered wallets:'); result.discovered.forEach((wallet: DiscoveredWallet) => { console.log(` [${wallet.index}] ${wallet.address} - ${wallet.nativeBalance.formatted} SOL`); }); } } catch (error) { console.error('SVM Discovery Error:', error); } } async function testEVMPocketDiscovery() { console.log('\n\n=== EVM Pocket Discovery Test ===\n'); try { // Create EVM VM instance const evmVM = EVMVM.fromMnemonic(MNEMONIC) as EVMVM; // Use Ethereum mainnet RPC const provider = new JsonRpcProvider('https://eth.llamarpc.com'); console.log('Starting EVM pocket discovery...'); console.log('Network: Ethereum Mainnet'); console.log('Wallet Index: 0'); console.log('Gap Limit: 20'); console.log('Max Index: 30\n'); const result = await evmVM.discoverPockets(provider, { walletIndex: 0, startIndex: 0, maxIndex: 30, gapLimit: 20, onProgress: (current: number, total: number, found: number) => { process.stdout.write(`\rProgress: ${current}/${total} scanned, ${found} found`); }, onDiscovered: (pocket: DiscoveredWallet) => { console.log(`\n✓ Found pocket at account ${pocket.index}:`); console.log(` Address: ${pocket.address}`); console.log(` Balance: ${pocket.nativeBalance.formatted} ${pocket.nativeBalance.symbol}`); console.log(` Derivation Path: ${pocket.derivationPath}`); } }); console.log('\n\n--- EVM Pocket Discovery Results ---'); console.log(`Total pockets found: ${result.discovered.length}`); console.log(`Scanned indices: ${result.scannedIndices}`); console.log(`Highest index checked: ${result.highestIndex}`); console.log(`Total balance: ${Number(result.totalBalance) / 1e18} ETH`); console.log(`Stopped by gap limit: ${result.stoppedByGapLimit}`); console.log(`Duration: ${result.duration}ms`); if (result.discovered.length > 0) { console.log('\nDiscovered pockets:'); result.discovered.forEach((pocket: DiscoveredWallet) => { console.log(` [Pocket ${pocket.index}] ${pocket.address} - ${pocket.nativeBalance.formatted} ETH`); }); } } catch (error) { console.error('EVM Pocket Discovery Error:', error); } } async function testSVMPocketDiscovery() { console.log('\n\n=== SVM Pocket Discovery Test ===\n'); try { // Create SVM VM instance const svmVM = SVMVM.fromMnemonic(MNEMONIC) as SVMVM; // Use Solana mainnet RPC const connection = new Connection('https://api.mainnet-beta.solana.com'); console.log('Starting SVM pocket discovery...'); console.log('Network: Solana Mainnet'); console.log('Wallet Index: 0'); console.log('Gap Limit: 20'); console.log('Max Index: 30\n'); const result = await svmVM.discoverPockets(connection, { walletIndex: 0, startIndex: 0, maxIndex: 30, gapLimit: 20, onProgress: (current: number, total: number, found: number) => { process.stdout.write(`\rProgress: ${current}/${total} scanned, ${found} found`); }, onDiscovered: (pocket: DiscoveredWallet) => { console.log(`\n✓ Found pocket at account ${pocket.index}:`); console.log(` Address: ${pocket.address}`); console.log(` Balance: ${pocket.nativeBalance.formatted} ${pocket.nativeBalance.symbol}`); console.log(` Derivation Path: ${pocket.derivationPath}`); } }); console.log('\n\n--- SVM Pocket Discovery Results ---'); console.log(`Total pockets found: ${result.discovered.length}`); console.log(`Scanned indices: ${result.scannedIndices}`); console.log(`Highest index checked: ${result.highestIndex}`); console.log(`Total balance: ${Number(result.totalBalance) / 1e9} SOL`); console.log(`Stopped by gap limit: ${result.stoppedByGapLimit}`); console.log(`Duration: ${result.duration}ms`); if (result.discovered.length > 0) { console.log('\nDiscovered pockets:'); result.discovered.forEach((pocket: DiscoveredWallet) => { console.log(` [Pocket ${pocket.index}] ${pocket.address} - ${pocket.nativeBalance.formatted} SOL`); }); } } catch (error) { console.error('SVM Pocket Discovery Error:', error); } } async function main() { console.log('╔════════════════════════════════════════════════╗'); console.log('║ Wallet Discovery Test Suite ║'); console.log('╚════════════════════════════════════════════════╝'); // Test standard wallet discovery await testEVMDiscovery(); await testSVMDiscovery(); // Test pocket discovery await testEVMPocketDiscovery(); await testSVMPocketDiscovery(); console.log('\n\n✅ Testing complete!\n'); } main().catch(console.error);