概述
OrbitFlare Jetstream 是一个高性能 gRPC 服务,用于实时流式传输 Solana 交易。它在更丰富、更灵活的协议之上提供极低延迟的数据流——让您可以即时调整订阅,并接收预先计算好的交易元数据,从而让客户端的工作更少。亮点
- 动态过滤器——在数据流打开期间随时添加和移除过滤器,每个过滤器都带有由客户端选择的
filter_id,并会在每笔匹配的交易上回显。无需重连,且每次更改都会通过FilterResult得到确认。 - 可选富化——直接在每笔交易上请求
fee_payer、writable_accounts、program_ids、compute_unit_price(计算单元价格,即微 lamports/CU,而非总费用)、compute_limit、tx_size以及已解析的地址查找表地址,而无需在客户端重新推导。 - 槽位生命周期流——专用的
SubscribeSlots流为每个槽位发出ALIVE/COMPLETE/DEAD事件,并附带当前 leader 和父槽位。 - 内置存活检测——每条消息都携带一个单调递增的
sequence编号用于间隙检测,并且当交易流空闲时服务器会发出Heartbeat。 - 按需富化——默认情况下,交易是一条包含核心字段的扁平消息;随时可以按订阅开启富化,在您需要时添加额外字段。
身份验证
在x-token gRPC 元数据头中提供您的 API 密钥,或使用 IP 白名单身份验证。设置详情请参见身份验证。
连接
- 选择离您基础设施最近的区域端点。
- 从
jetstream.v2protobuf 定义生成客户端——请参见参考文档中的代码生成。 - 使用您的
x-tokenAPI 密钥(或从白名单 IP)进行身份验证并打开数据流。
流式传输的工作原理
SubscribeTransactions 是一个双向流——您可以在接收数据的同一连接上管理订阅:
- 打开数据流并发送一个包含一个或多个过滤器的
AddFilters请求。每个过滤器至少需要account_include/account_exclude/account_required之一。(空的”匹配一切”过滤器会被拒绝。)account_required是任一匹配——如果一笔交易引用了所列账户中的至少一个,则匹配,而不需要引用全部账户。 - 服务器为每个过滤器回复一个
FilterResult(accepted,或一个rejection_reason)。 - 匹配的交易作为
FilteredTransaction消息到达,每条都列出它所匹配的filter_id值。 - 随时发送
AddFilters/RemoveFilters来更改您接收的内容——无需重连。 - 当交易流空闲时,服务器会发送
Heartbeat消息;请使用它们(以及Ping/Pong)来确认存活。 - 跟踪
sequence编号以检测任何间隙,如果数据流关闭则重新连接(并重新发送您的过滤器)。
include_enrichment: true。
富化是面向整个订阅的:如果您的任一活动过滤器设置了
include_enrichment,则该会话接收的每笔交易都会被富化。在您需要额外字段时,随时可以按订阅开启它——它不会给数据流增加任何延迟;唯一的区别是消息略大一些。槽位事件
打开SubscribeSlots(一个独立的、服务器流式 RPC,无参数)以接收每次槽位转换的 SlotEvent:
ALIVE——收到了该槽位的第一个 shred。COMPLETE——收到了该槽位的最后一个 shred。DEAD——该槽位被跳过,或在未完成的情况下被后续槽位取代。
current_leader(32 字节公钥,当前 leader 可用时)和 parent_slot。
从 v1 迁移
早期的 Jetstream v1 协议已弃用,但仍可供现有集成使用。如果您正在使用 v1,两个服务在相同的端点上并行运行,因此迁移只是客户端的协议改动,网络无需任何变更。逐字段的对照请参见从 v1 迁移,或参见已弃用的 v1 概述。最佳实践
- 过滤——始终设置至少一个账户约束,并为每个过滤器使用稳定且唯一的
filter_id,以便您可以关联匹配结果并在之后移除过滤器。 - 富化——除非您需要额外字段,否则将其关闭;它会应用于整个订阅。
- 重连——跟踪
sequence以发现间隙并自动重连,同时重新发送您的过滤器。 - 存活检测——依靠
Heartbeat/Ping来检测停滞的连接。
另请参阅
从 v1 迁移
逐字段的 v1 到 Jetstream 对照,以及每项能力为您节省的工作。
协议参考
完整的 Protocol Buffer 规范、端点和代码生成。
Jetstream v1(已弃用)
已弃用的 v1 概述、客户端示例和过滤指南。
Yellowstone gRPC
支持内部指令和完整元数据的基于 Geyser 的全保真度流式传输。