Разработка мобильного приложения для крипто-кредитования (Lending)
Крипто-кредитование — это когда пользователь блокирует ETH как залог и получает стейблкоин USDC взаймы. Или наоборот — депозитор размещает USDC и получает проценты. На смарт-контракте это выглядит изящно. В мобильном приложении это превращается в набор сложных интерфейсов: здоровье позиции, liquidation threshold, процентные ставки в реальном времени и уведомления «ваш залог почти ликвидирован».
Ключевые механики, которые нужно правильно реализовать
Health Factor и ликвидация
Health Factor = (Collateral × Liquidation Threshold) / Borrowed Amount. Если HF падает ниже 1 — позиция ликвидируется. Это нужно показывать пользователю в реальном времени с визуальным индикатором — не просто числом, а шкалой с зонами: безопасно (зелёный, HF > 1.5), риск (жёлтый, 1.1–1.5), критично (красный, < 1.1).
Цена залогового актива меняется каждые несколько секунд. Значит, HF надо пересчитывать на клиенте при каждом обновлении цены — через Chainlink Price Feeds или CEX WebSocket. Важно не нагружать сервер polling'ом каждые 2 секунды со стороны тысяч клиентов; разумно подписаться на WebSocket от Binance wss://stream.binance.com:9443/ws/ethusdt@ticker и считать HF локально.
// Расчёт Health Factor на клиенте
struct LendingPosition {
let collateralUSD: Decimal // стоимость залога в USD
let liquidationThreshold: Decimal // например, 0.82 для ETH
let borrowedUSD: Decimal // сумма долга в USD
var healthFactor: Decimal {
guard borrowedUSD > 0 else { return Decimal.greatestFiniteMagnitude }
return (collateralUSD * liquidationThreshold) / borrowedUSD
}
var riskLevel: RiskLevel {
switch healthFactor {
case ..<1.1: return .critical
case 1.1..<1.5: return .warning
default: return .safe
}
}
}
Push-уведомление при HF < 1.2 — обязательная функция. Без неё пользователь не узнает о ликвидации. Реализуем через воркер на сервере, который мониторит позиции через смарт-контракт события (LiquidationCall event в ABI протокола) или через протокольный API (если Aave, Compound), и рассылает push через FCM/APNs при достижении порогов.
Подключение к протоколу
Если строим на основе существующего DeFi-протокола — Aave V3, Compound V3, Morpho — используем их SDK:
-
Aave:
@aave/contract-helpers+@aave/math-utils(TypeScript пакеты, вызываются через JavaScript bridge в React Native или через кастомный бэкенд) -
Compound:
compound-jsили прямые вызовы черезweb3j/web3.swift
Для нативных iOS/Android приложений без React Native удобнее держать всю Web3 логику на бэкенде и экспонировать её через REST API: клиент не знает об ABI, он просто делает POST /positions/deposit или GET /positions/{id}.
// Android: отображение позиции через Jetpack Compose
@Composable
fun PositionCard(position: LendingPosition, currentPrice: BigDecimal) {
val updatedPosition = position.copy(
collateralUSD = position.collateralAmount * currentPrice
)
Card(
colors = CardDefaults.cardColors(
containerColor = when (updatedPosition.riskLevel) {
RiskLevel.CRITICAL -> MaterialTheme.colorScheme.errorContainer
RiskLevel.WARNING -> Color(0xFFFFF3E0)
RiskLevel.SAFE -> MaterialTheme.colorScheme.surfaceVariant
}
)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("Залог: ${updatedPosition.collateralUSD.formatUSD()}")
Text("Долг: ${updatedPosition.borrowedUSD.formatUSD()}")
HealthFactorBar(hf = updatedPosition.healthFactor)
}
}
}
Процентные ставки и APY
Ставки в протоколах DeFi динамические — меняются в зависимости от utilization rate пула. Нужно обновлять их в UI каждые несколько минут. Для кастодиальных платформ (Nexo, BlockFi-подобные) ставки задаются административно и меняются реже.
APY vs APR — показываем оба. Пользователи путаются: APR 8% ≠ APY 8%. APY с учётом компаундинга выше. Формула: APY = (1 + APR/n)^n - 1, где n — количество периодов начисления в год.
Транзакции и газ
При взаимодействии с EVM-смарт-контрактами каждое действие — это on-chain транзакция. deposit(), borrow(), repay(), withdraw() — каждая стоит газ. Перед отправкой показываем пользователю оценку газа через eth_estimateGas и текущую цену из eth_gasPrice или EIP-1559 eth_maxFeePerGas.
Если строим на L2 (Arbitrum, Optimism, Base) — газ на порядок дешевле, что критично для UX в mobile-кредитовании.
Верификация и compliance
KYC через Sum Sub или Veriff для регулируемых платформ. Ограничения по юрисдикциям — пользователи из США не могут использовать большинство DeFi-платформ без регистрации в SEC. Геофильтрация по IP на сервере, дополнительно — проверка при регистрации.
Этапы и сроки
| Этап | Срок |
|---|---|
| Архитектура: DeFi-протокол или кастодиальная схема | 3–5 дней |
| Смарт-контракты или интеграция с протоколом | 1–3 недели |
| Серверная часть (позиции, цены, уведомления) | 2 недели |
| Мобильный клиент iOS + Android | 3–4 недели |
| Тестирование на testnet | 1 неделя |
Итого: 8–12 недель. Стоимость рассчитывается индивидуально после анализа требований.







