# TEXT блоки (`type=1`, `version=1`) TEXT-тип хранит сообщения и редактирования. ## Подтипы 1. `subType=10` — `TEXT_POST` - пост в линии канала; - содержит line-поля + текст. 2. `subType=11` — `TEXT_EDIT_POST` - редактирование поста; - line-поля + target на оригинальный POST + новый текст. 3. `subType=20` — `TEXT_REPLY` - ответ на сообщение; - target (`toBlockchainName`, `toBlockGlobalNumber`, `toBlockHash32`) + текст. 4. `subType=21` — `TEXT_EDIT_REPLY` - редактирование ответа; - target на исходный REPLY + новый текст. - допускается пустой `text` для логического удаления сообщения (без физического удаления блока). 5. `subType=30` — `TEXT_REPOST` - репост сообщения в линию канала; - содержит line-поля + target на оригинальное сообщение + текст комментария; - на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются); - временно отключён для записи через `AddBlock` до будущей реализации репостов. 6. `subType=70` — `TEXT_CHANNEL_META` - скрытый технический снимок профиля канала; - содержит line-поля + текст с тегами `SHiNE:title`/`SHiNE:avatar` и описанием; - не отображается как обычное сообщение ленты; - применяется сервером к текущему состоянию канала. Подробная спецификация: [16_TEXT_Channel_Meta.md](./16_TEXT_Channel_Meta.md). ## Правило для edit `EDIT_POST` и `EDIT_REPLY` должны ссылаться на **оригинальный** блок, а не на предыдущий edit. ## Пустой text в edit - Для `TEXT_EDIT_POST` и `TEXT_EDIT_REPLY` допустим `textLen=0`. - Такой edit трактуется как логическое удаление содержимого сообщения. - Для удаления используется именно edit-блок; отдельного `DELETE`-подтипа нет. ## Вложения в текстовых сообщениях (`SHiNE:attach v=1/v=2`) Для `TEXT_POST`, `TEXT_REPLY`, `TEXT_EDIT_POST` и `TEXT_EDIT_REPLY` клиент может хранить вложения как технические строки в начале обычного `text`. Подробная спецификация: [15_TEXT_Attachments.md](./15_TEXT_Attachments.md). Бинарный формат `TextBody` не меняется: вложения являются частью UTF-8 текста. Один блок вложения: ```text ``` Для файлов с отдельным превью клиент может использовать расширенный вариант: ```text ``` Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст. Обязательные поля: - `v=1` или `v=2` - `name` - имя файла, закодированное через `encodeURIComponent` - `size` - размер файла в байтах - `sha256` - SHA-256 исходного файла в hex - `ar` - короткий Arweave Transaction ID, без полного URL - для `v=2` дополнительно могут присутствовать `previewAr` и `previewSha256` Правила клиента: - если сообщение начинается с одного или нескольких валидных `` блоков, новый клиент скрывает эти блоки и показывает карточки вложений; - если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных; - старые клиенты без поддержки вложений могут показывать технические строки как обычный текст; - пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок. Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только `txId`, имя, размер, SHA-256 и, при наличии отдельного preview-файла, `previewAr/previewSha256`.