Добавить sync-профиль пользователя и обход Solana RPC

This commit is contained in:
AidarKC
2026-06-25 18:46:47 +04:00
parent f3e4233285
commit 23edad416c
13 changed files with 419 additions and 41 deletions
@@ -1,21 +1,28 @@
# Периодическая межсерверная синхронизация блокчейнов
- Краткое описание:
- При старте сервер подтягивает `sync_servers` из server PDA и сохраняет адреса партнёров в локальную таблицу.
- После успешного локального `AddBlock` работает фоновая one-shot отправка нового блока партнёрам.
- Добавлен публичный `GetBlockchainBlock` для чтения одного блока.
- Добавлен публичный `GetSyncUserProfile` для подготовки отсутствующей локальной цепочки без прямого Solana RPC.
- Добавлен плановый sync блокчейнов при старте сервера и затем каждые `12` часов.
- Синхронизация пока умеет только докачивать отсутствующий хвост цепочки.
- Добавлена настройка `sync.importUserProfileFromPartner.enabled`, которая включает создание локального `solana_users + blockchain_state` по ответу сервера-партнёра вместо Solana PDA.
- Случай рассинхрона цепочек пока не исправляется автоматически: он только логируется как не реализованный сценарий.
- Что именно проверять:
- После старта сервера в логах появляется запуск периодического sync.
- Сервер может запросить у партнёра `ListBlockchainHeads`.
- Сервер может запросить у партнёра `GetSyncUserProfile`, если включён `sync.importUserProfileFromPartner.enabled=true`.
- Сервер может запросить у партнёра `GetBlockchainBlock` и локально применить блок через существующий `AddBlock`.
- На чистом тестовом сервере после удаления БД и файлов блокчейнов сервер сам подтягивает блоки при старте.
- При включённом режиме обхода Solana сервер восстанавливает локальные цепочки без запросов в Solana RPC.
- После первичного старта новые блоки продолжают догоняться без ручного вмешательства.
- При рассинхроне цепочек в логах появляется явное сообщение, что reconciliation пока не реализован.
- Ожидаемый результат:
- Чистый сервер после старта сам восстанавливает локальные цепочки от партнёра синхронизации.
- В режиме обхода Solana чистый сервер не упирается в `Solana RPC 429` при создании локальных chain-state для уже существующих на партнёре пользователей.
- Периодический sync не мешает обычной работе сервера и не ломает локальный `AddBlock`.
- Нереализованный случай рассинхрона не приводит к падению сервера и явно отражается в логах.