Обновить синхронизацию серверов и экран сохранения ключей

This commit is contained in:
AidarKC
2026-06-24 20:18:40 +04:00
parent 0f63f7dae6
commit e60475f351
19 changed files with 908 additions and 22 deletions
@@ -0,0 +1,13 @@
# Стартовая загрузка `sync_servers` из server PDA
- Краткое описание:
- При запуске сервер читает свой логин из `server.SHiNE.login`, загружает свою server PDA из Solana, достаёт `sync_servers`, затем читает PDA партнёров и сохраняет их `login + server_address + updated_at_ms` в локальную таблицу `sync_servers`.
- Что проверять:
- В `application.properties` задан `server.SHiNE.login=shineupme`.
- После старта сервера в SQLite появилась/обновилась таблица `sync_servers`.
- В таблице лежат логины и адреса серверов из `sync_servers` текущего server PDA.
- При изменении `sync_servers` или `server_address` в Solana и перезапуске сервера локальная таблица обновляется.
- Ожидаемый результат:
- Сервер без ручного ввода адресов подтягивает партнёров синхронизации из Solana PDA и хранит их локально для следующих этапов репликации.
- Статус:
- `pending`
@@ -0,0 +1,15 @@
# Фоновая one-shot синхронизация `AddBlock` на `sync_servers`
- Краткое описание:
- После успешного локального `AddBlock` сервер в фоне пытается отправить тот же блок всем партнёрам из локальной таблицы `sync_servers`.
- Если партнёр отвечает `bad_prev_hash` или `bad_block_number`, сервер один раз делает backfill: читает недостающие блоки из БД по диапазону и досылает их по одному.
- Если в процессе возникает новая ошибка, попытка для этого партнёра прерывается без повторов.
- Что проверять:
- При добавлении нового блока клиент получает быстрый `OK`, не ожидая завершения межсерверной рассылки.
- В логах видно попытки отправки на адреса из `sync_servers`.
- При отставании партнёра сервер досылает пропущенный хвост блоков по одному.
- При ошибке после backfill сервер не зацикливается и не блокирует основной `AddBlock`.
- Ожидаемый результат:
- Репликация `AddBlock` работает в фоне и не ломает основной путь записи блока.
- Статус:
- `pending`