6.6 KiB
TEXT блоки (type=1, version=1)
TEXT-тип хранит сообщения, материалы и редактирования.
Подтипы
-
subType=10—TEXT_POST- пост в линии канала;
- содержит line-поля + текст.
-
subType=11—TEXT_EDIT_POST- редактирование поста;
- line-поля + target на оригинальный POST + новый текст.
-
subType=20—TEXT_REPLY- ответ на сообщение;
- target (
toBlockchainName,toBlockGlobalNumber,toBlockHash32) + текст.
-
subType=21—TEXT_EDIT_REPLY- редактирование ответа;
- target на исходный REPLY + новый текст.
- допускается пустой
textдля логического удаления сообщения (без физического удаления блока).
-
subType=30—TEXT_RATING- target-based отзыв на конкретный блок;
- содержит target (
toBlockchainName,toBlockGlobalNumber,toBlockHash32) + текст отзыва; - не является сообщением линии канала.
-
subType=50—TEXT_REPOST- репост сообщения в линию канала;
- содержит line-поля + target на оригинальное сообщение + текст комментария;
- на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются);
- временно отключён для записи через
AddBlockдо будущей реализации репостов.
-
subType=90—TEXT_CHANNEL_META- скрытый технический снимок профиля канала;
- содержит line-поля + текст с тегами
SHiNE:title/SHiNE:avatarи описанием; - не отображается как обычное сообщение ленты;
- применяется сервером к текущему состоянию канала.
-
subType=100—TEXT_ENTRYPOINT- входная страница канала;
- line-based сообщение с тем же body, что у
TEXT_POST; - не редактируется через
TEXT_EDIT_POST: новая версия создаётся новымTEXT_ENTRYPOINT.
-
subType=110—TEXT_EXERCISE- line-based материал упражнения;
- использует тот же body, что у
TEXT_POST.
-
subType=120—TEXT_SERVICE
- line-based материал услуги / процедуры;
- использует тот же body, что у
TEXT_POST.
subType=130—TEXT_COURSE
- line-based материал курса;
- использует тот же body, что у
TEXT_POST.
Подробная спецификация: 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-подтипа нет.
Вложения в текстовых сообщениях (SHiNE:attach v=1/v=2)
Для TEXT_POST, TEXT_REPLY, TEXT_EDIT_POST и TEXT_EDIT_REPLY клиент может хранить вложения как технические строки в начале обычного text.
Подробная спецификация: 15_TEXT_Attachments.md.
Бинарный формат TextBody не меняется: вложения являются частью UTF-8 текста.
Один блок вложения:
<SHiNE:attach;v=1;name=report.pdf;size=845221;sha256=0123...;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
Для файлов с отдельным превью клиент может использовать расширенный вариант:
<SHiNE:attach;v=2;name=video.mp4;size=5820193;sha256=bbbb...;ar=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;previewAr=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD;previewSha256=eeee...>
Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст.
Обязательные поля:
v=1илиv=2name- имя файла, закодированное черезencodeURIComponentsize- размер файла в байтахsha256- SHA-256 исходного файла в hexar- короткий Arweave Transaction ID, без полного URL- для
v=2дополнительно могут присутствоватьpreviewArиpreviewSha256
Правила клиента:
- если сообщение начинается с одного или нескольких валидных
<SHiNE:attach;...>блоков, новый клиент скрывает эти блоки и показывает карточки вложений; - если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
- старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
- пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.
Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только txId, имя, размер, SHA-256 и, при наличии отдельного preview-файла, previewAr/previewSha256.