SHiNE-server/Dev_Docs/Blockchain/02_Blockchain_Kinds_and_Lines.md

2.3 KiB
Raw Blame History

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

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 для пользовательских каналов.

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