概述
LaserStream 的 gRPC 提供基于 Yellowstone 的接口,并通过历史重播、多节点故障转移和完全托管环境等功能进行增强。LaserStream 使用开源的 gRPC 协议,确保没有供应商锁定,并与现有 gRPC 实现最大兼容。 您可以直接连接@yellowstone-grpc
或使用更高级别的 Helius LaserStream SDK 以获得更多好处(自动重连、订阅管理、错误处理等)。
性能注意:如果您在使用 LaserStream 连接时遇到任何延迟或性能问题,请参阅 故障排除部分 以获取与客户端性能和网络优化相关的常见原因和解决方案。
端点与区域
LaserStream 在全球多个区域可用。选择离您的应用程序最近的端点以获得最佳性能:主网端点
区域 | 位置 | 端点 |
---|---|---|
ewr | 纽瓦克,新泽西(靠近纽约) | https://laserstream-mainnet-ewr.helius-rpc.com |
pitt | 匹兹堡,美国(中部) | https://laserstream-mainnet-pitt.helius-rpc.com |
slc | 盐湖城,美国(西海岸) | https://laserstream-mainnet-slc.helius-rpc.com |
lax | 洛杉矶,美国(西海岸) | https://laserstream-mainnet-lax.helius-rpc.com |
ams | 阿姆斯特丹,欧洲 | https://laserstream-mainnet-ams.helius-rpc.com |
fra | 法兰克福,欧洲 | https://laserstream-mainnet-fra.helius-rpc.com |
tyo | 东京,亚洲 | https://laserstream-mainnet-tyo.helius-rpc.com |
sgp | 新加坡,亚洲 | https://laserstream-mainnet-sgp.helius-rpc.com |
开发网端点
网络 | 位置 | 端点 |
---|---|---|
开发网 | 纽瓦克,新泽西(靠近纽约) | https://laserstream-devnet-ewr.helius-rpc.com |
网络与区域选择:
- 对于 生产应用程序,选择离您的服务器最近的主网端点以获得最佳性能。例如,如果在欧洲部署,请使用阿姆斯特丹 (
ams
) 或法兰克福 (fra
) 端点。 - 对于 开发和测试,使用开发网端点:
https://laserstream-devnet-ewr.helius-rpc.com
。
快速开始
1
创建一个新项目
2
安装依赖
3
获取您的 API 密钥
从 Helius Dashboard 生成一个密钥。此密钥将作为您对 LaserStream 的身份验证令牌。
计划要求:LaserStream devnet 需要开发者或商业计划。LaserStream mainnet 需要专业计划。确保您的 Helius 账户具有适当的计划以访问 LaserStream 功能。
4
创建订阅脚本
创建
index.ts
,内容如下:5
替换您的 API 密钥并选择您的区域
在 网络和区域选择示例:
index.ts
中,更新 config
对象,包含以下内容:- 您从 Helius Dashboard 获取的实际 API 密钥
- 离您的服务器位置最近的 LaserStream 端点
- 用于生产(Mainnet):
- 欧洲:使用
fra
(法兰克福)或ams
(阿姆斯特丹) - 美国东部:使用
ewr
(纽约) - 美国西部:使用
slc
(盐湖城) - 亚洲:使用
tyo
(东京)或sgp
(新加坡)
- 欧洲:使用
- 用于开发(Devnet):使用
https://laserstream-devnet-ewr.helius-rpc.com
6
运行并查看结果
confirmed
代币交易涉及 TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
时,您将在控制台中看到数据。订阅请求
在订阅请求中,您需要包含以下通用参数:历史重放: 您可以选择在主
SubscribeRequest
对象中包含一个 fromSlot: string
字段,以从特定槽位开始重放数据。目前,重放支持最多回溯 3000 个槽位。Slots
Slots
定义插槽更新的过滤器。您使用的键(例如,
mySlotLabel
)是此特定过滤器配置的用户定义标签,允许您在需要时定义多个命名配置(尽管通常一个就足够了)。Accounts
Accounts
定义账户数据更新的过滤器。您使用的键(例如,
tokenAccounts
)是此特定过滤器配置的用户定义标签。如果所有字段为空,则广播所有账户。否则:- 字段作为逻辑 AND 操作。
- 数组中的值作为逻辑 OR 操作(除了
filters
,它们作为逻辑 AND 操作)。
Transaction
Transaction
定义交易更新的过滤器。您使用的键(例如,
myTxSubscription
)是此特定过滤器配置的用户定义标签。如果所有字段都为空,则广播所有交易。否则:- 字段作为逻辑 AND 操作。
- 数组中的值被视为逻辑 OR 操作(除了
accountRequired
,其中所有必须匹配)。
Block
Block
定义区块更新的过滤器。您使用的键(例如,
myBlockLabel
)是此特定过滤器配置的用户定义标签。Blocks Meta
Blocks Meta
这与 Blocks 类似,但不包括交易、账户和条目。您使用的键(例如,
blockmetadata
)是此订阅的用户定义标签。目前,没有可用于区块元数据的过滤器——默认情况下,所有消息都会被广播。Entries
Entries
订阅分类账条目。您使用的键(例如,
entrySubscribe
)是此订阅的用户定义标签。目前,条目没有可用的过滤器;所有条目都会被广播。代码示例 (LaserStream SDK)
- Slot Updates
- Account Updates
- Transaction Updates
- Blocks
- Block Metadata
- Entries
SDK 选项
我们为多种编程语言提供官方 SDK:- TypeScript: LaserStream TypeScript SDK
- Rust: LaserStream Rust SDK
- Go: LaserStream Go SDK
故障排除 / 常见问题
Q: 我的 LaserStream 连接出现延迟或性能缓慢的问题。可能是什么原因导致的?
Q: 我的 LaserStream 连接出现延迟或性能缓慢的问题。可能是什么原因导致的?
A: LaserStream 连接的性能问题通常由以下原因引起:输出将返回您的服务器与 Laserstream 服务器之间的最大网络容量。最低限度,您需要 10MB/s 来订阅所有交易数据,80MB/s 来订阅所有账户数据。我们建议至少拥有所需容量的 2 倍以获得最佳性能。
- Javascript 客户端缓慢:当处理过多消息或消耗过多带宽时,JavaScript 客户端可能会滞后。考虑更精确地过滤您的订阅以减少消息量,或使用其他语言。
- 本地带宽有限:大量订阅可能会使带宽有限的客户端不堪重负。监控您的网络使用情况,考虑升级您的连接或减少订阅范围。
- 地理距离:对地理位置较远的服务器运行订阅可能会导致性能问题。TCP 数据包可能在长距离路由中丢失,并且您受限于最慢的中间网络路径。解决方案:从我们可用的区域中选择离您的服务器位置最近的 LaserStream 端点(参见上面的 Endpoints & Regions)。
- 客户端处理瓶颈:确保您的消息处理逻辑已优化,并且不会长时间阻塞主线程。
Q: 我收到连接错误。我应该检查什么?
Q: 我收到连接错误。我应该检查什么?
A: 验证您的 API 密钥和端点是否正确,并确保您的网络允许到指定端点的出站 gRPC 连接。检查 Helius 状态页面 以了解任何正在进行的事件。
Q: 为什么我的过滤器没有按预期工作?
Q: 为什么我的过滤器没有按预期工作?
A: 请仔细检查过滤器部分中描述的逻辑运算符(AND/OR)。确保公钥正确。查看请求中指定的承诺级别。
Q: 我可以在一个请求中订阅多种类型的数据(例如,账户和交易)吗?
Q: 我可以在一个请求中订阅多种类型的数据(例如,账户和交易)吗?
A: 可以,您可以在同一个
SubscribeRequest
对象中定义多个键下的过滤器配置(例如,accounts
, transactions
)。Q: LaserStream 是否支持消费者组?
Q: LaserStream 是否支持消费者组?
A: 我们没有实现消费者组。相反,LaserStream 提供团队所需的相同结果:恢复、重放和多节点可靠性,而无需协调层(以及随之而来的延迟/开销)。我们认为大多数工作负载不需要消费者组,它们会增加延迟和操作开销。例如,单个 LaserStream gRPC 连接可以发出高达 Solana 交易 + 账户数据的 10 倍,并且大多数客户端订阅一个小的、过滤后的片段。在这种情况下使用消费者组会消耗性能余量并引入另一个故障点。