4.7 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_REPOST- репост сообщения в линию канала;
- содержит line-поля + target на оригинальное сообщение + текст комментария;
- на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются);
- временно отключён для записи через
AddBlockдо будущей реализации репостов.
-
subType=70—TEXT_CHANNEL_META- скрытый технический снимок профиля канала;
- содержит line-поля + текст с тегами
SHiNE:title/SHiNE:avatarи описанием; - не отображается как обычное сообщение ленты;
- применяется сервером к текущему состоянию канала.
Подробная спецификация: 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.
Бинарный формат TextBody не меняется: вложения являются частью UTF-8 текста.
Один блок вложения:
<SHiNE:attach;v=1;name=report.pdf;size=845221;sha256=0123...;ar=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
Несколько вложений идут подряд в самом начале текста, по одному блоку на строку. После последнего блока идёт обычный пользовательский текст.
Обязательные поля:
v=1name- имя файла, закодированное черезencodeURIComponentsize- размер файла в байтахsha256- SHA-256 исходного файла в hexar- короткий Arweave Transaction ID, без полного URL
Правила клиента:
- если сообщение начинается с одного или нескольких валидных
<SHiNE:attach;...>блоков, новый клиент скрывает эти блоки и показывает карточки вложений; - если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
- старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
- пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.
Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только txId, имя, размер и SHA-256.