Files
SHiNE-server/docs/Blockchain/10_TECH_Blocks.md
T

3.2 KiB
Raw Blame History

TECH блоки (type=0, version=1)

TECH-тип покрывает системные записи цепочки.

Подтипы

  1. subType=0 — HEADER_COMPAT

    • стартовый блок цепочки;
    • payload: tag SHiNE + login владельца.
  2. subType=1 — TECH_CREATE_CHANNEL

    • создание нового канала;
    • хранит line-поля + channelName + channelDescription + channelType + channelTypeVersion.
  3. subType=2 — TECH_FORK

    • первый новый блок после точной перепубликации выбранного префикса предыдущего fork новым blockchain key;
    • связывает новую активную цепочку с предыдущей и фиксирует точку rollback/продолжения.

TECH_FORK body (version=1)

Big-endian:

  • parentBlockchainKey[32] — public key предыдущего fork;
  • forkPointBlockNumber[4] — последний блок старой цепочки, сохранённый в новом fork;
  • forkPointBlockHash32[32];
  • forkPointTimestampMs[8];
  • parentTipBlockNumber[4] — tip старой цепочки на момент начала ротации;
  • parentTipBlockHash32[32];
  • parentTipTimestampMs[8];
  • discardedBlocksCount[4] — parentTipBlockNumber - forkPointBlockNumber;
  • reasonCode[1];
  • commentUtf8Length[2];
  • comment[N] — произвольный комментарий пользователя, максимум 1024 UTF-8 байт.

reasonCode:

  • 1 — ROUTINE_ROTATION: обычная смена пароля/ключей, компрометация не предполагается;
  • 2 — POSSIBLE_COMPROMISE: возможная компрометация, неизвестные записи не подтверждены;
  • 3 — CONFIRMED_COMPROMISE_ROLLBACK: обнаружены нежелательные/чужие записи и выполнен rollback;
  • 4 — RECOVERY: восстановление доступа recovery-механизмом.

Правила:

  • блоки 0..forkPointBlockNumber в новом fork должны быть точными Frame-копиями выбранного префикса предыдущей цепочки;
  • TECH_FORK идёт сразу после этого префикса и является первым действительно новым Frame нового fork;
  • если история сохранена полностью, forkPointBlockNumber == parentTipBlockNumber и discardedBlocksCount == 0;
  • если сохраняется только genesis, новый fork содержит прежний block 0, а block 1 является TECH_FORK;
  • новый blockchain key в body не дублируется: он определяется owner/signature нового ANS-104 DataItem.

Назначение

  • инициализация блокчейна;
  • управление набором каналов пользователя;
  • фиксация происхождения нового fork и причины ротации/rollback.