# 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_RATING` - target-based отзыв на конкретный блок; - содержит target (`toBlockchainName`, `toBlockGlobalNumber`, `toBlockHash32`) + текст отзыва; - не является сообщением линии канала. 6. `subType=50` — `TEXT_REPOST` - репост сообщения в линию канала; - содержит line-поля + target на оригинальное сообщение + текст комментария; - на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются); - временно отключён для записи через `AddBlock` до будущей реализации репостов. 7. `subType=90` — `TEXT_CHANNEL_META` - скрытый технический снимок профиля канала; - содержит line-поля + текст с тегами `S:title`/`S:ava` и описанием; - не отображается как обычное сообщение ленты; - применяется сервером к текущему состоянию канала. 8. `subType=100` — `TEXT_ENTRYPOINT` - входная страница канала; - line-based сообщение с тем же body, что у `TEXT_POST`; - не редактируется через `TEXT_EDIT_POST`: новая версия создаётся новым `TEXT_ENTRYPOINT`. 9. `subType=110` — `TEXT_EXERCISE` - line-based материал упражнения; - использует тот же body, что у `TEXT_POST`. 10. `subType=120` — `TEXT_SERVICE` - line-based материал услуги / процедуры; - использует тот же body, что у `TEXT_POST`. 11. `subType=130` — `TEXT_COURSE` - line-based материал курса; - использует тот же body, что у `TEXT_POST`. Подробная спецификация: [16_TEXT_Channel_Meta.md](./16_TEXT_Channel_Meta.md). ## Правило для edit `EDIT_POST` и `EDIT_REPLY` должны ссылаться на **оригинальный** блок, а не на предыдущий edit. Важно: - `TEXT_EDIT_POST` — технический edit для line-based сообщений канала; - `TEXT_EDIT_REPLY` — технический edit для reply-сообщений; - `TEXT_ENTRYPOINT` через `TEXT_EDIT_POST` не редактируется. ## Пустой text в edit - Для `TEXT_EDIT_POST` и `TEXT_EDIT_REPLY` допустим `textLen=0`. - Такой edit трактуется как логическое удаление содержимого сообщения. - Для удаления используется именно edit-блок; отдельного `DELETE`-подтипа нет. ## Вложения в текстовых сообщениях (`S:att v=1`) Для `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` - `nm` - имя файла, закодированное через `encodeURIComponent` - `sz` - размер файла в байтах - `sha256` - SHA-256 исходного файла в hex - `ar` - короткий Arweave Transaction ID, без полного URL - при наличии превью дополнительно могут присутствовать `preAr` и `preSha256` Правила клиента: - если сообщение начинается с одного или нескольких валидных attach-блоков (``, `` или ``), новый клиент скрывает эти блоки и показывает карточки вложений; - если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных; - старые клиенты без поддержки вложений могут показывать технические строки как обычный текст; - пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок. Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только `txId`, имя, размер, SHA-256 и, при наличии отдельного preview-файла, `preAr/preSha256`.