Files
SHiNE-server/shine-server-blockchain/src/main/java/blockchain
AidarKC 62e4338e88 23 12 25
Дорабатываю добавление блоков!
2025-12-23 15:48:23 +03:00
..
2025-12-23 11:32:26 +03:00
2025-12-23 11:32:26 +03:00
2025-12-23 12:59:12 +03:00
2025-12-23 15:48:23 +03:00
2025-12-16 17:56:36 +03:00

📦 Модуль blockchain

Модуль отвечает за хранение, чтение, проверку и создание бинарных блоков формата .bch — базовых элементов цепочек в системе SHiNE Blockchain.
Каждый блок содержит заголовок, тело (body), подпись Ed25519 и хэш SHA-256.


🔹 BchBlockEntry

Главный класс блока.

Публичные методы:

  • BchBlockEntry(int num, long time, short type, short ver, byte[] body) — создаёт новый блок без подписи.
  • BchBlockEntry(byte[] full) — распаковывает блок из байтов (RAW + SIG + HASH).
  • addSignatureAndHash(byte[] sig, byte[] hash) — добавляет подпись и хэш.
  • getBodyAsText() — возвращает тело как строку.
  • getSignature64(), getHash32(), getRawBytesWithSignatureAndHash() — доступ к данным блока.
  • toString() — краткое описание блока.

🔹 BchBlockValidator // сделан на будущее, для сетевых запросов не используется

Проверяет, можно ли добавить блок в цепочку.

Публичный метод:

  • validate(BchBlockEntry block, BchInfoEntry chain, long chainId) — сверяет номер блока, подпись и хэш.

🔹 BodyRecordParser

Определяет, какой тип тела (HeaderBody, TextBody и т.п.) нужно создать.

Публичный метод:

  • parse(short type, short version, byte[] body) — возвращает объект, реализующий BodyRecord.

🔹 BodyRecord (интерфейс)

Общее поведение для всех тел блоков.

Методы:

  • check() — проверить корректность данных.
  • toBytes() — сериализация обратно в байты (по умолчанию не реализована).

🔹 HeaderBody

Тело первого блока цепочки (тип 0).
Содержит логин, ID цепочки и публичный ключ пользователя.

Публичные методы:

  • HeaderBody(byte[] body) — парсинг из байтов.
  • HeaderBody(long id, String login, …) — создание нового заголовка.
  • check() — валидация логина и ключа.
  • toBytes() — сериализация в байты.
  • toString() — краткое описание полей.

🔹 TextBody

Простое текстовое сообщение (тип 1).

Публичные методы:

  • TextBody(byte[] body) — парсинг из байтов.
  • TextBody(String msg) — создание нового текстового блока.
  • check() — проверка, что текст не пуст.
  • toBytes() — вернуть текст как UTF-8-массив.
  • toString() — короткое текстовое описание.

💡 Вся логика создания, подписи и проверки блоков построена вокруг этих классов.
BchBlockEntry — контейнер блока,
HeaderBody / TextBody — содержимое,
BodyRecordParser — выбор нужного типа,
BchBlockValidator — контроль целостности.