4.4 KiB
Виды блокчейнов и логических линий
1. Именованный блокчейн
Базовый идентификатор физической цепочки пользователя:
blockchainName = <login>-<NNN>;NNN— номер fork001..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 хранят:
[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 не хранится. Их префикс:
[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-блока сервер определяет текущий фактический хвост той же линии и требует:
prevLineNumberравен глобальному номеру текущего хвоста (либо root для первого блока);prevLineHash32равен hash этого хвоста/root;thisLineNumberравен предыдущему sequence+1(для первого TEXT —0, для остальных линий —1);- root существует и имеет правильный тип.
Ссылка просто на любой существующий блок больше не считается допустимой. Это запрещает случайные или намеренные боковые ветки линии.
Для канала в одну линию входят все line-based события этого канала, включая обычные посты, EDIT_POST, REPOST, CHANNEL_META и контентные типы канала. Поэтому редактирование не создаёт отдельную боковую ветку.
6. Индексные ANS-104 теги
Фиксированные системные потоки дополнительно индексируются подписанным тегом:
t=prof # USER_PROFILE
t=conn # CONNECTION
t=tech # TECH, включая HEADER / CREATE_CHANNEL / FORK
Тег является индексом для выборочной загрузки; криптографическая непрерывность обеспечивается line-полями внутри подписанного Frame/DataItem.