3.6 KiB
3.6 KiB
Периодическая межсерверная синхронизация блокчейнов
-
Краткое описание:
- При старте сервер подтягивает
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. - Нереализованный случай рассинхрона не приводит к падению сервера и явно отражается в логах.
-
Статус:
pending