Skip to main content

概述

LaserStream 是一个托管的 Solana gRPC 流式服务。它与开放的 Yellowstone gRPC 协议线兼容,因此任何 Yellowstone 客户端都可以直接使用,并增加了生产功能,如历史重放、多节点故障转移和完全托管的环境。 LaserStream使用开源的gRPC协议,确保没有供应商锁定,并与现有的gRPC实现最大限度兼容。 您可以使用标准 @triton-one/yellowstone-grpc 客户端连接,或使用性能优化的 Helius LaserStream SDK 以获得更高的吞吐量、自动重连、订阅管理、错误处理等额外优势。

LaserStream SDK比JavaScript Yellowstone客户端快40倍

了解我们如何使用Rust Core与零拷贝NAPI绑定来最大化JavaScript SDK的性能
性能注意:如果您在 LaserStream 连接中遇到任何延迟或性能问题,请参阅故障排除部分以获取常见原因和解决方案。
无压缩:为了最小化延迟,LaserStream 不会压缩 gRPC 响应消息。将 Accept-Encoding 设置为 gzip 或 zstd 将无效——响应始终以未压缩形式返回。

终端节点和地区

LaserStream 在全球多个地区提供。 选择离您的应用程序最近的终端节点以获得最佳性能:

主网端点

开发网端点

网络和地区选择
  • 对于 生产应用,选择最靠近服务器的 mainnet 终端节点以获得最佳性能(例如,如果在欧洲部署,请使用阿姆斯特丹 (ams) 或法兰克福 (fra))
  • 对于 测试,使用:https://laserstream-devnet-ewr.helius-rpc.com

日志截断

默认情况下,LaserStream 会截断事务日志消息至 10 KB,以提高速度和性能。如果需要完整日志,可以使用专用的不截断端点 — 见 日志截断

快速开始

从您的 Helius Dashboard 开始使用 LaserStream。主网需要商务或专业计划;Devnet 可以在开发者及以上计划中使用。详情见 计划与定价
1

创建新项目

2

安装依赖

我们使用 tsx,因为 TypeScript 5.x 上的默认 npx tsc --init 设置了 verbatimModuleSyntaxmodule: "nodenext"types: [],这些都会中断快速 ts-node index.ts 运行。tsx 可以在没有 tsconfig 的情况下运行 .ts 文件。
3

获取您的 API 密钥

Helius Dashboard 生成一个密钥。该密钥将作为您 LaserStream 的身份验证令牌。
计划要求:LaserStream devnet 在所有 计划 上可用。LaserStream 主网需要商务或专业计划。
4

创建订阅脚本

使用以下内容创建 index.ts
5

替换您的 API 密钥并选择您的区域

index.ts 中,更新 config 对象:
  1. 您从 Helius Dashboard 获取的实际 API 密钥
  2. 离您服务器位置最近的 LaserStream 端点
网络和区域选择示例:
  • 用于生产(主网)
    • 欧洲:使用 fra(法兰克福)、ams(阿姆斯特丹)或 lon(伦敦)
    • 美国东部:使用 ewr(纽约)
    • 美国西部:使用 slc(盐湖城)或 lax(洛杉矶)
    • 亚洲:使用 tyo(东京)或 sgp(新加坡)
  • 用于开发(Devnet)
    • 使用 https://laserstream-devnet-ewr.helius-rpc.com
6

运行并查看结果

每当一个 confirmed 代币交易涉及 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA 时,您会在控制台中看到数据。

常见工作流程

我们最常见的工作流程的分步指南。每个指南都使用内置自动重连和历史重放功能的 helius-laserstream SDK。

账户订阅

使用过滤器监控特定账户上的余额、数据和所有权变化。

交易监控

流式传输涉及目标账户的交易,根据程序、投票或失败状态进行过滤。

槽和区块监控

跟踪网络共识、区块生成和承诺级别的过渡。

解码交易数据

将二进制 transactionUpdate 负载解析为可读的 Solana 交易。

流泵 AMM 数据

实际案例:使用重连安全过滤器监控泵 AMM 交易。
如果您喜欢原始 Yellowstone 协议,@triton-one/yellowstone-grpc 客户端可以在相同的端点上工作。有关协议级详细信息,请参见 Yellowstone gRPC 参考

订阅请求

在订阅请求中,您需要包含以下一般参数:
历史重放: 您可以选择性地在主 SubscribeRequest 对象中包含一个 fromSlot 字段(u64 数字)以从特定槽位开始重放数据。目前重放限制为最近的 216,000 个槽位(≈24 小时);注意,超过约 20 分钟的重放返回仅最终数据
接下来,您需要指定要订阅的数据的过滤器,例如账户、区块、槽位或交易。
定义槽位更新的过滤器。您使用的键(例如,mySlotLabel)是此特定过滤器配置的用户定义标签,这允许您在需要时可能定义多个命名配置(尽管通常一个就足够了)。
定义账户数据更新的过滤器。您使用的键(例如,tokenAccounts)是此特定过滤器配置的用户定义标签
array
匹配提供的数组中的任何公钥。
array
账户所有者的公钥。匹配提供的数组中的任何公钥。
array
类似于getProgramAccounts中的过滤器。这是一个包含datasize和/或memcmp过滤器的数组。对于memcmp,比较值直接放在bytesbase58base64对象上。
enum
控制您接收哪些更新。默认情况下(lock),对于每个事务写锁定的账户都会发送更新——即使事务从未写入账户。将其设置为write以跳过这些无操作更新,并仅在事务实际写入账户时接收通知。请注意,写入相同数据仍然计为写入并会传递。跳过的更新与之前的状态完全重复,因此如果您依赖更新作为账户被事务锁定的信号(例如,活动跟踪),请不要设置此项。这是通过Helius LaserStream SDK提供的Helius扩展——原始Yellowstone客户端不公开此字段。详情请见notifyOn过滤
如果所有字段为空,则广播所有账户。否则:
  • 字段操作为逻辑 AND
  • 数组内的值作为逻辑 ORfilters 中除外,那里操作为逻辑 AND)。
跟踪超过约10,000个账户?与其使用显式的公钥列表(每个账户32字节),不如使用压缩的cuckoo filter(每个账户约3-4字节)来在一个单一流中订阅成千上万个账户。在Rust和JavaScript SDK中可用。
定义交易更新的过滤器。你使用的键(例如,myTxSubscription)是此特定过滤器配置的用户定义标签如果所有字段都留空,则广播所有交易。否则:
  • 字段操作为逻辑 AND
  • 数组中的值被视为逻辑 ORaccountRequired 除外,所有值必须匹配)。
定义块更新的过滤器。您使用的键(例如 myBlockLabel)是此特定过滤器配置的用户定义标签
其功能类似于 Blocks,但不包括交易、账户和条目。您使用的键(例如 blockmetadata)是此订阅的用户定义标签。目前,块元数据没有可用的过滤器——所有消息默认广播。
订阅分类账条目。您使用的键(例如 entrySubscribe)是此订阅的用户定义标签。目前,没有可用的条目过滤器;所有条目都被广播。

代码示例 (LaserStream SDK)

SDK 选项

我们为多种编程语言提供官方 SDK: 对于其他语言或自定义实现,可以直接使用 Yellowstone gRPC proto 文件 生成您所需语言的 gRPC 客户端。

故障排除 / 常见问题

答: LaserStream 连接性能问题通常由以下几种原因引起:
  • JavaScript 客户端缓慢:JavaScript 客户端在处理过多消息或占用过多带宽时可能会滞后。考虑更精确地过滤您的订阅以减少消息量,切换到 LaserStream JavaScript SDK,或尝试使用其他语言。
  • 本地带宽限制:大量订阅会使带宽限制的客户端不堪重负。监控网络使用情况,考虑升级连接或减少订阅范围。
  • 地理距离:较长的网络路径会增加延迟和数据包丢失。使用 离您服务器最近的端点。对于高延迟连接,增大网络读取缓冲区大小(可提高带宽5倍以上):
    要在重启后保持此设置,请添加到 /etc/sysctl.conf:
    将 HTTP/2 流和连接窗口大小增加到 64MB,以防止流控瓶颈。两者均需增加,仅增加流窗口会让连接级窗口成为限制因素:
  • 客户端处理瓶颈:确保消息处理逻辑经过优化,不会长时间阻塞主线程。
调试客户端延迟:为了帮助您调试客户端,我们构建了一个工具来测试从您的节点到Laserstream gRPC服务器的最大带宽。要使用它,请运行:
输出将返回您的服务器与Laserstream服务器之间的最大网络容量。最低限度,您需要10MB/s来订阅所有交易数据,80MB/s来订阅所有帐户数据。我们建议至少有2倍所需容量以获得最佳性能。
A: 确保您的API密钥和端点是正确的,并且您的网络允许到指定端点的出站gRPC连接。查看Helius状态页面以了解任何正在进行的事件。
A: 仔细检查过滤器部分中描述的逻辑运算符(AND/OR)。确保公钥正确。查看请求中指定的提交级别。
A: 可以,您可以在同一个SubscribeRequest对象下定义多个键的过滤器配置(例如,accounts, transactions)。
A: 我们不实现消费者组。相反,LaserStream提供了团队所需的相同结果:恢复、重播和无协调层的多节点可靠性(以及随之而来的延迟/开销)。我们认为大多数工作负载不需要消费者组,它们增加了延迟和操作开销。例如,单个LaserStream gRPC连接可以发送高达10倍Solana的交易+帐户数据,而大多数客户端订阅的是一个小的、过滤后的片段。使用消费者组在这种情况下会消耗性能余量,并引入另一个故障点。
答: LaserStream 默认将事务日志消息截断至 10 KB,以提高速度和性能。如果您需要完整的日志,请连接到专用的未截断端点 — 请参阅 Log Truncation 以获取列表。
答: 在您的初始 ping 请求中包含一个字段会导致 LaserStream 静默忽略所有订阅过滤器 — 只返回一个 Pong,且没有账户、事务或插槽数据。要解决此问题,请从初始订阅请求中移除 ping,而是在建立订阅后,通过流的接收端单独发送 ping。这会在不中断您的过滤器的情况下保持连接。