跳转到主要内容
LaserStream提供与Geyser节点完全相同的交付保证。本指南介绍了LaserStream流的消息交付行为。
这些保证适用于标准订阅(交易、账户、插槽、区块)。预处理交易在独立的、尽力而为的交付保证下运行。

完全一致交付

LaserStream保证完全一致交付。每条消息仅传送到您的流一次——您不会收到重复的消息,也不会跳过任何消息。 LaserStream通过同时连接到多个Solana节点并对传入数据进行去重后再将其转发到您的流来实现这一点。这种多节点架构也消除了单点故障,确保最大化正常运行时间而不牺牲交付的准确性。

根据承诺级别的消息排序

交付顺序取决于消息的承诺级别:

已确认和已最终化

所有已确认已最终化的消息都是按顺序传送的。您可以依赖这些承诺级别提供一致的、连续的链上状态视图。

已处理

所有已处理的消息按照升序插槽顺序发出,除非出现分叉。在发生分叉的情况下,插槽顺序可能会暂时偏离,因为网络会围绕规范链重新组织。一旦分叉解决,升序顺序将恢复。
在已处理的承诺级别,有可能处理的插槽可能会被跳过或分叉。Geyser对于被分叉的数据发送明确的回滚通知。如果您的应用程序消耗已处理级别的数据,您必须考虑到某些更新可能属于最终被放弃的插槽的可能性。对于需要确定性的应用程序,请使用已确认已最终化的承诺级别。

插槽内的排序

在单个插槽内,LaserStream 提供以下保证的账户更新和交易:

交易前的账户更新

对于每笔交易,它导致的账户更新在交易之前被交付:
<accounts updated by tx X> → <tx X> → <accounts updated by tx Y> → <tx Y>

跨交易排序

LaserStream 保留与 Agave 的 Geyser 插件 相同的排序。不同交易的更新是否以确定性顺序到达取决于它们的写锁
  • 相同写锁(例如,同一 Raydium 池上的三个交易):始终是确定的。因为它们写入同一个账户,Agave 顺序执行这些。
  • 不同写锁(例如,两个无关的交易):不一定是确定的。Agave 可能会并行执行这些交易,它们的更新可能会在流中交织在一起。
要在不考虑写锁情况下重建完全确定的顺序,请使用交易数据中的块/交易索引

写版本标准化

LaserStream 在其多节点架构中标准化写版本。与原始 Geyser 或 Yellowstone — 写版本在每个节点是本地的并且可能不同 — 不同,LaserStream 提供的写版本是一致的,你可以依赖这些版本来排序已处理级别的账户更新。
临时例外: 由于性能原因,当前大小超过 512KB 的账户在 Geyser 插件中被缓冲,这可能会影响这些账户的确定性排序。该限制将在不久后被移除。

插槽通知

已处理的插槽通知在该插槽的所有消息交付后到达。这意味着当你收到已处理的插槽通知时,可以确信与该插槽相关的所有交易和账户更新数据都已经发送到你的流中。你可以使用插槽通知作为信号来刷新或释放该插槽的缓冲数据。

断开连接时的数据连续性

LaserStream 保持一个最近 slot 数据的缓冲区,支持最多 24 小时(约 216,000 slots)的历史重播。如果您的应用程序断开连接,您可以重新连接并从上一个已处理的 slot 恢复,而不会丢失任何数据。 使用 LaserStream SDK 客户端 时,此恢复过程自动处理——客户端通过 slot 编号跟踪您的流位置并无缝重新连接。无需手动重新连接逻辑。

承诺级别参考

LevelDescriptionLatencyOrderingRevert Risk
Processed节点已知的最近区块中包含;尚无集群范围的投票~400ms升序 slot 顺序(可能在分叉期间打破)slots 可能被跳过或分叉的风险较小
Confirmed占多数的权益(≥66%)对区块进行了投票(乐观确认)数秒严格排序可以忽略不计
Finalized已确认且至少有 31 个额外确认区块构建在其上(32 投票锁定)~12-15 秒严格排序实际上不可逆