CrossChainTransfer.tsx

Обзор

Файл CrossChainTransfer.tsx представляет собой React-компонент для осуществления и отображения трансферов токенов MANA между разными блокчейн-сетями (кросс-чейн). Компонент позволяет пользователю выбирать исходную и целевую цепочки, указывать сумму и адрес получателя, а также просматривать историю последних трансферов с их статусами и деталями.

Основной функционал:

Основные сущности

Интерфейсы

CrossChainTransfer

Описание одного кросс-чейн трансфера.

Свойство

Тип

Описание

id

string

Уникальный идентификатор трансфера

from

string

Адрес отправителя

to

string

Адрес получателя

amount

number

Сумма перевода в MANA

sourceChain

ChainInfo

Информация об исходной цепочке

targetChain

ChainInfo

Информация о целевой цепочке

status

`'INITIATED'

'VALIDATING'

timestamp

number

Временная метка создания трансфера

txHash?

string

Хеш транзакции (если есть)

validatorCount

number

Количество валидаторов, подтвердивших трансфер

requiredValidators

number

Требуемое количество валидаторов

estimatedTime?

number

Оценочное время, оставшееся до завершения (секунды)

ChainInfo

Описание блокчейн-сети.

Свойство

Тип

Описание

id

number

Идентификатор цепочки

name

string

Название цепочки

symbol

string

Символ валюты (токена)

color

string

Цвет для UI

rpcUrl

string

URL RPC-узла для взаимодействия

explorerUrl

string

URL блокчейн-эксплорера

Константа

SUPPORTED_CHAINS — массив поддерживаемых цепочек с их параметрами.

Компонент CrossChainTransfer

Функциональный React-компонент, реализующий UI и логику трансфера токенов между цепочками.

Хуки и состояние

Логика и методы

handleSwapChains()

Меняет местами исходную и целевую цепочки.

handleTransfer()

Запускает процесс трансфера:

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>
  );
}

Взаимодействие с другими частями системы

Важные детали реализации и алгоритмы


Диаграмма структуры компонента

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.