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

6.5 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_RATING

    • target-based отзыв на конкретный блок;
    • содержит target (toBlockchainName, toBlockGlobalNumber, toBlockHash32) + текст отзыва;
    • не является сообщением линии канала.
  6. subType=50TEXT_REPOST

    • репост сообщения в линию канала;
    • содержит line-поля + target на оригинальное сообщение + текст комментария;
    • на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются);
    • временно отключён для записи через AddBlock до будущей реализации репостов.
  7. subType=90TEXT_CHANNEL_META

    • скрытый технический снимок профиля канала;
    • содержит line-поля + текст с тегами S:title/S:ava и описанием;
    • не отображается как обычное сообщение ленты;
    • применяется сервером к текущему состоянию канала.
  8. subType=100TEXT_ENTRYPOINT

    • входная страница канала;
    • line-based сообщение с тем же body, что у TEXT_POST;
    • не редактируется через TEXT_EDIT_POST: новая версия создаётся новым TEXT_ENTRYPOINT.
  9. subType=110TEXT_EXERCISE

    • line-based материал упражнения;
    • использует тот же body, что у TEXT_POST.
  10. subType=120TEXT_SERVICE

  • line-based материал услуги / процедуры;
  • использует тот же body, что у TEXT_POST.
  1. subType=130TEXT_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=1
  • nm - имя файла, закодированное через encodeURIComponent
  • sz - размер файла в байтах
  • sha256 - SHA-256 исходного файла в hex
  • ar - короткий Arweave Transaction ID, без полного URL
  • при наличии превью дополнительно могут присутствовать preAr и preSha256

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

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

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