Direct Shreds - UDP Forwarding (Raw Shreds)

Если у вас есть ERPC Dedicated Shreds, вы можете пересылать raw Shreds по UDP в собственный listener. Это самый быстрый observation layer в Solana - раньше Geyser gRPC и значительно раньше RPC/WebSocket. В SDK есть простой Rust sample; new-token detection используется только потому, что это самый частый вопрос, который нам задают.

Почему это самый быстрый путь

  • Shreds приходят первыми: validator-to-validator Shreds доставляются раньше Geyser gRPC или RPC/WebSocket, поэтому latency-critical flows видят events раньше всего.
  • UDP сохраняет минимальный overhead: нет установки connection, retransmit или ordering; формат соответствует тому, как данные передаются между validators "по проводу".
  • Компромисс: до финализации данные могут отсутствовать, приходить не по порядку или относиться к failed operations - это часть платы за скорость.
Примечание: shared Shreds gRPC endpoint работает поверх TCP, поэтому он медленнее, чем UDP Shreds.

Попробуйте с Solana Stream SDK

  • Sample code (shreds-udp-rs, Rust): new-token detection здесь только как типовой пример - подставьте свою цель. https://github.com/ValidatorsDAO/solana-stream/tree/main/temp-release/shreds-udp-rs
  • Пользователи Dedicated Shreds: направьте Shreds sender на ip:port из sample, чтобы увидеть detections.
  • Еще не используете UDP? Запустите sample локально или на своем сервере, чтобы посмотреть logs и адаптировать hooks под себя.

UDP-пакеты не приходят

Пересылка UDP запускается автоматически после настройки адреса назначения. Активация через heartbeat не требуется; ответ heartbeat UNIMPLEMENTED не означает, что пересылка отключена.
Сначала выполните захват трафика на сетевом интерфейсе хоста. Замените заполнители на исходный IP-адрес ERPC, указанный для вашего потока, и настроенный порт назначения.
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. Разрешите входящий UDP-трафик от <ERPC_SOURCE_IP>/32 к порту назначения <DESTINATION_PORT>. Не ограничивайте исходный порт: ERPC использует динамические исходные UDP-порты.
  3. Если пакеты видны в захвате, но приложение их не получает, настройте приёмник на 0.0.0.0:<DESTINATION_PORT>, а не на localhost, затем проверьте локальный брандмауэр и настройки сокета/процесса.
Если после обновления правил пакеты всё ещё не приходят, отправьте в Support длительность захвата, количество пакетов, исходный IP-адрес, IP-адрес назначения и порт назначения.
Официальная документация провайдеров: Hetzner Cloud Firewall, Hetzner Robot Firewall, AWS Security Groups, AWS Network ACLs и Microsoft Pktmon.

Ресурсы