Direct Shreds - UDP 转发(原始 Shreds)
如果您拥有 ERPC 专用 Shreds,您可以通过 UDP 将原始 Shreds 转发到自己的监听器。这是 Solana 最快的观测层——早于 Geyser gRPC,远远领先于 RPC/WebSocket。SDK 包含一个简单的 Rust 示例;使用 new-token detection 只是因为这是我们最常收到的问题。
为什么这是最快的路径
- Shreds 最先到达:验证者到验证者的 Shreds 比 Geyser gRPC 或 RPC/WebSocket 更早到达,因此延迟敏感的流程能最早看到事件。
- UDP 开销极小:无需连接建立、重传或排序;与验证者之间的线上格式匹配。
- 权衡:预最终确认的数据可能缺失/无序/失败——将此视为速度优势的代价。
注意:共享的 Shreds gRPC 端点运行在 TCP 上,因此比 UDP Shreds 更慢。
使用 Solana Stream SDK 尝试
- 示例代码(
shreds-udp-rs,Rust):new-token detection 只是一个常见示例——可以替换为您自己的目标。 https://github.com/ValidatorsDAO/solana-stream/tree/main/temp-release/shreds-udp-rs - 专用 Shreds 用户:将您的 Shreds 发送器指向示例的
ip:port以查看检测结果。 - 还未使用 UDP?在本地或您自己的服务器上运行它来查看日志并自定义钩子。
UDP 数据包无法到达时
配置目标地址后,UDP 转发会自动开始。无需通过 heartbeat 激活;heartbeat 返回
UNIMPLEMENTED 并不表示转发已禁用。首先在主机网络接口上抓包。请将占位符替换为该数据流显示的 ERPC 源 IP 和您配置的目标端口。
Linux(
tcpdump):bash
sudo tcpdump -ni any 'udp dst port <DESTINATION_PORT> and src host <ERPC_SOURCE_IP>'sudo tcpdump -ni any 'udp dst port <DESTINATION_PORT> and src host <ERPC_SOURCE_IP>'Windows(
Pktmon,以管理员身份运行):powershell
pktmon filter add ERPC-UDP -t UDP -i <ERPC_SOURCE_IP> -p <DESTINATION_PORT>
pktmon start --capture --comp nics --log-mode real-timepktmon filter add ERPC-UDP -t UDP -i <ERPC_SOURCE_IP> -p <DESTINATION_PORT>
pktmon start --capture --comp nics --log-mode real-time- 如果抓包结果始终为零,请同时检查操作系统防火墙和操作系统之外的防火墙。Hetzner 可能会在 Cloud Firewall 或交换机端口的 Robot Firewall 中过滤流量。在 AWS 上,请检查 Security Group 和子网的 Network ACL。
- 允许从
<ERPC_SOURCE_IP>/32到目标端口<DESTINATION_PORT>的入站 UDP。ERPC 使用动态 UDP 源端口,因此不要限制源端口。 - 如果抓包可以看到数据包,但应用程序无法接收,请让接收器监听
0.0.0.0:<DESTINATION_PORT>而不是 localhost,然后检查本地防火墙以及 socket / 进程设置。
更新规则后仍未收到数据包时,请向支持团队提供抓包时长、数据包数量、源 IP、目标 IP 和目标端口。
服务商官方资料:Hetzner Cloud Firewall、Hetzner Robot Firewall、AWS Security Groups、AWS Network ACLs 和 Microsoft Pktmon。
资源
- 所有代码和 README 文档都在 Solana Stream SDK 仓库中: https://github.com/ValidatorsDAO/solana-stream






