SHA256
80 lines
4.7 KiB
Markdown
80 lines
4.7 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_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`)
|
|
|
|
Для `TEXT_POST`, `TEXT_REPLY`, `TEXT_EDIT_POST` и `TEXT_EDIT_REPLY` клиент может хранить вложения как технические строки в начале обычного `text`.
|
|
|
|
Подробная спецификация: [15_TEXT_Attachments.md](./15_TEXT_Attachments.md).
|
|
|
|
Бинарный формат `TextBody` не меняется: вложения являются частью UTF-8 текста.
|
|
|
|
Один блок вложения:
|
|
|
|
```text
|
|
<SHiNE:attach;v=1;name=report.pdf;size=845221;sha256=0123...;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
|
|
```
|
|
|
|
Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст.
|
|
|
|
Обязательные поля:
|
|
|
|
- `v=1`
|
|
- `name` - имя файла, закодированное через `encodeURIComponent`
|
|
- `size` - размер файла в байтах
|
|
- `sha256` - SHA-256 исходного файла в hex
|
|
- `ar` - короткий Arweave Transaction ID, без полного URL
|
|
|
|
Правила клиента:
|
|
|
|
- если сообщение начинается с одного или нескольких валидных `<SHiNE:attach;...>` блоков, новый клиент скрывает эти блоки и показывает карточки вложений;
|
|
- если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
|
|
- старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
|
|
- пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.
|
|
|
|
Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только `txId`, имя, размер и SHA-256.
|