Skip to main content

什么是 Parsed Streams?

Parsed Streams 是一项 WebSocket 服务,它会监视每笔已确认的 Solana 交易(不包括投票交易)、对其进行解码,并向你推送符合自定义过滤器的交易。你可以指定“我关注 Jupiter 路由指令”或“我关注涉及此账户的任何交易”,服务器将为你完成监视、解码和匹配。 你收到的是已解码的完整交易:其中包含带有具名参数和具名账户的每条指令、费用、完整账户密钥列表、交易级别的 summary(描述发生了什么)、SOL 和代币转账,以及指向与你的过滤器匹配的具体指令的引用。所有数据均以 confirmed 确认级别交付。

心智模型

如果你已经了解 Solana 的内部机制,可以跳过本节。否则,请先了解整个 API 所基于的模型。 交易是一条已签名的消息。它指定费用支付者,列出将涉及的所有账户,并包含一组指令。查看一笔交易时,你会看到:签名(其唯一 ID)、交易所在的时隙、已支付的费用、账户密钥、交易成功还是失败,以及其中的指令。 指令表示一个操作:使用这些账户和此输入运行这个程序。例如 Jupiter 上的兑换、代币转账或备注。一笔交易通常包含多条指令,这些指令会按顺序运行。 程序可以调用其他程序。 Jupiter 执行兑换时,并不会自行转移代币。它的路由指令会调用代币程序来转移代币,并调用持有流动性的交易所程序。这些嵌套调用同样是指令,称为内部指令(或 CPI,即跨程序调用)。编写过滤器时,这一点很重要:许多实际活动(例如兑换中的实际代币转移)都发生在内部指令中,因此默认情况下,过滤器也会匹配这些指令。如果只需要用户签名时直接包含的指令,请将 includeCpi 设置为 false。 账户是指令操作的链上对象,例如钱包、代币余额、池和铸币账户。每条指令都以有序地址列表的形式携带这些账户,其顺序就是约定:程序定义每个位置的含义。例如,代币程序要求先提供转出代币的账户,然后是接收代币的账户,最后是批准转账的所有者。 角色为这些位置赋予名称。大多数知名程序都会发布一份机器可读的接口说明,称为 IDL。该说明列出了程序拥有的每条指令、其数据字段的含义,以及每个账户位置的用途。Helius 为数千个程序维护着这些说明的目录。借助该目录,单纯的地址列表可以转换为具名账户:对于代币转账,位置 0 变为 source,位置 1 变为 destination,位置 2 变为 authority。你无需猜测第三个地址的含义,只需读取 {"name": "authority", "pubkey": "9xQe...", "isSigner": true}。这些名称就是可用于过滤的角色。 解码是将相同理念应用于指令的输入数据。在网络传输中,这些数据是不透明的字节。借助程序的说明,这些字节会转换为具名值:{"in_amount": "1000000", "slippage_bps": 50}。并非每条指令都能解码,因此每条指令都会处于以下三种状态之一,你可以直接通过其字段判断:
  • 已解码:指令包含一个 decoded 对象,其中包含具名的 args 和具名的 accounts。
  • 已识别:除 decoded 外,指令还包含一个 summary,其中包括 type(例如 swap)、人类可读的 description,以及结构化的 parsedData 载荷,例如包含数量和铸币地址的兑换元数据。
  • 未解码:程序或指令不在目录中,decoded 为 null。指令会改为包含原始字节(rawData)和普通地址列表(rawAccounts),确保你始终有可供处理的数据。
这就是完整的模型,你的过滤器直接基于该模型构建:
  • programs:指令调用哪个程序
  • instructionNames:程序说明如何命名该操作
  • accounts.include:指令涉及哪些地址
  • accounts.roles:哪个具名位置必须包含哪个地址
  • includeCpi 和 includeFailed:是否包含内部指令和失败的交易
过滤器选择指令;通知交付完整交易。

对比其他服务

vs Enhanced WebSockets

Enhanced WebSockets 会流式传输完整交易或账户更新,但不进行解码。Parsed Streams 在指令级别执行匹配,并为你解码所有内容。

vs LaserStream gRPC

LaserStream 是高吞吐量的 gRPC 数据流,需要你在客户端进行过滤和解码。Parsed Streams 是在服务器端执行过滤和解码的 WebSocket API。

vs Parsed Events

Parsed Events 对历史交易应用相同的解码方式:通过 REST 按需解析签名,或分页浏览某个地址的历史记录。Parsed Streams 会在新交易上链时将其推送给你。

支持的程序

Parsed Streams 可通过链上 IDL 解码 3,600 多个程序,还可通过内置解码器解码 SPL Token、Token-2022 和 System Program 等核心程序。你可以按任意程序地址进行过滤。对于服务无法解码的指令,将改为流式传输其原始指令数据。 以下是部分最常用的可解码程序:
没有看到某个程序?它很可能仍在目录中。使用该程序的地址调用 describeProgram,即可查看其指令、事件和账户角色。

访问权限和定价

Parsed Streams 已面向所有套餐正式开放,包括免费套餐。它取代了 Enhanced Transaction Webhooks,用于提供实时解析后的交易数据。你可以从 Helius Dashboard 获取 API 密钥。 每个交付的事件消耗 1 个积分,费率与 webhook 事件相同。完整价格列表请参阅积分。 Parsed Streams 通过 Gatekeeper 端点提供服务,该端点与 Helius RPC 和 WebSocket 流量使用同一主机。Parsed Streams 没有单独的主机:
使用项目的 API 密钥进行身份验证,并将其作为 api-key 查询参数(或 x-api-key 请求头)传递。连接建立时会验证密钥:缺少密钥或密钥无效时,将返回 HTTP 401;如果项目达到连接数上限,则返回 HTTP 429。

开始使用

Quickstart

连接、发送第一个过滤器并读取通知。

Track Jupiter Swaps

使用程序发现功能构建并订阅真实的过滤器。

Track Pump.fun Mints

一个可安全重连的监听器,用于记录每次新的 Pump.fun 代币部署。

Handling Reconnects

检测断开连接、执行退避、重新订阅,并回填遗漏的时隙。