Direct Shreds - UDP Forwarding (Raw Shreds)
If you have ERPC Dedicated Shreds, you can forward raw Shreds over UDP to your own listener. This is Solana’s fastest observation layer—before Geyser gRPC and far ahead of RPC/WebSocket. The SDK includes a simple Rust sample; new-token detection is used only because it’s the most common question we get.
Why this is the fastest path
- Shreds arrive first: validator-to-validator Shreds land before Geyser gRPC or RPC/WebSocket, so latency-critical flows see events earliest.
- UDP keeps overhead tiny: no connection setup, retransmit, or ordering; matches the on-wire format between validators.
- Trade-off: pre-finalization data can be missing/out-of-order/failed—handle that as part of the speed bargain.
Note: the shared Shreds gRPC endpoint runs over TCP, so it’s slower than UDP Shreds.
Try it with Solana Stream SDK
- Sample code (
shreds-udp-rs, Rust): new-token detection is just a common example—swap in your own target.
https://github.com/ValidatorsDAO/solana-stream/tree/main/temp-release/shreds-udp-rs - Dedicated Shreds users: point your Shreds sender to the sample’s
ip:portto see detections. - Not on UDP yet? Run it locally or on your own server to explore logs and customize hooks.
UDP packets are not arriving
UDP forwarding starts automatically after the destination is configured. No heartbeat activation is required; an
UNIMPLEMENTED heartbeat response does not mean forwarding is disabled.First, capture traffic at the host network interface. Replace the placeholders with the ERPC source IP shown for your stream and your configured destination port.
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, run as Administrator):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- If the capture remains at zero, check both the OS firewall and firewalls outside the OS. Hetzner may filter traffic in Cloud Firewall or the Robot firewall at the switch port. On AWS, check the Security Group and the subnet Network ACL.
- Allow inbound UDP from
<ERPC_SOURCE_IP>/32to destination port<DESTINATION_PORT>. Keep the source port unrestricted because ERPC uses dynamic UDP source ports. - If packets appear in the capture but not in your application, bind the receiver to
0.0.0.0:<DESTINATION_PORT>rather than localhost, then check the local firewall and socket/process settings.
If no packets arrive after the rules are updated, send Support the capture duration, packet count, source IP, destination IP, and destination port.
Provider references: Hetzner Cloud Firewall, Hetzner Robot Firewall, AWS Security Groups, AWS Network ACLs, and Microsoft Pktmon.
Resources
- All code and README docs are in the Solana Stream SDK repo:
https://github.com/ValidatorsDAO/solana-stream






