MultiChainSync.tsx
Обзор
Файл MultiChainSync.tsx представляет собой React-компонент, предназначенный для отображения и управления состоянием синхронизации игрового прогресса игрока между несколькими блокчейн-сетями (цепочками). Основная задача компонента — визуализировать текущее состояние данных игрока на разных цепочках, показывать события синхронизации и обеспечивать пользователю удобный интерфейс для просмотра детальной информации по каждой цепочке.
Компонент реализует динамическое обновление статусов синхронизации и прогресса, имитируя реальное время, что позволяет демонстрировать текущее состояние мультичейн-синхронизации.
Детальное описание классов и функций
Интерфейсы
ChainState
Определяет структуру состояния одной блокчейн-цепочки:
Свойство | Тип | Описание |
|---|---|---|
|
| Уникальный идентификатор цепочки |
|
| Название цепочки (например, Ethereum, Polygon) |
|
| Цвет, ассоциированный с цепочкой для визуализации |
| Данные игрока на данной цепочке | |
|
| Баланс игровой валюты MANA |
|
| Уровень игрока |
|
| Количество опыта |
|
| Список предметов в инвентаре |
|
| Список достижений игрока |
|
| Время последнего обновления данных |
| `'synced' | 'syncing' |
|
| Время последней успешной синхронизации |
SyncEvent
Определяет структуру события синхронизации между цепочками:
Свойство | Тип | Описание |
|---|---|---|
|
| Уникальный идентификатор события |
`'MANA_TRANSFER' | 'LEVEL_UP' | |
|
| Описание события |
|
| ChainId исходной цепочки |
| Массив ChainId целевых цепочек | |
|
| Время возникновения события |
`'propagating' | 'completed' | |
|
| Процент выполнения события |
Компонент MultiChainSync
Описание
Основной React-функциональный компонент, который:
Использует хук
useGameдля получения данных игрока из контекста.Инициализирует состояние для цепочек (
chainStates), событий синхронизации (syncEvents) и выбранной цепочки (selectedChain).Периодически обновляет данные синхронизации и прогресс событий с помощью
useEffect.Отображает список цепочек с краткой информацией о состоянии игрока и статусе синхронизации.
Показывает детальную информацию по выбранной цепочке.
Отображает список последних событий синхронизации.
Демонстрирует преимущества мультичейн-синхронизации.
Внутренние состояния (React hooks)
chainStates: ChainState[]— массив состояний цепочек.syncEvents: SyncEvent[]— массив событий синхронизации.selectedChain: ChainState— выбранная цепочка для отображения подробностей.
Логика обновления
Используется setInterval внутри useEffect, который каждые 3 секунды:
Обновляет статус цепочек с состоянием
syncingс вероятностью 30%, переводя их в статусsyncedи обновляя данные игрока.Обновляет прогресс событий со статусом
propagating, увеличивая его случайным образом до 100%. При достижении 100% событие переводится в статусcompleted.
Вспомогательные функции
getStatusIcon(status: ChainState['syncStatus']): Возвращает иконку состояния синхронизации.getStatusColor(status: ChainState['syncStatus']): Возвращает CSS-класс цвета для текста статуса.getEventIcon(type: SyncEvent['type']): Возвращает иконку для типа события.formatTimeAgo(timestamp: number): Форматирует время в удобочитаемый вид (например, "5m ago", "1h 15m ago").getChainName(chainId: number): Возвращает имя цепочки по еёchainId.
Использование
import { MultiChainSync } from './MultiChainSync';
function App() {
return <MultiChainSync />;
}
Компонент не принимает пропсы, все необходимые данные берутся из внутреннего состояния и контекста useGame.
Важные детали реализации
Используется TypeScript с чётко определёнными интерфейсами для состояния цепочек и событий.
Имитация асинхронных обновлений синхронизации реализована через
setIntervalс случайным прогрессом.Статусы синхронизации отображаются с помощью цветных иконок и текста.
При клике на цепочку отображаются подробные данные по игроку на этой цепочке.
Используются иконки из библиотеки
lucide-reactдля визуализации типов данных и статусов.Прогресс синхронизации событий отображается с анимированным прогресс-баром.
Визуально компоненты оформлены с помощью Tailwind CSS классов, что облегчает адаптивность и стилизацию.
Взаимодействие с другими частями системы
Компонент использует хук
useGameиз../providers/GameProviderдля доступа к данным игрока.Интегрирован с глобальным состоянием игры, предположительно обрабатываемым через контекст или провайдер.
Визуальные иконки импортируются из внешней библиотеки
lucide-react.Предполагается, что состояние цепочек и синхронизации в реальной системе будет получаться из бекенда или подписок на события блокчейн-сетей, но здесь реализована имитация.
Визуальная структура компонента
componentDiagram
component MultiChainSync {
+chainStates: ChainState[]
+syncEvents: SyncEvent[]
+selectedChain: ChainState
+useEffect: Обновление состояний и прогресса
+getStatusIcon()
+getStatusColor()
+getEventIcon()
+formatTimeAgo()
+getChainName()
}
MultiChainSync --> GameProvider : useGame()
MultiChainSync --> lucide-react : Иконки (CheckCircle, Clock, Coins...)
Итог
MultiChainSync.tsx — это React-компонент, который обеспечивает визуализацию и управление состоянием мультичейн-синхронизации игрового прогресса пользователя. За счёт продуманной структуры данных и динамического обновления статусов, компонент предоставляет пользователю подробную и удобную информацию о прогрессе на различных цепочках, а также историю событий синхронизации. Компонент легко интегрируется с остальной частью приложения, используя контекст игры и внешние библиотеки иконок.