SHA256
Каналы: добавить профиль через TEXT_CHANNEL_META
This commit is contained in:
@@ -88,6 +88,7 @@
|
||||
- `limit_exceeded`
|
||||
- `chain_resync_in_progress` — цепочка временно заблокирована полным resync
|
||||
- `repost_disabled` — репосты временно отключены до будущей реализации
|
||||
- `bad_channel_meta_line`, `channel_not_found`, `bad_channel_meta_*`, `channel_meta_*_too_long` — ошибки `TEXT_CHANNEL_META`
|
||||
- `internal_error`
|
||||
|
||||
## 5. Какие блоки реально можно добавлять через `AddBlock`
|
||||
@@ -104,6 +105,7 @@
|
||||
- `TEXT_REPLY (20)`
|
||||
- `TEXT_EDIT_REPLY (21)`
|
||||
- `TEXT_REPOST (30)` — формат зарезервирован, но новые блоки временно отклоняются с `repost_disabled`
|
||||
- `TEXT_CHANNEL_META (70)` — скрытый технический снимок профиля канала
|
||||
|
||||
3. **REACTION (type=2)**
|
||||
- `REACTION_LIKE (1)`
|
||||
|
||||
@@ -53,6 +53,12 @@
|
||||
"ownerLogin": "Alice",
|
||||
"ownerBlockchainName": "alice-001",
|
||||
"channelName": "0",
|
||||
"displayName": "Мой канал",
|
||||
"channelDescription": "Короткое описание",
|
||||
"avaAr": "ArweaveTxId...",
|
||||
"avaSha256": "0123...",
|
||||
"avaSize": 248193,
|
||||
"metaUpdatedAtMs": 1760000000000,
|
||||
"personal": true,
|
||||
"channelRoot": { "blockNumber": 0, "blockHash": "..." }
|
||||
},
|
||||
@@ -141,8 +147,42 @@
|
||||
"ownerLogin": "Bob",
|
||||
"ownerBlockchainName": "bob-001",
|
||||
"channelName": "news",
|
||||
"displayName": "Новости Bob",
|
||||
"channelDescription": "Канал о новостях",
|
||||
"avaAr": "ArweaveTxId...",
|
||||
"avaSha256": "0123...",
|
||||
"avaSize": 248193,
|
||||
"metaUpdatedAtMs": 1760000000000,
|
||||
"channelRoot": { "blockNumber": 123, "blockHash": "..." }
|
||||
},
|
||||
"metaEvents": [
|
||||
{
|
||||
"kind": "created",
|
||||
"messageRef": { "blockNumber": 123, "blockHash": "..." },
|
||||
"authorLogin": "Bob",
|
||||
"authorBlockchainName": "bob-001",
|
||||
"lineStep": 1,
|
||||
"createdAtMs": 1760000000000,
|
||||
"title": "news",
|
||||
"description": "",
|
||||
"avaAr": "",
|
||||
"avaSha256": "",
|
||||
"avaSize": 0
|
||||
},
|
||||
{
|
||||
"kind": "profile_updated",
|
||||
"messageRef": { "blockNumber": 130, "blockHash": "..." },
|
||||
"authorLogin": "Bob",
|
||||
"authorBlockchainName": "bob-001",
|
||||
"lineStep": 2,
|
||||
"createdAtMs": 1760000500000,
|
||||
"title": "Новости Bob",
|
||||
"description": "Канал о новостях",
|
||||
"avaAr": "ArweaveTxId...",
|
||||
"avaSha256": "0123...",
|
||||
"avaSize": 248193
|
||||
}
|
||||
],
|
||||
"messages": [
|
||||
{
|
||||
"messageRef": { "blockNumber": 140, "blockHash": "..." },
|
||||
|
||||
@@ -1,33 +1,19 @@
|
||||
# Командные сообщения каналов
|
||||
|
||||
## 1. Общий префикс
|
||||
Командные сообщения распознаются по префиксу:
|
||||
Команды в обычных `TEXT_POST` сообщениях каналов больше не используются для изменения профиля канала.
|
||||
|
||||
`/.`
|
||||
## Удалённая команда `/.desc`
|
||||
|
||||
Пример:
|
||||
- `/.desc Новый комментарий канала`
|
||||
Команда `/.desc <text>` больше не поддерживается и не применяется сервером.
|
||||
|
||||
## 2. Поддерживаемые команды
|
||||
Описание, человекочитаемое имя и аватар канала меняются только через скрытый технический блок:
|
||||
|
||||
### Для всех типов каналов (`0`, `1`, `100`, `200`)
|
||||
- `/.desc <text>` — смена описания канала.
|
||||
- `msg_type=1`
|
||||
- `subType=70`
|
||||
- `TEXT_CHANNEL_META`
|
||||
|
||||
Примечание:
|
||||
- Описание канала в чтении определяется последней командой `/.desc` в линии канала.
|
||||
- Если `/.desc` не было, используется описание из `CreateChannel`.
|
||||
Спецификация: [16_TEXT_Channel_Meta.md](./16_TEXT_Channel_Meta.md).
|
||||
|
||||
### Дополнительно для `type=200`
|
||||
- `/.add <login> <channelName>`
|
||||
- `/.remove <login> <channelName>`
|
||||
## Зарезервированные команды type=200
|
||||
|
||||
Формат аргументов фиксирован: через пробел.
|
||||
|
||||
## 3. Текущая модель применения
|
||||
- Команды передаются как обычные `TEXT_POST` сообщения.
|
||||
- Сервер уже применяет `/.desc` при вычислении актуального описания канала.
|
||||
- Команды `/.add` и `/.remove` зарезервированы под расширенную модель участников `type=200` на уровне UI/агрегации.
|
||||
|
||||
## 4. Статус для MVP
|
||||
- В текущем UI каналы `type=100` и `type=200` не используются.
|
||||
- Соответственно, `/.add` и `/.remove` считаются запланированными и пока не участвуют в рабочем UI-сценарии.
|
||||
Команды `/.add` и `/.remove` для групповых каналов `type=200` остаются зарезервированными для будущей модели участников. В обычном UI текущего этапа они не используются.
|
||||
|
||||
@@ -27,6 +27,14 @@ TEXT-тип хранит сообщения и редактирования.
|
||||
- на текущем этапе продуктовой логики репост не редактируется (версии не накапливаются);
|
||||
- временно отключён для записи через `AddBlock` до будущей реализации репостов.
|
||||
|
||||
6. `subType=70` — `TEXT_CHANNEL_META`
|
||||
- скрытый технический снимок профиля канала;
|
||||
- содержит line-поля + текст с тегами `SHiNE:title`/`SHiNE:avatar` и описанием;
|
||||
- не отображается как обычное сообщение ленты;
|
||||
- применяется сервером к текущему состоянию канала.
|
||||
|
||||
Подробная спецификация: [16_TEXT_Channel_Meta.md](./16_TEXT_Channel_Meta.md).
|
||||
|
||||
## Правило для edit
|
||||
|
||||
`EDIT_POST` и `EDIT_REPLY` должны ссылаться на **оригинальный** блок, а не на предыдущий edit.
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# TEXT_CHANNEL_META: профиль канала
|
||||
|
||||
`TEXT_CHANNEL_META` — скрытый технический `TEXT`-блок для полного снимка профиля канала.
|
||||
|
||||
## Блок
|
||||
|
||||
- `msg_type = 1`
|
||||
- `subType = 70`
|
||||
- `msgVersion = 1`
|
||||
- body использует тот же бинарный формат line-текста, что и `TEXT_POST`: line-поля + `textLen` + UTF-8 текст.
|
||||
|
||||
Блок пишется только в линию канала владельца. В обычной ленте сообщений он не отображается как пользовательский пост.
|
||||
|
||||
## Текстовый формат
|
||||
|
||||
В начале текста могут идти технические теги, после них обычный текст описания:
|
||||
|
||||
```text
|
||||
<SHiNE:title;v=1;Название канала>
|
||||
<SHiNE:avatar;v=1;size=248193;sha256=3f2c8a...;ar=AbCdEf...>
|
||||
Описание канала.
|
||||
```
|
||||
|
||||
Поддерживаемые теги:
|
||||
|
||||
- `<SHiNE:title;v=1;...>` — человекочитаемое имя канала.
|
||||
- `<SHiNE:avatar;v=1;size=...;sha256=...;ar=...>` — аватар канала в Arweave.
|
||||
|
||||
## Правила
|
||||
|
||||
- Каждый `TEXT_CHANNEL_META` задаёт полный снимок состояния профиля канала.
|
||||
- Старые meta-блоки остаются в блокчейне как история, но текущее состояние берётся из последнего валидного meta-блока.
|
||||
- Если `title` отсутствует, используется техническое имя канала.
|
||||
- Если `avatar` отсутствует, аватар считается сброшенным.
|
||||
- Если описание после тегов отсутствует, описание считается пустым.
|
||||
- `meta_updated_at_ms` равен времени самого валидного meta-блока.
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Длина `title` — максимум 50 Unicode code points.
|
||||
- В `title` запрещены `<`, `>`, `;`, табуляция, перевод строки и `\0`.
|
||||
- Длина описания — максимум 250 Unicode code points.
|
||||
- `avatar.ar` — Arweave transaction id из 43 символов.
|
||||
- `avatar.sha256` — 64 hex-символа.
|
||||
- `avatar.size` — положительный размер файла в байтах.
|
||||
|
||||
Если meta-блок невалиден, сервер не применяет его целиком.
|
||||
|
||||
## UI
|
||||
|
||||
- При создании канала UI может сразу после `TECH_CREATE_CHANNEL` записать первый `TEXT_CHANNEL_META` с человекочитаемым именем, аватаром и описанием.
|
||||
- При создании канала UI показывает системную карточку `Создан канал ...`.
|
||||
- При записи `TEXT_CHANNEL_META` UI показывает системную карточку `Изменён профиль канала`.
|
||||
- У системных карточек нет лайка, ответа, репоста, редактирования и других действий обычного сообщения.
|
||||
- По клику на системную карточку показываются аватар, человекочитаемое имя и описание на момент этого события.
|
||||
|
||||
## Замена старых команд
|
||||
|
||||
Команда `/.desc` больше не используется и не применяется сервером. Описание канала меняется только через `TEXT_CHANNEL_META`.
|
||||
@@ -113,6 +113,14 @@
|
||||
- В `11_TEXT_Blocks.md` зафиксировано, что запись `TEXT_REPOST` временно не используется до будущей реализации.
|
||||
- В `docs/API/04_Add_Block_to_Blockchain_API.md` добавлен код отказа `repost_disabled`.
|
||||
|
||||
## 2026-08-01 01:45:29 +0400
|
||||
- Базовый коммит-ориентир: `24afcba`.
|
||||
- Добавлен новый `TEXT`-подтип `TEXT_CHANNEL_META (subType=70)` для скрытого технического снимка профиля канала.
|
||||
- Зафиксирован формат тегов `<SHiNE:title;v=1;...>` и `<SHiNE:avatar;v=1;size=...;sha256=...;ar=...>`; описание хранится хвостовым UTF-8 текстом.
|
||||
- UI создания канала может сразу после `TECH_CREATE_CHANNEL` записать первый `TEXT_CHANNEL_META` с человекочитаемым именем, описанием и аватаром.
|
||||
- Команда `/.desc` удалена из актуальной модели изменения описания канала; профиль канала меняется только через `TEXT_CHANNEL_META`.
|
||||
- API чтения каналов расширен полями `displayName`, `avaAr`, `avaSha256`, `avaSize`, `metaUpdatedAtMs` и списком `metaEvents`.
|
||||
|
||||
## 2026-07-31 17:40:31 +0400
|
||||
- Базовый коммит-ориентир: `d640dd6`.
|
||||
- Формат блокчейна не менялся.
|
||||
|
||||
@@ -19,11 +19,13 @@
|
||||
Параметры пользователя (`msg_type=4`).
|
||||
8. [15_TEXT_Attachments.md](./15_TEXT_Attachments.md)
|
||||
Вложения в TEXT-сообщениях через `SHiNE:attach v=1`.
|
||||
9. [01_Channel_Types_and_CreateChannel.md](./01_Channel_Types_and_CreateChannel.md)
|
||||
9. [16_TEXT_Channel_Meta.md](./16_TEXT_Channel_Meta.md)
|
||||
Скрытый `TEXT_CHANNEL_META` для профиля канала.
|
||||
10. [01_Channel_Types_and_CreateChannel.md](./01_Channel_Types_and_CreateChannel.md)
|
||||
Типы каналов и формат `CreateChannelBody`.
|
||||
10. [02_Channel_Commands.md](./02_Channel_Commands.md)
|
||||
11. [02_Channel_Commands.md](./02_Channel_Commands.md)
|
||||
Команды в текстовых сообщениях каналов.
|
||||
11. [CHANGELOG.md](./CHANGELOG.md)
|
||||
12. [CHANGELOG.md](./CHANGELOG.md)
|
||||
Журнал изменений документации.
|
||||
|
||||
## Смежная документация
|
||||
|
||||
Reference in New Issue
Block a user