6.7 KiB
Дата: 27.04.2026
Ответ по блокчейну, форматам, каналам и расширяемости
Короткий итог: текущую систему можно запускать и развивать дальше. Архитектура уже в целом готова к расширению версиями, но расширять нужно по строгим правилам совместимости.
1) Что важно зафиксировать про эволюцию форматов
Да, ваш подход верный:
- новые возможности добавляем через новые
type/subType/versionи/или новыйframeCode; - старые блоки не переписываем и не «переподписываем»;
- делаем конвертер/адаптер чтения: старые блоки читаются и приводятся к новой внутренней модели.
Это и есть правильная схема «старое автоматически читается и представляется в новом формате».
2) Есть ли в коде узкие места, где нельзя расширять
Критичных тупиков не видно, но есть важные ограничения:
- Парсер сейчас строгий: неизвестные
type/subType/versionи неизвестный frame отклоняются. - Значит новые форматы нужно явно добавлять в парсер и серверную валидацию.
- Старые блоки без нужных полей не проблема, если новый код умеет читать их как legacy-ветку.
Вывод: расширение возможно, но только через явную поддержку версий, а не «само появится».
3) Про канал 0
Зафиксировано правило:
- канал
0оставляем как технический root; - контент-посты туда пока не публикуем.
Это теперь отмечено в коде комментариями и проверками:
- на клиенте (UI) пост в
lineCode=0блокируется с понятной ошибкой; - на сервере добавлена валидация, которая тоже отклоняет
TEXT_POSTв канал0.
4) Формат аватара (ava) — обновлено
Раньше:
AR:<txId>
Теперь поддерживается составной формат:
SHA256:<hash>,AR:<txId>
Что сделано:
- парсер и сборщик формата в UI обновлены;
- при загрузке нового аватара считается
SHA-256оптимизированного файла и сохраняется вместе сAR; - при выборе существующего
txIdсначала качается файл, считаетсяSHA-256, и только потом пишетсяava; - серверный граф связей теперь умеет извлекать
ARиз составной строки (включая fallback для legacy/кривых значений).
Это улучшает целостность: у вас есть не только адрес файла, но и контрольный хэш.
5) Как устроены ответы в каналах и насколько это надёжно
Ответы (REPLY / EDIT_REPLY) сделаны отдельно от линейных постов:
REPLYхранит ссылку на цель (toBlockchainName + blockNumber + hash32) и текст;EDIT_REPLYхранит ссылку на оригинальный reply (blockNumber + hash32) и новый текст.
Сильные стороны:
- ссылка идёт по номеру + хэшу (устойчиво к подмене цели);
- редактирование отделено от оригинала и может агрегироваться в чтении.
Для будущего это расширяемо:
- можно добавить
TEXT_REPLY_V2с новым payload, сохранивV1для старых клиентов.
6) Вложенные файлы и «мини-разметка» внутри сообщения
Идея рабочая, но лучше делать аккуратно.
Вариант A: «теги в тексте» (ваша идея)
Плюсы:
- быстро внедрить;
- стандартно для пользователей (похоже на HTML/Markdown).
Риски:
- экранирование
<>и безопасность рендера; - сложнее валидировать и безопасно отображать (XSS/инъекции).
Если идти этим путём, лучше:
- разрешить только whitelist-теги (
img/file/h1/h2/h3/b/iи т.д.); - хранить метаданные файла явно:
type,size,sha256,ar; - рендерить через безопасный парсер, а не через «сырой HTML».
Вариант B: структурированный payload (рекомендуется как основной)
Сделать TEXT_POST_V2:
- массив сегментов:
text,image,file,heading,style; - для файла хранить
kind,mime,size,sha256,storage,address.
Плюс:
- надёжная валидация и безопасный рендер.
Оптимальная стратегия:
- В UI можно дать «мини-разметку» для ввода.
- На запись преобразовывать её в структурированный payload V2.
- Для старых клиентов отдавать fallback plain text.
7) Практический roadmap без остановки разработки
- Оставить текущий blockchain running.
- Формально описать versioning policy (что считается breaking/non-breaking).
- Зафиксировать channel
0как технический root-only. - Использовать
ava = SHA256 + ARкак новый стандарт. - Запланировать
TEXT_*_V2для вложений и форматирования.
Итог: стартовать и развивать можно уже сейчас. Основа хорошая, если строго держать версионирование и адаптеры чтения для legacy-блоков.