可用端点
Jetstream v2 与 v1 在相同的端点上提供服务——没有单独的主机。JetstreamV2 服务通过同一 HTTP/2 连接暴露,并按 gRPC 方法路径进行路由,因此您可以像连接 v1 一样连接到离您基础设施最近的区域。
- US
- Europe
- Asia Pacific
Jetstream 的 gRPC 连接使用纯
http://(而非 https://)。gRPC 会在 HTTP/2 上协商自己的传输层安全。仅当您的专用节点明确要求时才使用 https://。身份验证
身份验证与 v1 相同:在x-token gRPC 元数据头中提供您的 API 密钥,或使用 IP 白名单身份验证。详情请参见身份验证。
Protocol Buffer 规范
本文档概述了 OrbitFlare Jetstream v2 所使用的 Protocol Buffer(protobuf)规范。完整的规范可在我们的 GitHub 仓库中找到——在那里下载jetstream_v2.proto 以生成您的客户端,或使用下面转载的定义。jetstream.v2 包完全独立于 v1——请从它生成一个单独的客户端。
服务定义
请求消息
SubscribeTransactions 是一个双向流。客户端发送一系列请求消息——每条恰好携带一个负载——以在数据流打开期间管理其订阅。
SubscribeTransactionsRequest
添加过滤器
过滤器在数据流打开期间动态添加。每个过滤器都携带一个由客户端选择的filter_id,它会在每笔匹配的交易上以及在验证确认中回显。
过滤器必须指定
account_include / account_exclude / account_required 中的至少一个。空的(匹配一切的)过滤器会被拒绝——参见 FilterResult。移除过滤器
响应消息
SubscribeTransactionsResponse
数据流上的每条消息都携带一个服务器时间戳和一个单调递增的sequence 编号(每个流),以便客户端可以检测间隙。恰好设置一个负载。
过滤器验证
在每次AddFilters / RemoveFilters 之后,服务器为每个过滤器返回一个 FilterResult,确认接受或说明拒绝的原因。
心跳
已过滤交易
每笔匹配的交易都会列出它所匹配的filter_id 值,随后是交易本身。
共享类型
槽位流式传输
SubscribeSlots 是一个槽位生命周期事件的服务器流。它不接受任何参数——打开数据流即可随着槽位推进接收事件。
非流式方法
使用该协议
一个典型的 v2 客户端:- 从上面的
jetstream.v2定义生成客户端代码。 - 打开
SubscribeTransactions双向流并进行身份验证(x-token头或 IP 白名单)。 - 发送一个包含一个或多个
TxFilter条目的AddFilters请求,每个条目都有唯一的filter_id。 - 读取
FilterResult确认,然后读取FilteredTransaction消息流。 - 随时添加或移除过滤器,无需重新打开数据流。
- 跟踪
sequence以检测间隙,并将连接关闭视为重连的信号。 - 可选地打开
SubscribeSlots(一个独立的数据流)以接收槽位生命周期事件。
代码生成
对于 TypeScript/JavaScript:最佳实践
-
过滤
- 始终设置至少一个账户约束;空过滤器会被拒绝。
- 为每个过滤器使用稳定且唯一的
filter_id,以便您可以关联匹配结果并在之后移除过滤器。
-
富化
- 除非您需要额外字段,否则将
include_enrichment关闭——精简输出更小。启用它不会增加延迟;唯一的代价是消息略大一些。 - 富化是面向整个订阅的:在任一过滤器上启用它会富化该会话接收的每笔交易。
- 除非您需要额外字段,否则将
-
序列与重连
- 跟踪
sequence编号以检测丢失的消息。 - 实现自动重连;重连时,重新发送您的
AddFilters。
- 跟踪
-
存活检测
- 使用
Heartbeat和Ping/Pong来确认数据流健康并测量延迟。
- 使用
另请参阅
Jetstream v2 概述
v2 相比 v1 新增了什么、流式传输模型以及入门。
Jetstream (v1) 参考
v1 Protocol Buffer 规范。