Files
SHiNE-server/docs/Blockchain/11_TEXT_Blocks.md
T

5.2 KiB

TEXT блоки (type=1, version=1)

TEXT-тип хранит сообщения и редактирования.

Подтипы

  1. subType=10TEXT_POST

    • пост в линии канала;
    • содержит line-поля + текст.
  2. subType=11TEXT_EDIT_POST

    • редактирование поста;
    • line-поля + target на оригинальный POST + новый текст.
  3. subType=20TEXT_REPLY

    • ответ на сообщение;
    • target (toBlockchainName, toBlockGlobalNumber, toBlockHash32) + текст.
  4. subType=21TEXT_EDIT_REPLY

    • редактирование ответа;
    • target на исходный REPLY + новый текст.
    • допускается пустой text для логического удаления сообщения (без физического удаления блока).
  5. subType=30TEXT_REPOST

    • репост сообщения в линию канала;
    • содержит line-поля + target на оригинальное сообщение + текст комментария;
    • на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются);
    • временно отключён для записи через AddBlock до будущей реализации репостов.
  6. subType=70TEXT_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/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=2
  • name - имя файла, закодированное через encodeURIComponent
  • size - размер файла в байтах
  • sha256 - SHA-256 исходного файла в hex
  • ar - короткий Arweave Transaction ID, без полного URL
  • для v=2 дополнительно могут присутствовать previewAr и previewSha256

Правила клиента:

  • если сообщение начинается с одного или нескольких валидных <SHiNE:attach;...> блоков, новый клиент скрывает эти блоки и показывает карточки вложений;
  • если блок битый, клиент может игнорировать только этот блок и продолжить разбор остальных;
  • старые клиенты без поддержки вложений могут показывать технические строки как обычный текст;
  • пустой пользовательский текст допустим, если перед ним есть хотя бы один валидный attach-блок.

Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только txId, имя, размер, SHA-256 и, при наличии отдельного preview-файла, previewAr/previewSha256.