BlockReq
返回全部文章

Rpc Tutorials

如何在浏览器里监听 Solana 新币发射(可运行示例)

如何用浏览器 WebSocket logsSubscribe 监听 Solana 新 mint:场景与原理、StackBlitz 可运行示例(公共 endpoint),过滤 InitializeMint / InitializeMint2,再用 getTransaction 解析 mint。

BlockReq Engineering2026年9月5日8 分钟阅读

如何在浏览器里监听 Solana 新币发射(可运行示例)

想做看板、告警,还是机器人「第一时间看到新 mint」?不一定先上 Geyser。本文按「如何监听」教程写法:先讲场景与原理,再用 **StackBlitz 可运行示例** 订 Token Program 日志、过滤 InitializeMint / InitializeMint2,再从 signature 用 getTransaction 取出 mint。

本文**不依赖**自定义 RunSnippet / OPTIONS;可运行路径是 StackBlitz 嵌入。示例默认连 BlockReq **公共** endpoint(已对 HTTPS getHealth 做过连通性探测,结果为 ok)。公共节点按 IP 限流,适合学习,不适合长时间高频生产订阅。

1. 场景:为什么要听新 mint

常见需求三类:

  • **看板**:列出新发射的 mint,再补 metadata、流动性、部署者。
  • **告警**:只关心特定程序路径(例如某 launchpad)或异常高频创建。
  • **机器人**:检测到创建指令后走解析 / 下单(延迟与误报都很敏感)。

共同点:要的是「某类指令刚出现」的推送,而不是轮询 getProgramAccounts。浏览器最小路径就是 WebSocket logsSubscribe;服务端高吞吐再考虑 Geyser / Yellowstone。

2. 原理:logsSubscribe vs Geyser

logsSubscribe(JSON-RPC WebSocket)Geyser / Yellowstone gRPC
接入成本浏览器、任意语言都能连需要 gRPC 客户端,浏览器不直接友好
数据形态日志字符串 + signature结构化账户 / 交易 protobuf
延迟与吞吐够做看板、告警;高频时易抖更适合低延迟、大规模过滤
过滤粒度mentions **一次只能一个地址**;细节靠客户端扫 log服务端按 program / account 等细过滤
断线重连后窗口内容易丢,需自补部分实现可从 slot 续订 / 回放

**怎么选:** 原型、浏览器 demo、轻量告警 → logsSubscribe。生产级 sniper、大规模索引 → Geyser,需要时再用 RPC 补详情。

经典 SPL Token 创建日志类似:

Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]
Program log: Instruction: InitializeMint

更常见的是 InitializeMint2。Token-2022 程序 ID 不同,指令名同样会出现在 log 里。

官方参考:[logsSubscribe](https://solana.com/docs/rpc/websocket/logssubscribe)。

3. 可运行示例 #1:订阅 Token Program → 过滤 InitializeMint

打开下方 StackBlitz 后,若预览未自动跑,请点 **Run**(ctl=1)。示例默认:

  • WSS:wss://solana-rpc.blockreq.com/v1/rpc/public
  • HTTPS:https://solana-rpc.blockreq.com/v1/rpc/public
  • 无 API Key、无 .env 密钥

仓库:[blockreq/blog-demos](https://github.com/blockreq/blog-demos)(examples/solana-new-mint)。

程序常量:

  • SPL Token:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
  • Token-2022:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb

4. 走读:这个 demo 在干什么

逐步对应 src/index.ts / src/shared.ts

  1. **连 WSS** — 打开 BlockReq 公共 WebSocket。
  2. **订两条 logsSubscribe** — mentions 每次只能一个地址,所以 Token 与 Token-2022 各订一次,commitment: "confirmed"
  3. **过滤日志** — 用正则匹配 Instruction: InitializeMint / InitializeMint2;丢掉 err != null 的失败交易。
  4. **去重** — 用 signature Set,避免重放刷屏。
  5. **打印 signature** — 先输出 [mint?] slot=… sig=…;随后可选调 getTransaction 解析 mint。
  6. **断线重连** — onclose 后指数退避重连,并重新订阅。

关键订阅参数(示意):

params: [{ mentions: [programId] }, { commitment: 'confirmed' }]

过滤核心:

const MINT_LOG = /Instruction:\s*InitializeMint2?/i;
if (!logs.some((line) => MINT_LOG.test(line))) return;

5. 从 signature 到 mint:getTransaction

日志订阅本身通常**不会**直接给出 mint 公钥。生产流程:看到 InitializeMint* → 用同一节点的 HTTPS 调 getTransactionencoding: "jsonParsed")→ 从顶层 / inner instructions 里找 initializeMint / initializeMint2,读 parsed.info.mint

第二个入口在同一示例里:src/get-mint.ts(页面 get-mint.html)。嵌入打开后同样请点 **Run**。

解析思路(与 demo 一致):

  1. POST getTransaction,带 maxSupportedTransactionVersion: 0
  2. 合并 message.instructionsmeta.innerInstructions[].instructions
  3. 筛选 program 为 Token / Token-2022,且 parsed.typeinitializemint
  4. 返回 parsed.info.mint

把 watcher 打印的 signature 粘进第二个页面即可验证。

6. 换成 BlockReq 带 Key:只讲做法,demo 不含密钥

可运行 demo **故意只用公共 endpoint**,仓库里不会出现 API Key。你自己的应用要长期订阅时:

用途Endpoint
公共 HTTPShttps://solana-rpc.blockreq.com/v1/rpc/public
私有 HTTPShttps://solana-rpc.blockreq.com/v1/rpc/{API_KEY}
公共 / 私有 WSSwss://…/publicwss://…/{API_KEY}

公共按 **IP 限流**;长期订阅请用私有 Key,并在控制台确认 WSS / 订阅对你的套餐开启。客户端仍要自己做:指数退避重连、重订、signature 去重。多上游故障转移解决的是「节点挂了还能通」,不是「浏览器 WS 永不掉」。

更多:[Public Endpoints](https://docs.blockreq.com/build/public-endpoints/) · [Solana API](https://docs.blockreq.com/build/api-reference/solana/)

7. 踩坑:噪音、假币、确认数、launchpad

**噪音** — 订 Token Program 会收到海量 Transfer / MintTo;务必先过滤 InitializeMint(2),再 getTransactionprocessed 更快更抖;看板可用 confirmed,资金逻辑更偏向 finalized

**假币 / 垃圾发射** — 链上能 InitializeMint ≠ 有流动性 ≠ 可信 metadata。建议二次校验:权限是否立即 revoke、是否立刻建池、metadata URI、部署者历史。

**launchpad** — pump.fun 等往往走自己的 program create,不一定等于裸调 Token InitializeMint。要盯它们,应 mentions 对应 program ID,并按该程序规则解析;只扫 Token 会漏,只扫 launchpad 会漏手工 spl-token create-token

**确认数与漏消息** — 重连空窗、限流、日志截断都会漏。重要业务用第二来源对账(短时 getSignaturesForAddress 或 Geyser 备份流)。失败交易里也可能出现指令名字符串——示例直接丢弃 err != null

---

小结

  1. 浏览器路径:WebSocketlogsSubscribe + mentions: [Token Program] → 过滤 InitializeMint(2)getTransaction 取 mint。
  2. Token 与 Token-2022 分开订;launchpad 另订其 program。
  3. logsSubscribe 适合原型与轻量告警;低延迟大规模用 Geyser。
  4. 可运行示例在 StackBlitz / [blog-demos](https://github.com/blockreq/blog-demos);换成带 Key 的 BlockReq 只改 URL,不要把 Key 写进公开仓库。

下一步通常是:解析 mint → 拉 metadata → 盯池子创建。那是另一篇文章的事了。