先决条件: 一 个 Helius API 密钥(用于 Mainnet LaserStream 的商务或专业计划)和 Node.js 18+。熟悉 账户订阅 和 交易监控 有帮助但不是必须的。
设置
创建一个新项目,安装 SDK +bs58(用于解码交易签名),并设置您的 API 密钥:
脚本
将其另存为index.ts,然后运行 npx ts-node index.ts:
脚本的功能
一个订阅,两个过滤块
一个subscribe(...) 调用包含两个命名的过滤组:
accounts过滤接收每当数据变化时 Pump.fun 程序拥有的每个账户(债券曲线、铸造状态等)。transactions过滤接收每个与 Pump.fun 程序交互的交易。vote: false, failed: false标记在到达您的处理程序之前删除投票和失败的交易。
读取原始字段
负载中的几个值需要进行小的转换,以便于使用:tx.signature是一个Buffer。通过bs58.encode(...)运行它,以获得在资源管理器或getTransaction响应中看到的 base58 签名。tx.meta.fee是一个以字符串存储的 u64,以确保在 JavaScript 中不会丢失Number.MAX_SAFE_INTEGER以上的精度。在进行算术运算之前,将其包裹在Number(...)中。同样的 u64 字符串约定也适用于多个区块级字段 — 请参阅 Slot & Block Monitoring 以了解完整的数据结构。
滚动统计
setInterval 每 60 秒打印一次快照:总交易数、成功与失败、吞吐量、唯一费用支付者和 SOL 中的总费用。在脚本退出之前按下 Ctrl+C 可获得最后一次快照。
扩展脚本
一些进一步发展的方向:- 解码指令判别器,将交易标记为
buy/sell/create— 有关解析模式,请参阅解码交易数据。 - 持久化滚动统计数据,将其存储到数据库(Postgres、Redis、ClickHouse),而不是内存中的
Set/ 计数器。 - 在达到阈值时发出警报 — 例如高额手续费支付者、交易量突然激增、新的联合曲线账户。
- 重放启动时错过的活动:在
SubscribeRequest上设置fromSlot(最多可回溯 48 小时 — 请参阅历史重放)。 - 结合时隙与区块监控,获取区块级上下文。
- 仅跟踪一个代币,而不是整个程序:将铸币地址放入
accountInclude,并在交易过滤器上设置matchMints: true,以接收该代币的每笔转账、兑换、铸造和销毁交易(请参阅代币铸币地址过滤)。
后续步骤
交易监控
此脚本使用的一般交易过滤模式。
解码交易数据
将二进制交易负载解析为可读的Solana交易。
账户订阅
使用过滤器监控特定账户状态更改。
历史重放
从起始槽重放过去最多24小时的Pump.fun活动。