🔬 Формат пакетов

Этот справочник предназначен только для custom-приёмников. Наш формат shred оптимизирован под ShredStream.com — он не совпадает с тем, что ожидает стандартный Solana-инструментарий. SDK инкапсулирует всё это за вас. Читайте эту страницу, только если вы реализуете custom UDP-приёмник без нашего SDK. См. Почему стоит использовать SDK и Быстрый старт SDK.

📖 Обзор

Каждый UDP-пакет, доставляемый ShredStream.com, имеет ровно 1203 байта и содержит один legacy data shred (вариант 0xA5). ShredStream.com доставляет только data shreds -- FEC или coding shreds в поток не включены.

Каждый shred несёт часть данных записей (entries) slot Solana. Shreds поступают с последовательными индексами внутри каждого slot, начиная с 0. Чтобы восстановить полные данные блока для slot, соберите все его shreds, упорядочьте по индексу и объедините payload.

📐 Таблица смещений

СмещениеРазмерПолеТипОписание
0x0064Signaturebytes64 нулевых байта. ShredStream.com не подписывает shreds; не проверяйте это поле
0x401Shred Variantu8Всегда 0xA5 (legacy data shred)
0x418Slotu64 LEНомер slot, к которому принадлежит этот shred
0x494Indexu32 LEИндекс shred внутри slot (последовательный)
0x4D2Versionu16 LEВсегда 0 -- не используется ShredStream.com
0x4F4FEC Set Indexu32 LEВсегда 0 -- не используется ShredStream.com
0x532Parent Offsetu16 LEВсегда 0 -- не используется ShredStream.com
0x551Flagsu8Флаг границы: DATA_COMPLETE = 0x40
0x562Sizeu16 LEОбщий полезный размер (заголовок + payload). Payload = data[0x58..size]
0x58переменныйPayloadbytesФактические данные записей
после payloadпеременныйНулевое дополнениеbytesНеиспользуемые байты (нули) от конца payload до байта 1203

📏 Константы

КонстантаЗначениеПримечания
SHRED_MAX_SIZE1203 байтаФиксированный размер каждого UDP-пакета
DATA_HEADER_SIZE88 байт (0x58)Общий размер заголовка перед payload
MAX_PAYLOAD_SIZE1035 байтМаксимальный payload на shred (80 байт зарезервировано для совместимости с wire-форматом Solana)

🚩 Байт флагов

Байт флагов по смещению 0x55 отмечает границы пачки записей:

ФлагЗначениеСмысл
DATA_COMPLETE0x40Это последний data shred в текущей пачке записей

⚠️ Важные замечания

  • Только data shreds. ShredStream.com доставляет legacy data shreds (вариант 0xA5). FEC/coding shreds вы не получите.
  • Последовательные индексы. Внутри каждого slot индексы shreds начинаются с 0 и увеличиваются последовательно. Пропуск индекса означает, что shred был потерян при передаче.
  • Размер payload. Поле Size указывает конец полезных данных. Байты payload находятся в data[0x58..size]. Байты за пределами смещения size -- нулевое дополнение.
Формат пакетов — Documentations | ShredStream.com