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

4.1 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 до будущей реализации репостов.

Правило для 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=1
  • name - имя файла, закодированное через encodeURIComponent
  • size - размер файла в байтах
  • sha256 - SHA-256 исходного файла в hex
  • ar - короткий Arweave Transaction ID, без полного URL

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

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

Файлы хранятся вне блокчейна, в Arweave. В блокчейне остаются только txId, имя, размер и SHA-256.