SHiNE-server/Dev_Docs/Blockchain/01_Common_Block_Format.md

1.9 KiB
Raw Blame History

Общий формат добавляемого блока (Frame v0)

Этот файл описывает единый бинарный формат блока, который клиент отправляет через AddBlock в поле blockBytesB64.

1. Полная структура блока

Блок состоит из двух частей:

  1. PREIMAGE (подписывается)
  2. TAIL (маркер подписи + подпись)

PREIMAGE

  • frameCode (uint16)
  • prevHash32 (32 bytes)
  • blockSize (int32) — размер PREIMAGE
  • blockNumber (int32)
  • timestamp (int64)
  • type (uint16)
  • subType (uint16)
  • version (uint16)
  • bodyBytes (N)

TAIL

  • sigMarker (uint16)
  • signature64 (64 bytes, Ed25519)

2. Что проверяет сервер при AddBlock

  • frameCode должен быть 0x0000.
  • sigMarker должен быть 0x0100.
  • blockNumber должен идти строго по порядку (last + 1).
  • prevHash32 должен совпасть с вершиной цепочки на сервере.
  • body должен пройти check() для конкретного типа.
  • подпись должна валидироваться публичным ключом блокчейна.

3. Ограничения

  • максимальный полный размер блока: до 4 MiB;
  • timestamp не должен сильно уходить в будущее;
  • bodyBytes парсится по type/subType/version из заголовка блока.

4. Почему это важно

Одинаковый общий формат позволяет:

  • передавать разные виды записей через один RPC AddBlock;
  • валидировать блоки единообразно;
  • расширять типы body, не ломая каркас блока.