Промежуточная версия и ТУДУ на чём остановился
This commit is contained in:
AidarKC
2025-12-16 17:56:36 +03:00
parent 19c4fd6cd1
commit ab44cc5282
30 changed files with 2511 additions and 3 deletions
@@ -0,0 +1,75 @@
# 📦 Модуль `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` — контроль целостности.