# Виды блокчейнов и логических линий

## 1. Именованный блокчейн

Базовый идентификатор цепочки пользователя:

- `blockchainName = <login>-<NNN>`
- пример: `alice-001`

Обычно это одна основная цепочка пользователя.

## 2. Логические линии внутри одной цепочки

Физически цепочка одна, но внутри есть независимые логические последовательности (линии), которые ведутся через поля:

- `lineCode`
- `prevLineNumber`
- `prevLineHash32`
- `thisLineNumber`

Линии используются для:
- TECH-событий;
- каналов с текстовыми постами;
- связей и подписок;
- пользовательских параметров.

## 3. Правила line-полей (фактическая серверная валидация)

Line-поля: `lineCode`, `prevLineNumber`, `prevLineHash32`, `thisLineNumber`.

- Line-поля разрешены только для `msg_type`: `0`, `1`, `3`, `4`.
- Если передано хотя бы одно line-поле, должны быть переданы все 4.
- `prevLineNumber/prevLineHash32` должны указывать на существующий блок этой же цепочки.
- Для первого шага после root (`prevLineNumber == lineCode`):
  - `TEXT (msg_type=1)`: `thisLineNumber = 0`;
  - `TECH/CONNECTION/USER_PARAM (0/3/4)`: `thisLineNumber = 1`.
- Для обычного шага:
  - `TEXT`: `thisLineNumber` допускает `same` или `+1` от предыдущего блока линии;
  - `TECH/CONNECTION/USER_PARAM`: строго `+1`.

## 4. Root-идея для каналов и подписок

Для ссылок вида follow/friend/contact принято ссылаться на корневые блоки:
- `HEADER` для базовой сущности пользователя/канала `0`;
- `CREATE_CHANNEL` для пользовательских каналов.

Так ссылки остаются стабильными, даже когда в канале появляются новые сообщения.
