CrossChainTransfer.tsx
Обзор
Файл CrossChainTransfer.tsx представляет собой React-компонент для осуществления и отображения трансферов токенов MANA между разными блокчейн-сетями (кросс-чейн). Компонент позволяет пользователю выбирать исходную и целевую цепочки, указывать сумму и адрес получателя, а также просматривать историю последних трансферов с их статусами и деталями.
Основной функционал:
Выбор исходной и целевой цепочки из списка поддерживаемых.
Ввод суммы перевода и адреса получателя.
Инициация трансфера с имитацией процесса подтверждения (валидирования) и завершения.
Отображение истории трансферов с текущим статусом, временем, прогрессом валидации и ссылками на блокчейн-эксплореры.
Основные сущности
Интерфейсы
CrossChainTransfer
Описание одного кросс-чейн трансфера.
Свойство | Тип | Описание |
|---|---|---|
|
| Уникальный идентификатор трансфера |
|
| Адрес отправителя |
|
| Адрес получателя |
|
| Сумма перевода в MANA |
|
| Информация об исходной цепочке |
|
| Информация о целевой цепочке |
| `'INITIATED' | 'VALIDATING' |
|
| Временная метка создания трансфера |
|
| Хеш транзакции (если есть) |
|
| Количество валидаторов, подтвердивших трансфер |
|
| Требуемое количество валидаторов |
|
| Оценочное время, оставшееся до завершения (секунды) |
ChainInfo
Описание блокчейн-сети.
Свойство | Тип | Описание |
|---|---|---|
|
| Идентификатор цепочки |
|
| Название цепочки |
|
| Символ валюты (токена) |
|
| Цвет для UI |
|
| URL RPC-узла для взаимодействия |
|
| URL блокчейн-эксплорера |
Константа
SUPPORTED_CHAINS — массив поддерживаемых цепочек с их параметрами.
Компонент CrossChainTransfer
Функциональный React-компонент, реализующий UI и логику трансфера токенов между цепочками.
Хуки и состояние
sourceChainиtargetChain: выбранные цепочки отправления и получения.amount: строка с суммой перевода.recipient: адрес получателя.isTransferring: индикатор процесса перевода.transfers: массив текущих кросс-чейн трансферов (история).showAdvanced: показывать или скрывать расширенные опции.
Логика и методы
handleSwapChains()
Меняет местами исходную и целевую цепочки.
handleTransfer()
Запускает процесс трансфера:
Проверяет валидность введенных данных.
Создает новый объект трансфера с статусом
INITIATED.Добавляет новый трансфер в историю.
Вызывает метод
performActionизuseGameдля выполнения операции.Симулирует изменение статусов:
Через 2 секунды переводится в статус
VALIDATINGс прогрессом.Через 8 секунд переводится в статус
COMPLETEDс хешем транзакции.
Очищает форму ввода.
Обрабатывает ошибки и отключает индикатор загрузки.
getStatusIcon(status)
Возвращает JSX-иконку, соответствующую статусу трансфера.
getStatusColor(status)
Возвращает CSS-класс с цветом текста для статуса.
formatTimeAgo(timestamp)
Форматирует метку времени в удобочитаемый формат времени, прошедшего с момента события (например, "5m ago" или "1h 20m ago").
formatEstimatedTime(seconds)
Форматирует оставшееся время из секунд в минуты и секунды.
UI Компоненты
Форма выбора цепочек (с возможностью свапа).
Поля ввода суммы и адреса получателя.
Кнопка запуска трансфера с индикатором загрузки.
Расширенные опции с информацией о времени, комиссиях, безопасности.
Секция истории трансферов с детальной информацией и прогрессом.
Пример использования
import { CrossChainTransfer } from './CrossChainTransfer';
function App() {
return (
<div>
<CrossChainTransfer />
</div>
);
}
Взаимодействие с другими частями системы
Используется хук
useGameиз../providers/GameProviderдля доступа к данным игрока (player) и методаperformActionдля инициирования трансфера.Интеграция с UI-библиотекой иконок
lucide-reactдля отображения статусов и действий.Поддерживает ссылки на внешние блокчейн-эксплореры для просмотра транзакций.
Работает с глобальным состоянием игрока, управляемым через
GameProvider.
Важные детали реализации и алгоритмы
Компонент использует моковые данные в
useEffectдля демонстрации истории трансферов.Симуляция процесса трансфера с задержками
setTimeoutдля имитации изменения статусов.Валидация данных формы с ограничением суммы на балансе игрока.
Отображение прогресса валидации с визуальным прогресс-баром.
Гибкая работа с множеством цепочек, исключая выбор одинаковых цепочек для отправки и получения.
Диаграмма структуры компонента
classDiagram
class CrossChainTransfer {
-sourceChain: ChainInfo
-targetChain: ChainInfo
-amount: string
-recipient: string
-isTransferring: boolean
-transfers: CrossChainTransfer[]
-showAdvanced: boolean
+handleSwapChains()
+handleTransfer()
+getStatusIcon(status)
+getStatusColor(status)
+formatTimeAgo(timestamp)
+formatEstimatedTime(seconds)
+render()
}
class ChainInfo {
+id: number
+name: string
+symbol: string
+color: string
+rpcUrl: string
+explorerUrl: string
}
class CrossChainTransferInterface {
+id: string
+from: string
+to: string
+amount: number
+sourceChain: ChainInfo
+targetChain: ChainInfo
+status: string
+timestamp: number
+txHash?: string
+validatorCount: number
+requiredValidators: number
+estimatedTime?: number
}
CrossChainTransfer o-- ChainInfo : uses
CrossChainTransfer "1" *-- "many" CrossChainTransferInterface : manages
Заключение
CrossChainTransfer.tsx — это UI-компонент для кросс-чейн перевода токенов с логикой симуляции процесса трансфера и удобным визуальным представлением текущих и прошлых операций. Он играет важную роль в интерфейсе пользователя системы, связанной с мультицепочечными финансовыми операциями и интегрируется с игровым контекстом через GameProvider.