SHA256
16 12 25
Промежуточная версия и ТУДУ на чём остановился
This commit is contained in:
@@ -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` — контроль целостности.
|
||||
Reference in New Issue
Block a user