Реализация кросс-чейн моста (Bridge) в мобильном криптокошельке
Кросс-чейн бридж — самый сложный сценарий в мобильном кошельке. Средства уходят из сети A, появляются в сети B. Этот процесс занимает от нескольких минут до нескольких часов, и пользователь остаётся в неведении, если не реализовать полноценное отслеживание.
Варианты интеграции: API бриджей
Реализовывать собственный bridge-протокол с нуля — не задача мобильного кошелька. Интегрируются готовые:
Li.Fi (https://li.fi/) — агрегатор мостов и свопов. Один API покрывает Stargate, Hop, Across, Squid и десятки других. Запрос маршрута:
// iOS — маршруты через Li.Fi SDK
import LiFi
let lifi = LIFI()
let routesRequest = RoutesRequest(
fromChainId: 1, // Ethereum
toChainId: 137, // Polygon
fromTokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
toTokenAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
fromAmount: "100000000" // 100 USDC (6 decimals)
)
let routes = try await lifi.getRoutes(request: routesRequest)
Squid Router — специализируется на кросс-чейн свопах через Axelar. Хорошо работает для EVM ↔ Cosmos.
Stargate Finance — протокол LayerZero, прямая интеграция через StargateFacet для USDC/USDT между основными EVM-сетями.
Маршрутизация и выбор бриджа
Li.Fi возвращает несколько маршрутов с разными параметрами. Показывать пользователю:
| Маршрут | Время | Комиссия | Получите |
|---|---|---|---|
| Stargate | ~5 мин | $2.50 | 97.5 USDC |
| Hop Protocol | ~20 мин | $1.80 | 98.2 USDC |
| Across | ~3 мин | $3.10 | 96.9 USDC |
Сортировка по умолчанию — максимальный output. Дать переключатель «быстрее» / «дешевле».
Отслеживание трансфера
После отправки транзакции в сети A пользователь получает txHash в source chain. Средства появятся в destination chain через время, зависящее от механизма финализации.
Li.Fi предоставляет status API: GET /v1/status?txHash={hash}&fromChain={chainId}&toChain={chainId}&bridge={bridgeName}. Статусы: PENDING → DONE / FAILED.
// Android — polling статуса бриджа
suspend fun pollBridgeStatus(txHash: String, fromChain: Int, toChain: Int): BridgeStatus {
repeat(180) { // 30 минут * 10 сек
delay(10_000)
val status = lifiBridgeApi.getStatus(txHash, fromChain, toChain)
if (status.status == "DONE" || status.status == "FAILED") return status
}
return BridgeStatus(status = "TIMEOUT")
}
Polling в фоне — через WorkManager (Android) или BackgroundTasks (iOS), чтобы пользователь получил push-уведомление по завершении, даже если закрыл приложение.
Обработка зависших трансферов
Некоторые бриджи не имеют автоматического возврата при ошибке. Li.Fi предоставляет recoverTx API для части случаев. Нужно хранить всю историю bridge-транзакций локально с возможностью повторной проверки и ссылкой на support бриджа.
Сроки: Интеграция через агрегатор (Li.Fi или Squid) с одним поддерживаемым маршрутом — 1–2 недели. Мультиагрегаторная система с выбором маршрутов, отслеживанием в фоне и историей — 3–6 недель.







