|
| 1 | +# Additional Token Sources for LightX |
| 2 | + |
| 3 | +This document explains how to implement monitoring for additional token sources in the LightX application. The implementation includes frontend and backend changes to support Raydium and Jupiter token sources. |
| 4 | + |
| 5 | +## Overview of Changes |
| 6 | + |
| 7 | +1. **Frontend changes:** |
| 8 | + - Added UI for selecting token sources to monitor |
| 9 | + - Modified CSS to style the source selection and source badges |
| 10 | + - Updated JavaScript to send selected sources to the server |
| 11 | + - Added visual indicators for token sources in the UI |
| 12 | + |
| 13 | +2. **Backend changes:** |
| 14 | + - Created implementation for monitoring Raydium tokens |
| 15 | + - Created implementation for monitoring Jupiter tokens |
| 16 | + - Updated socket.io handlers to respect source selection |
| 17 | + - Enhanced token data to include source information |
| 18 | + |
| 19 | +## How to Implement |
| 20 | + |
| 21 | +### Backend Integration |
| 22 | + |
| 23 | +1. Copy the functions from `src/token-monitoring-extensions.ts` into your main `src/index.ts` file: |
| 24 | + - `monitorRaydiumTokens` |
| 25 | + - `monitorJupiterTokens` |
| 26 | + - Update your `sendTokenInfo` function to include source information |
| 27 | + |
| 28 | +2. Update your Socket.io connection handler in `src/index.ts` to use the selected sources: |
| 29 | + |
| 30 | +```typescript |
| 31 | +// Socket.io connection handling |
| 32 | +io.on('connection', (socket: Socket) => { |
| 33 | + console.log(`Client connected: ${socket.id}`); |
| 34 | + |
| 35 | + // Handle start monitoring request |
| 36 | + socket.on('startMonitoring', (data?: {clientId?: string, address?: string, sources?: any}) => { |
| 37 | + const clientId = socket.id; |
| 38 | + |
| 39 | + // Get selected sources or use defaults |
| 40 | + const selectedSources = data?.sources || { |
| 41 | + rayFee: true, |
| 42 | + pumpFun: true, |
| 43 | + moonshot: true, |
| 44 | + raydium: true, |
| 45 | + jupiter: true |
| 46 | + }; |
| 47 | + |
| 48 | + console.log(`Starting monitoring for client: ${clientId} with sources:`, selectedSources); |
| 49 | + |
| 50 | + // Start all selected monitoring services |
| 51 | + if (selectedSources.rayFee) { |
| 52 | + monitorNewTokens(solanaConnection, clientId); |
| 53 | + } |
| 54 | + |
| 55 | + if (selectedSources.pumpFun) { |
| 56 | + monitorPumpFunTokens(solanaConnection, clientId); |
| 57 | + } |
| 58 | + |
| 59 | + if (selectedSources.moonshot) { |
| 60 | + monitorMoonshotTokens(solanaConnection, clientId); |
| 61 | + } |
| 62 | + |
| 63 | + if (selectedSources.raydium) { |
| 64 | + monitorRaydiumTokens(solanaConnection, clientId); |
| 65 | + } |
| 66 | + |
| 67 | + if (selectedSources.jupiter) { |
| 68 | + monitorJupiterTokens(solanaConnection, clientId); |
| 69 | + } |
| 70 | + |
| 71 | + // Confirm to the client |
| 72 | + socket.emit('monitoringStarted', { success: true }); |
| 73 | + }); |
| 74 | +}); |
| 75 | +``` |
| 76 | + |
| 77 | +3. Update the `clientToMonitoringMap` to include the new sources: |
| 78 | +```typescript |
| 79 | +const clientToMonitoringMap = new Map<string, { |
| 80 | + newTokens: boolean, |
| 81 | + pumpFun: boolean, |
| 82 | + moonshot: boolean, |
| 83 | + raydium: boolean, |
| 84 | + jupiter: boolean |
| 85 | +}>(); |
| 86 | +``` |
| 87 | + |
| 88 | +4. Update the `sendTokenInfo` function to include the source information: |
| 89 | +```typescript |
| 90 | +async function sendTokenInfo(socketId: string, message: string, tokenAddress: string, source: string = 'Unknown') { |
| 91 | + try { |
| 92 | + // ... existing code ... |
| 93 | + |
| 94 | + const tokenData = { |
| 95 | + tokenAddress: tokenAddress, |
| 96 | + tokenName: tokenMetadata.name || 'Unknown Token', |
| 97 | + tokenSymbol: tokenMetadata.symbol || 'UNKNOWN', |
| 98 | + tokenImageUrl: tokenMetadata.image, |
| 99 | + marketCap: birdeyeData.marketCap, |
| 100 | + tokenScore: tokenScore || 0, |
| 101 | + source: source, // Added source information |
| 102 | + timestamp: new Date().toISOString() |
| 103 | + }; |
| 104 | + |
| 105 | + // ... rest of function ... |
| 106 | + } catch (error) { |
| 107 | + console.error(`Error in sendTokenInfo: ${error}`); |
| 108 | + } |
| 109 | +} |
| 110 | +``` |
| 111 | + |
| 112 | +## How It Works |
| 113 | + |
| 114 | +The implementation monitors program IDs associated with Raydium and Jupiter to detect new token activity. When a relevant transaction is detected, the code extracts the token address and sends it to the client with source information. |
| 115 | + |
| 116 | +Each token source has its own monitoring function that runs independently. When a user selects specific sources, only those monitors will be activated, reducing server load and focusing on the sources the user cares about. |
| 117 | + |
| 118 | +## Additional Customization |
| 119 | + |
| 120 | +You can add more token sources by following the same pattern: |
| 121 | + |
| 122 | +1. Define the program ID for the new source |
| 123 | +2. Create a monitoring function similar to the examples |
| 124 | +3. Update the UI to include a checkbox for the new source |
| 125 | +4. Add CSS for the new source badge |
| 126 | +5. Update the socket handler to start the new monitor when selected |
| 127 | + |
| 128 | +## Token Source Identification Criteria |
| 129 | + |
| 130 | +Each token source uses different criteria to identify new tokens: |
| 131 | + |
| 132 | +- **RayFee**: Monitors transactions that pay fees to the RayFee program |
| 133 | +- **PumpFun**: Monitors the PumpFun program for new token creation |
| 134 | +- **Moonshot**: Monitors the Moonshot program for new token listings |
| 135 | +- **Raydium**: Monitors for new pools and swaps on Raydium |
| 136 | +- **Jupiter**: Monitors for first swaps of new tokens on Jupiter |
| 137 | + |
| 138 | +## Testing |
| 139 | + |
| 140 | +To test the implementation, start monitoring with different source combinations selected and verify that: |
| 141 | + |
| 142 | +1. Only the selected sources are being monitored |
| 143 | +2. Tokens from different sources display with the correct source badge |
| 144 | +3. The monitoring can be stopped and restarted with different selections |
0 commit comments