Skip to main content
Glama
monostate

100ms Raydium Sniper MCP

by monostate
test-pool-finding.ts3.81 kB
import { Connection, PublicKey } from '@solana/web3.js'; import WebSocket from 'ws'; import dotenv from 'dotenv'; import { decodeAmmMints, decodeAmmAccount } from '../src/lib/decoders/amm-decoder.js'; dotenv.config(); const TEST_TOKEN = 'Ddm4DTxNZxABUYm2A87TFLY6GDG2ktM2eJhGZS3EbzHM'; const RAYDIUM_PROGRAM_ID = process.env.RAYDIUM_PROGRAM_ID!; async function testRpcPoolFinding() { console.log('\nTesting RPC Pool Finding...'); const connection = new Connection(process.env.RPC_ENDPOINT!, { commitment: 'processed' }); try { // Get all program accounts console.log('Fetching Raydium program accounts...'); const accounts = await connection.getProgramAccounts(new PublicKey(RAYDIUM_PROGRAM_ID), { commitment: 'processed', filters: [ { dataSize: 300 // Min size for AMM accounts } ] }); console.log(`Found ${accounts.length} total program accounts`); // Decode and filter accounts let poolsFound = 0; for (const account of accounts) { try { const mints = decodeAmmMints(account.account.data); if (!mints) continue; if (mints.baseMint === TEST_TOKEN || mints.quoteMint === TEST_TOKEN) { poolsFound++; const decoded = decodeAmmAccount(account.account.data); console.log('\nFound matching pool:', { address: account.pubkey.toString(), ...decoded }); } } catch (error) { // Skip invalid accounts continue; } } console.log(`\nFound ${poolsFound} pools for token ${TEST_TOKEN}`); } catch (error) { console.error('RPC test failed:', error); } } async function testWebSocketPoolFinding() { console.log('\nTesting WebSocket Pool Finding...'); return new Promise<void>((resolve) => { const ws = new WebSocket(process.env.WS_ENDPOINT!); let poolsFound = 0; ws.on('open', () => { console.log('WebSocket connected'); // Subscribe to program const subscribeMsg = { jsonrpc: '2.0', id: 1, method: 'programSubscribe', params: [ RAYDIUM_PROGRAM_ID, { encoding: 'base64', commitment: 'processed' } ] }; ws.send(JSON.stringify(subscribeMsg)); }); ws.on('message', async (data: WebSocket.Data) => { try { const parsed = JSON.parse(data.toString()); if (parsed.id === 1) { console.log('Successfully subscribed to Raydium program'); return; } if (!parsed.params?.result?.value?.account?.data?.[0]) return; const accountData = parsed.params.result.value.account.data[0]; const mints = decodeAmmMints(accountData); if (!mints) return; if (mints.baseMint === TEST_TOKEN || mints.quoteMint === TEST_TOKEN) { poolsFound++; const decoded = decodeAmmAccount(accountData); console.log('\nFound matching pool via WebSocket:', { address: parsed.params.result.value.pubkey, ...decoded }); } } catch (error) { // Skip invalid messages } }); // Run for 30 seconds setTimeout(() => { console.log(`\nFound ${poolsFound} pools via WebSocket in 30 seconds`); ws.close(); resolve(); }, 30000); ws.on('error', (error) => { console.error('WebSocket error:', error); }); ws.on('close', () => { console.log('WebSocket closed'); }); }); } async function main() { console.log('Starting pool finding tests...'); console.log('Test token:', TEST_TOKEN); // Run tests await testRpcPoolFinding(); await testWebSocketPoolFinding(); } main().catch(console.error);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/monostate/100ms-SPL-Token-Sniper-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server