SHA256
115 lines
6.5 KiB
Markdown
115 lines
6.5 KiB
Markdown
# 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
|
|
<S:att;v=1;nm=report.pdf;sz=845221;sha256=0123...;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
|
|
```
|
|
|
|
Для файлов с отдельным превью клиент может использовать расширенный вариант:
|
|
|
|
```text
|
|
<S:att;v=1;nm=video.mp4;sz=5820193;sha256=bbbb...;ar=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;preAr=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD;preSha256=eeee...>
|
|
```
|
|
|
|
Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст.
|
|
|
|
Обязательные поля:
|
|
|
|
- `v=1`
|
|
- `nm` - имя файла, закодированное через `encodeURIComponent`
|
|
- `sz` - размер файла в байтах
|
|
- `sha256` - SHA-256 исходного файла в hex
|
|
- `ar` - короткий Arweave Transaction ID, без полного URL
|
|
- при наличии превью дополнительно могут присутствовать `preAr` и `preSha256`
|
|
|
|
Правила клиента:
|
|
|
|
- если сообщение начинается с одного или нескольких валидных attach-блоков (`<SHiNE:attach;...>`, `<S:attach;...>` или `<S:att;...>`), новый клиент скрывает эти блоки и показывает карточки вложений;
|
|
- если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
|
|
- старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
|
|
- пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.
|
|
|
|
Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только `txId`, имя, размер, SHA-256 и, при наличии отдельного preview-файла, `preAr/preSha256`.
|