ERPC 发布 Solana Stream SDK v4.0.0,加速 UDP Shreds 处理与 gRPC 重连恢复

ERPC 发布 Solana Stream SDK v4.0.0,加速 UDP Shreds 处理与 gRPC 重连恢复

ERPC 发布 Solana Stream SDK v4.0.0,加速 UDP Shreds 处理与 gRPC 重连恢复
ELSOUL LABO B.V. 与 Validators DAO 于 2026 年 11 月 6 日正式发布 Solana Stream SDK v4.0.0。这是一款用于处理 Solana 流式数据的开源 SDK。本地基准测试测得,Rust UDP Shreds 内部处理速度约为原来的 108 倍,TypeScript 事件队列吞吐量约为原来的 4 倍。Geyser gRPC 在断开连接后也能更快恢复接收更新。SDK 可免费使用,并提供 Rust 和 TypeScript 示例,帮助开发者开始构建应用。
要在应用中发挥低延迟数据分发的优势,还取决于应用处理传入数据的速度。v4.0.0 提高了数据到达后的内部处理效率,并改善了断开连接后的恢复机制。结合 ERPC Shreds UDP Forwarding Premium,开发者可以同时优化 Solana 应用的数据分发路径和接收端实现。

三项测试测量处理与恢复性能的改善

Solana Stream SDK v4.0.0 的 Rust UDP 内部处理、TypeScript 事件队列与 gRPC 重连恢复对比
在 Rust UDP 接收路径中,v4 加速了数据报解码、插入内部缓冲区,以及从 Shreds 重建数据的 deshred 处理。通过调整原先对每个数据包重复执行的内部状态清理和时钟读取操作,在保持数据保留期限不变的同时,降低了处理开销。在对比测试中,每个数据报的内部处理时间从 94,236 ns 缩短至 855–881 ns,处理速度约为原来的 108 倍。
该基准测试在 Apple M 系列 Mac 上运行,每次处理覆盖 300 个 slot 的 403,200 个数据报,并以 5 次运行的中位数进行比较。测量范围为 decode→insert→deshred 内部处理路径,不包括网络分发耗时,也不包括用户应用的后续处理。减少重建传入 Shreds 所需的计算工作,有助于开发者将更多计算资源用于应用逻辑。
TypeScript Geyser gRPC 示例与入门项目减少了队列中仍有事件时的等待,使已接收的数据能够被更高效地取出。在 Node.js 24 上处理 200 万个事件的队列独立测试中,吞吐量从每秒 570 万至 740 万个事件,提升至每秒 2,480 万至 2,940 万个事件,约为原来的 4 倍。
Geyser gRPC 更新了负责重连的客户端及首次重试间隔。在本地 tonic 服务器上触发 20 次断开连接的测试中,每次断开前后所接收更新之间的间隔中位数,从 3.0 runner 的 552 ms 缩短至 4.0 runner 的 103 ms。该测试测量的是本地测试环境中恢复接收更新所需的间隔。
这三项结果来自测量范围和条件各不相同的测试,分别展示了 Rust 内部处理、TypeScript 事件队列及 gRPC 重连的改善幅度。实现细节和测试条件已公开于“相关链接”中的 PR #129。

延续 Alpenglow 支持并更新客户端

Alpenglow 支持已在 v3.0.0 中引入。v4.0.0 延续了对区块标记和条目(entries)的区分:区块标记表示区块头、区块尾及父区块的更新,条目则包含交易。应用可以将区块结构信息与需要处理的条目分开处理。
v4.0.0 将客户端更新至 Agave 4.4.1 和 Yellowstone gRPC 17.x。重连时,Disconnected 事件可以报告用于识别尚未完整接收的数据的信息,以及恢复位置。这些信息使应用能够自行实现对重复重放数据和仅接收了部分内容的数据的处理。
从 v3 迁移至 v4 时,Geyser 的 protobuf 定义保持不变,重连事件以及 Rust 中使用的 Solana message 和 transaction 类型则有所更新。已发布的迁移指南说明了事件处理程序和依赖版本的变化。

UDP 使用 Rust,gRPC 支持 Rust 和 TypeScript

已发布的 Rust 包 solana-stream-sdk 和 TypeScript 包 @validators-dao/solana-stream-sdk 均提供 v4.0.0。各连接方式支持的语言如下。
连接方式支持的语言
Shreds UDPRust
Geyser gRPCRust 和 TypeScript
Shreds gRPCRust 和 TypeScript
通过 UDP 接收 Shreds 时,请使用 Rust 客户端。Rust UDP 示例与入门项目使用已发布的 SDK v4.0.0,可用于尝试接收数据、从 Shreds 重建数据,以及检测所监控程序的指令。开发者可以修改监控目标和检测后的处理逻辑,将其作为构建自身应用的起点。
使用 TypeScript 开发时,可选择 Geyser gRPC 或 Shreds gRPC。本次发布的事件队列改善已包含在 Geyser gRPC 示例与入门项目中。请根据所使用的语言和数据分发方式,选择相应的已发布实现。

发挥 Shreds UDP Forwarding Premium 的分发优势

ERPC Shreds UDP Forwarding Premium 将每个区域内的多个节点组成网状网络,并转发该网络最先收到的每个 Shred 副本。数据经分发路径到达的时间,以及到达后 SDK 内部重建数据所需的时间,都会影响接收的数据何时能够使用。Rust UDP 接收处理的改善可应用于接收端,用于处理 Premium 分发的数据。
在 2026 年 10 月 30 日于法兰克福进行的对比中,测试在同一台机器上使用同一个时钟,同时采集 Standard 和 Premium 的数据 120 秒,并从 pcap 中匹配内容相同的 UDP 载荷。在这一匹配集合中,Premium 有 98% 先到达,到达时间差的中位数为 1.78 ms。在 Standard 中观测到的载荷里,有 93.9% 也在 Premium 中被观测到。
在法兰克福相同条件下对比 Shreds UDP Forwarding Premium 与 Standard 的先到达结果
Premium 图表展示分发路径之间的到达时间差,SDK 图表则展示接收端的内部处理与连接恢复。在实际应用中,同时记录数据包到达时间和检测到相关指令的时间,可用于确认分发环节的领先优势有多少最终体现在处理结果中。

通过按小时计费和示例,在自身环境中进行比较

Shreds UDP Forwarding Premium 支持按小时计费,价格为每小时 €1.39。可以从控制面板开始使用服务,并通过 Rust UDP 入门项目验证接收情况。保持区域、接收服务器和应用工作负载一致,即可分别评估到达时间差与接收后的处理耗时。
首先,在控制面板中登记公网 IPv4 地址和 UDP 端口,并允许来自页面所列来源的入站流量。使用 Rust UDP 入门项目确认数据包接收及数据重建后,再将需要监控的程序和应用的实际处理流程纳入评估。结合示例和分发服务,即可在自身环境中测量从接收到检测的时间。

相关链接