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 尝试

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>'
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-time
  1. 如果抓包结果始终为零,请同时检查操作系统防火墙和操作系统之外的防火墙。Hetzner 可能会在 Cloud Firewall 或交换机端口的 Robot Firewall 中过滤流量。在 AWS 上,请检查 Security Group 和子网的 Network ACL。
  2. 允许从 <ERPC_SOURCE_IP>/32 到目标端口 <DESTINATION_PORT> 的入站 UDP。ERPC 使用动态 UDP 源端口,因此不要限制源端口。
  3. 如果抓包可以看到数据包,但应用程序无法接收,请让接收器监听 0.0.0.0:<DESTINATION_PORT> 而不是 localhost,然后检查本地防火墙以及 socket / 进程设置。
更新规则后仍未收到数据包时,请向支持团队提供抓包时长、数据包数量、源 IP、目标 IP 和目标端口。

资源