Интеграция DEX-агрегатора (1inch/Jupiter) в мобильный криптокошелёк
DEX-агрегатор находит лучший курс обмена, сплитируя сделку между несколькими пулами. Интегрировать 1inch или Jupiter — значит подключить их API для котировок и либо их роутер контракт для исполнения, либо получить готовую calldata и отправить напрямую.
1inch Fusion API для EVM-сетей
1inch Fusion — механизм, при котором свопы исполняются через Resolvers без газа со стороны пользователя (gasless swap). Пользователь подписывает order, resolver платит gas и получает вознаграждение.
// iOS — запрос котировки через 1inch Fusion API
let url = URL(string: "https://api.1inch.dev/fusion/quoter/v2.0/1/quote/receive?fromTokenAddress=\(tokenIn)&toTokenAddress=\(tokenOut)&amount=\(amount)")!
var request = URLRequest(url: url)
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
let quote = try JSONDecoder().decode(FusionQuote.self, from: data)
Для классического swap (не Fusion) — /v5.2/{chainId}/swap возвращает полностью готовую транзакцию: to, data, value, gas. Приложению остаётся только подписать и отправить, не разбираясь в ABI роутера.
Поддерживаемые сети: Ethereum, BNB Chain, Polygon, Arbitrum, Optimism, Base, Avalanche и ещё десяток.
Jupiter для Solana
Jupiter — стандарт де-факто для свопов в Solana-экосистеме. Jupiter API v6:
// Android — получить котировку и транзакцию через Jupiter
// Quote
val quoteUrl = "https://quote-api.jup.ag/v6/quote?inputMint=$inputMint&outputMint=$outputMint&amount=$amount&slippageBps=50"
val quoteResponse = httpClient.get(quoteUrl)
// Swap transaction
val swapRequest = SwapRequest(quoteResponse, userPublicKey, dynamicComputeUnitLimit = true, prioritizationFeeLamports = "auto")
val swapResponse = httpClient.post("https://quote-api.jup.ag/v6/swap", swapRequest)
val transaction = swapResponse.swapTransaction // base64 encoded versioned transaction
Jupiter возвращает VersionedTransaction в base64. На Solana с SolanaSwift — декодировать, подписать Keypair пользователя, отправить через sendTransaction.
prioritizationFeeLamports = "auto" позволяет Jupiter автоматически установить priority fee для быстрого включения в блок — рекомендуется использовать всегда.
Ключевые различия между агрегаторами
| 1inch | Jupiter | 0x | |
|---|---|---|---|
| Сети | EVM (10+) | Solana | EVM (8+) |
| Gasless | Да (Fusion) | Нет | Нет |
| API ключ | Нужен | Нет (до лимита) | Нужен |
| Точность котировки | Высокая | Очень высокая | Высокая |
Обработка ошибок и деградация
1inch API может вернуть insufficient liquidity при малоликвидных парах. В этом случае — показать пользователю сообщение и предложить изменить пару или уменьшить сумму. Не пытаться фоллбэчить на другой агрегатор молча — пользователь должен быть в курсе откуда приходит котировка.
Rate limits: 1inch Dev Portal — от 1 RPS на бесплатном тарифе. На мобильном кошельке с активными пользователями нужен платный план или проксирование через собственный бэкенд.
Сроки: 3–5 дней: интеграция API котировок, построение UI свопа с реальтайм-обновлением, обработка готовой calldata от агрегатора, подписание и отправка транзакции, обработка ошибок ликвидности.







