Інтеграція DEX-агрегатора (1inch/Jupiter) в мобільний криптогаманець
Уявіть: користувач хоче обміняти ETH на USDC у вашому гаманці, але поточний курс на Uniswap на 2% гірший, ніж на Curve. DEX-агрегатор вирішує цю проблему, підбираючи найкращий маршрут по кількох пулах ліквідності. Однак інтеграція — це не просто виклик API. Вузькі місця: управління кількома блокчейнами, ліміти запитів, обробка транзакцій без газу. Наш досвід показує, що інтеграція в середньому займає 3–5 днів і включає не лише код, але й проектування UX свопу. Наприклад, при свопі $5000 економія на прослизанні сягає $25 за рахунок агрегації. Нижче — конкретні приклади підключення 1inch Fusion та Jupiter API з реальними фрагментами коду.
Чому інтеграція DEX-агрегатора — неочевидне завдання?
Розробники часто упускають з виду три ключові моменти: безпека API-ключів на клієнті, актуальність котирувань у реальному часі та поведінка при нестачі ліквідності. Безкоштовний тариф 1inch дозволяє лише один запит на секунду — для активного гаманця цього недостатньо, тому ми налаштовуємо кешування на бекенді. Для Jupiter таких обмежень немає, але Solana вимагає вміння працювати з VersionedTransaction.
Як ми інтегруємо 1inch Fusion для EVM-мереж
1inch Fusion — механізм gasless свопів: користувач підписує order, resolver платить газ і отримує винагороду. Ми використовуємо ендпоінт /fusion/quoter для отримання котирування та збираємо транзакцію через роутер-контракт.
// 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 та ще десяток. Для кожної мережі різний chainId — універсальної адреси немає.
Як ми інтегруємо Jupiter для Solana
Jupiter — стандарт де-факто для свопів у Solana. Ми використовуємо Jupiter API v6: отримуємо котирування через /quote, потім будуємо транзакцію через /swap. Jupiter обробляє понад 1000 транзакцій на секунду, що в 10 разів швидше, ніж 1inch, завдяки архітектурі Solana.
// 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 для швидкого включення у блок — рекомендуємо використовувати завжди.
Порівняння API-методів 1inch та Jupiter
| Параметр | 1inch | Jupiter |
|---|---|---|
| Ендпоінт котирування | /fusion/quoter |
/v6/quote |
| Формат транзакції | ABI-encoded calldata | base64 VersionedTransaction |
| Gasless | Так (Fusion) | Ні |
| API ключ | Потрібен | Не потрібен (до ліміту) |
| Точність | Висока | Дуже висока |
Ключові відмінності агрегаторів
| 1inch | Jupiter | 0x | |
|---|---|---|---|
| Мережі | EVM (10+) | Solana | EVM (8+) |
| Gasless | Так (Fusion) | Ні | Ні |
| API ключ | Потрібен | Ні (до ліміту) | Потрібен |
| Точність котирування | Висока | Дуже висока | Висока |
Документація 1inch підтверджує, що Fusion знижує газові витрати на 30%.
Як уникнути помилок при інтеграції?
Найчастіша проблема — невірна обробка статусів. insufficient liquidity від 1inch при малоліквідних парах — показуємо користувачеві повідомлення та пропонуємо змінити пару або зменшити суму. Не фолбэчте на інший агрегатор мовчки — користувач повинен знати джерело котирування. Для Jupiter типова помилка — невірно заданий slippageBps: рекомендуємо 50 (0.5%). Друга проблема — rate limits. 1inch Dev Portal починається з 1 RPS. На мобільному гаманці з активними користувачами потрібен платний план або проксирування через власний бекенд. Ми гарантуємо, що наші рішення враховують ці граничні випадки.
Що входить у роботу
- Аналіз архітектури: оцінка поточного гаманця, вибір агрегатора під мережі.
- Інтеграція API: підключення ендпоінтів котирувань та побудови транзакції.
- UI свопу: real-time оновлення курсів, вибір токенів, налаштування slippage.
- Підписання та відправка: робота з WalletConnect або Keychain, обробка підтверджень.
- Документація: опис методів, приклади запитів, гайд по підтримці.
- Навчання команди: передача знань по експлуатації модуля.
Процес роботи
- Аналітика: розбираємо поточний стек та вимоги.
- Проектування: обираємо агрегатор та архітектуру (проксі, кеш).
- Реалізація: пишемо код, використовуємо SwiftUI/Combine для iOS та Jetpack Compose/Coroutines для Android.
- Тестування: TestFlight / Firebase App Distribution, симулюємо низьку ліквідність.
- Деплой: публікація в App Store Connect / Google Play Console, налаштування provisioning profiles.
Оцініть ваш проект прямо зараз: зв'яжіться з нами для консультації. Ми допоможемо підібрати оптимальний агрегатор і вкладемося в бюджет. Понад 5 років на ринку мобільної розробки, понад 20 успішних проектів у блокчейн-сфері — гарантуємо якість інтеграції. Замовте консультацію, щоб дізнатися більше.
Терміни: 3–5 днів: інтеграція API котирувань, побудова UI свопу з real-time оновленням, обробка готової calldata від агрегатора, підписання та відправка транзакції, обробка помилок ліквідності.







