6.5 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-поля + текст с тегами
S:title/S:avaи описанием; - не отображается как обычное сообщение ленты;
- применяется сервером к текущему состоянию канала.
-
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-подтипа нет.
Вложения в текстовых сообщениях (S:att v=1)
Для TEXT_POST, TEXT_REPLY, TEXT_EDIT_POST и TEXT_EDIT_REPLY клиент может хранить вложения как технические строки в начале обычного text.
Подробная спецификация: 15_TEXT_Attachments.md.
Бинарный формат TextBody не меняется: вложения являются частью UTF-8 текста.
Один блок вложения:
<S:att;v=1;nm=report.pdf;sz=845221;sha256=0123...;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
Для файлов с отдельным превью клиент может использовать расширенный вариант:
<S:att;v=1;nm=video.mp4;sz=5820193;sha256=bbbb...;ar=CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC;preAr=DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD;preSha256=eeee...>
Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст.
Обязательные поля:
v=1nm- имя файла, закодированное черезencodeURIComponentsz- размер файла в байтахsha256- SHA-256 исходного файла в hexar- короткий Arweave Transaction ID, без полного URL- при наличии превью дополнительно могут присутствовать
preArиpreSha256
Правила клиента:
- если сообщение начинается с одного или нескольких валидных attach-блоков (
<SHiNE:attach;...>,<S:attach;...>или<S:att;...>), новый клиент скрывает эти блоки и показывает карточки вложений; - если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
- старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
- пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.
Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только txId, имя, размер, SHA-256 и, при наличии отдельного preview-файла, preAr/preSha256.