好的,实现实时监听 Pump.fun 上新创建的代币是一个在 Solana 生态中非常常见的需求。由于 Pump.fun 的机制涉及多个步骤(创建、绑定、泵升、上架),“监听新代币”通常指的是监听在 Raydium 上创建流动性池(LP) 的这一最终事件,因为这标志着代币正式上线并可自由交易。 以下是几种主流的实现方法,从简单到复杂排列: 方法一:使用现成的Bot或API(最快最简单)这是最推荐给初学者和非开发者的方法。许多团队已经提供了这类服务。 Telegram 预警机器人:
在 Telegram 上搜索 pumpfun bot, pumpfun sniper 等关键词,你会找到很多现成的机器人。你只需要加入它们的频道或群组,它们就会实时推送新币的合约地址、图表链接等信息。 优点:零代码,开箱即用。 缺点:可能收费,消息可能有延迟,且所有人收到的信息一样,没有竞争优势。
第三方API服务: 一些数据提供商(如 Birdeye, DexScreener)提供 API,你可以查询最新上线的代币。虽然不直接标注“Pump.fun”,但你可以通过筛选链(Solana)和上市时间来实现类似效果。 优点:无需自己维护基础设施,相对可靠。 缺点:通常不是完全实时的,可能有几分钟延迟,并且需要支付API费用。
方法二:监听Pump.fun和Raydium的官方程序(编程实现)这是最直接、最实时的方法,需要开发者技能。核心是监听特定的 Solana 程序(Program)发出的指令或日志。 技术栈建议:语言: JavaScript/TypeScript (最流行) 库: @solana/web3.js RPC 节点: 需要一个速度快、可靠的私人 RPC 节点(如 Helius, QuickNode)。公共节点可能无法处理高负载的实时监听。
关键程序地址:Pump.fun 主程序: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P Pump.fun 绑定程序 (Bonding Curve): 4z4dduMSFKFJ7bD1dmPfP4i6oB7c5fT1dNJlY1L8Z6f7 Raydium CPMM (创建池子的程序): 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8
实现步骤:建立连接:连接到 Solana 主网的 WebSocket RPC。 订阅日志:订阅上述关键程序的日志(logsSubscribe),特别是 Raydium 的 CPMM 程序。因为最终上线的标志就是在 Raydium 创建了流动性池。 解析日志:当收到日志时,解析其中的信息。日志中会包含新创建的流动性池地址、代币 mint 地址等信息。 过滤和提取:编写逻辑来过滤和提取你关心的信息,例如只处理 initialize2 指令(在 Raydium 中创建新池子的指令)。 后续操作:获取到新代币地址后,你可以进一步查询其元数据(名称、符号)、检查是否有恶意代码、或者触发你的交易机器人等。
代码示例(概念性,非完整代码):javascript
import { Connection, PublicKey } from '@solana/web3.js';// 使用你的私人 RPC URL,公共的会很快达到速率限制const connection = new Connection('https://your-private-rpc-url', 'confirmed');const raydiumProgramId = new PublicKey('675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8');// 订阅日志const subscriptionId = connection.onLogs( raydiumProgramId, (logs, context) => { // 解析日志,查找 ‘initialize2’ 指令的签名 if (logs.logs.some(log => log.includes('initialize2'))) { // 根据交易签名获取交易详情,从中提取新池子和代币的信息 connection.getTransaction(logs.signature, { commitment: 'confirmed', maxSupportedTransactionVersion: 0 }).then(tx => { if (tx && tx.meta && tx.transaction) { // 复杂的解析逻辑开始 // 1. 找到指令 accounts 中的 tokenAccount 和 mint address // 2. 通常 mint address 是 accounts 数组里的某个位置 // 这是一个复杂且容易因程序更新而失效的步骤,需要仔细研究Raydium的指令结构 const accounts = tx.transaction.message.staticAccountKeys; const tokenMint = accounts[/* 需要根据指令结构确定的索引 */.toBase58(); console.log(`[!] 新代币池子已创建! Mint: ${tokenMint}`); console.log(` 交易签名: https://solscan.io/tx/${logs.signature}`); // 在这里可以调用你的其他函数来处理这个新代币 // handleNewToken(tokenMint, logs.signature); } }); } }, 'confirmed' // 承诺级别);// 以后想取消监听时// connection.removeOnLogsListener(subscriptionId);
重要警告:直接解析交易指令和日志非常复杂且脆弱。Raydium 或 Pump.fun 的程序更新可能会改变指令结构,导致你的解析器失效。你需要经常查阅最新的程序文档或开源监听器的实现来更新你的代码。 方法三:监听DexScreener等网站的WebSocket(折中方案)这是一个巧妙的“曲线救国”方法。DexScreener 的 UI 会实时显示新币对,它的后端必然有一个数据源。 打开浏览器开发者工具,进入 DexScreener 的 Solana 新币页面。 在网络(Network)标签页中筛选 WS(WebSocket)请求。 你会发现 DexScreener 通过 WebSocket 接收实时价格和新配对信息。 你可以尝试模拟连接这个 WebSocket,并订阅新代币对频道。
优点:比方法二简单,不需要解析复杂的链上交易。
缺点: 总结与建议方法 难度 实时性 可靠性 成本 建议人群
一:现成Bot/API低中高低至中普通用户、初学者
二:监听链上程序高极高中(需维护)中(RPC成本)高级开发者、MEV机器人开发者
三:监听数据商中高低低喜欢折腾的开发者
|