> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OrbitFlare Jetstream v2

> 面向 Solana 的下一代 gRPC 流式传输——富化、槽位事件与动态过滤器

<Success>
  Jetstream v2 是 OrbitFlare 交易流的下一代产品：同样的低延迟数据流，新增了**可选的逐笔交易富化**、**槽位生命周期事件**，以及无需重连即可更改的**动态过滤器**。
</Success>

## 概述

OrbitFlare Jetstream v2 是一个高性能 gRPC 服务，用于实时流式传输 Solana 交易。它在更丰富、更灵活的协议之上提供与 v1 相同的极低延迟数据流——让您可以即时调整订阅，并接收预先计算好的交易元数据，从而让客户端的工作更少。

v2 与 v1 在**相同的端点**上提供服务（`JetstreamV2` 服务在同一连接上按 gRPC 方法路径进行路由），因此您的网络设置无需任何改动——唯一的区别只是您用来生成客户端的协议。

## 亮点

* **动态过滤器**——在数据流打开期间随时添加和移除过滤器，每个过滤器都带有由客户端选择的 `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`。
* **按需富化**——默认情况下，v2 交易是一条包含核心字段的扁平消息；随时可以按订阅开启富化，在您需要时添加额外字段。

如需逐项对照每项能力及其为您节省的工作，请参见 [v2 有哪些新变化](/cn/data-streaming/jetstream-v2-vs-v1)。

## 身份验证

身份验证与 v1 相同：在 `x-token` gRPC 元数据头中提供您的 API 密钥，或使用 IP 白名单身份验证。设置详情请参见[身份验证](/cn/authentication)。

## 连接

1. 选择离您基础设施最近的[区域端点](/cn/data-streaming/jetstream-v2-reference#available-endpoints)（与 v1 主机相同）。
2. 从 `jetstream.v2` protobuf 定义生成客户端——请参见参考文档中的[代码生成](/cn/data-streaming/jetstream-v2-reference#code-generation)。
3. 使用您的 `x-token` API 密钥（或从白名单 IP）进行身份验证并打开数据流。

## 流式传输的工作原理

`SubscribeTransactions` 是一个**双向**流——您可以在接收数据的同一连接上管理订阅：

1. 打开数据流并发送一个包含一个或多个过滤器的 `AddFilters` 请求。每个过滤器至少需要 `account_include` / `account_exclude` / `account_required` 之一。（空的"匹配一切"过滤器会被拒绝。）`account_required` 是**任一匹配**——如果一笔交易引用了所列账户中的至少一个（与 `account_include` 相同，也与 v1 相同），则匹配，而不需要引用全部账户。
2. 服务器为每个过滤器回复一个 `FilterResult`（`accepted`，或一个 `rejection_reason`）。
3. 匹配的交易作为 `FilteredTransaction` 消息到达，每条都列出它所匹配的 `filter_id` 值。
4. 随时发送 `AddFilters` / `RemoveFilters` 来更改您接收的内容——无需重连。
5. 当交易流空闲时，服务器会发送 `Heartbeat` 消息；请使用它们（以及 `Ping`/`Pong`）来确认存活。
6. 跟踪 `sequence` 编号以检测任何间隙，如果数据流关闭则重新连接（并重新发送您的过滤器）。

要接收富化交易，请在过滤器上设置 `include_enrichment: true`。

<Note>
  富化是**面向整个订阅**的：如果您的任一活动过滤器设置了 `include_enrichment`，则该会话接收的每笔交易都会被富化。在您需要额外字段时，随时可以按订阅开启它——它不会给数据流增加**任何延迟**；唯一的区别是消息略大一些。
</Note>

## 槽位事件

打开 `SubscribeSlots`（一个独立的、服务器流式 RPC，无参数）以接收每次槽位转换的 `SlotEvent`：

* `ALIVE`——收到了该槽位的第一个 shred。
* `COMPLETE`——收到了该槽位的最后一个 shred。
* `DEAD`——该槽位被跳过，或在未完成的情况下被后续槽位取代。

每个事件都包含 `current_leader`（32 字节公钥，当前 leader 可用时）和 `parent_slot`。

## 选择 v1 还是 v2

对于新集成，v2 是推荐的协议——富化、槽位事件和动态过滤都在这里。v1 仍然可用并受支持；如果您已有 v1 客户端，目前没有强制迁移。这两个服务在相同的端点上并行运行。

## 最佳实践

1. **过滤**——始终设置至少一个账户约束，并为每个过滤器使用稳定且唯一的 `filter_id`，以便您可以关联匹配结果并在之后移除过滤器。
2. **富化**——除非您需要额外字段，否则将其关闭；它会应用于整个订阅。
3. **重连**——跟踪 `sequence` 以发现间隙并自动重连，同时重新发送您的过滤器。
4. **存活检测**——依靠 `Heartbeat` / `Ping` 来检测停滞的连接。

## 另请参阅

<CardGroup cols={3}>
  <Card title="v2 有哪些新变化" icon="code-compare" href="/cn/data-streaming/jetstream-v2-vs-v1">
    完整的 v1 与 v2 对比，以及每项能力为您节省的工作。
  </Card>

  <Card title="v2 协议参考" icon="book" href="/cn/data-streaming/jetstream-v2-reference">
    完整的 v2 Protocol Buffer 规范、端点和代码生成。
  </Card>

  <Card title="Jetstream (v1)" icon="bolt" href="/cn/data-streaming/jetstream">
    v1 概述、客户端示例和过滤指南。
  </Card>

  <Card title="Yellowstone gRPC" icon="wave-pulse" href="/cn/data-streaming/yellowstone">
    支持内部指令和完整元数据的基于 Geyser 的全保真度流式传输。
  </Card>
</CardGroup>

## 支持

如需有关 Jetstream v2 的技术支持或问题咨询，请联系我们的支持团队或加入我们的 [Discord 社区](https://discord.gg/orbitflare)。
