SHiNE-server/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md

3.6 KiB
Raw Blame History

Периодическая межсерверная синхронизация блокчейнов

  • Краткое описание:

    • При старте сервер подтягивает 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