SHA256
48 lines
2.3 KiB
Markdown
48 lines
2.3 KiB
Markdown
# Виды блокчейнов и логических линий
|
|
|
|
## 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` для пользовательских каналов.
|
|
|
|
Так ссылки остаются стабильными, даже когда в канале появляются новые сообщения.
|