# Виды блокчейнов и логических линий ## 1. Именованный блокчейн Базовый идентификатор физической цепочки пользователя: - `blockchainName = -`; - `NNN` — номер fork `001..999`; - пример: `alice-001`. ## 2. Логические линии внутри пользовательской цепочки Глобально все блоки пользователя идут одной последовательностью `blockNumber` и `prevHash32`. Дополнительно некоторые типы образуют собственные проверяемые линии. Актуальные линии: - `TECH` — системная история: `TECH_CREATE_CHANNEL`, `TECH_FORK`; root — `HEADER`; - `TEXT` — отдельная линия каждого канала; root — `HEADER` для канала `0` или `TECH_CREATE_CHANNEL` для пользовательского канала; - `CONNECTION` — единая история изменений связей пользователя; root — `HEADER`; - `USER_PROFILE` — единая история изменений профиля пользователя; root — `HEADER`. `STATUS_ACTION` в line-модель сейчас не входит. ## 3. Два формата line-prefix ### 3.1. Линии с явным `lineCode` `TECH` и `TEXT` хранят: ```text [4] lineCode [4] prevLineNumber [32] prevLineHash32 [4] thisLineNumber ``` - для TECH `lineCode=0`; - для канала `lineCode = global blockNumber` его root-блока (`HEADER #0` либо `TECH_CREATE_CHANNEL`). ### 3.2. Фиксированные линии `CONNECTION` и `USER_PROFILE` имеют по одной линии на пользователя, поэтому `lineCode` в body не хранится. Их префикс: ```text [4] prevLineNumber [32] prevLineHash32 [4] thisLineNumber ``` Логический `lineCode` этих линий всегда `0`. ## 4. Что означают номера `prevLineNumber` — **глобальный `blockNumber` предыдущего блока этой линии**. `thisLineNumber` — локальный порядковый номер внутри линии: - первый TEXT-блок канала: `0`, далее `1,2,3...`; - первый TECH после HEADER: `1`, далее `2,3,4...`; - первый CONNECTION: `1`, далее `2,3,4...`; - первый USER_PROFILE: `1`, далее `2,3,4...`. То есть `prevLineNumber` и `thisLineNumber` — принципиально разные числа. ## 5. Строгая серверная валидация Для каждого line-блока сервер определяет **текущий фактический хвост той же линии** и требует: 1. `prevLineNumber` равен глобальному номеру текущего хвоста (либо root для первого блока); 2. `prevLineHash32` равен hash этого хвоста/root; 3. `thisLineNumber` равен предыдущему sequence `+1` (для первого TEXT — `0`, для остальных линий — `1`); 4. root существует и имеет правильный тип. Ссылка просто на любой существующий блок больше не считается допустимой. Это запрещает случайные или намеренные боковые ветки линии. Для канала в одну линию входят все line-based события этого канала, включая обычные посты, `EDIT_POST`, `REPOST`, `CHANNEL_META` и контентные типы канала. Поэтому редактирование не создаёт отдельную боковую ветку. ## 6. Индексные ANS-104 теги Фиксированные системные потоки дополнительно индексируются подписанным тегом: ```text t=prof # USER_PROFILE t=conn # CONNECTION t=tech # TECH, включая HEADER / CREATE_CHANNEL / FORK ``` Тег является индексом для выборочной загрузки; криптографическая непрерывность обеспечивается line-полями внутри подписанного Frame/DataItem.