Реалізація свопа токенів (Token Swap) у мобільному криптогаманці
Вбудований своп—конкурентне преимущество гаманця. Користувач міняє токени, не виходячи з програми. Але за простим UI скривається нетривіальна цепочка: котировка → slippage → approve → swap → трекінг. Кожний крок з потенційними втратами для користувача при некоректній реалізації.
Отримання котировки
Котировка—це скільки токенів B отримає користувач за N токенів A з урахуванням комісії пулу. Джерела:
1inch Aggregation Protocol API—найпопулярніший варіант для мультичейн гаманців. GET /v5.2/{chainId}/quote?src={tokenIn}&dst={tokenOut}&amount={amount} повертає toAmount, estimatedGas та маршрут.
Uniswap V3 QuoterV2—onchain-котировка через eth_call. Підходить якщо гаманець працює тільки з однією мережею та не хоче залежати від сторонніх API.
0x API (/swap/v1/quote)—хороша альтернатива 1inch для EVM-мереж, особливо для Ethereum та Polygon.
Котировка застарівает швидко—оновлювати щих 15–30 секунд, показувати користувачу таймер зворотного відсчету. Після закінчення—автоматично запросити нову.
Slippage та amountOutMinimum
Slippage—максимально допустиме відхилення від котировки. amountOutMinimum = quotedAmount * (1 - slippage/100). Якщо реальний output менше—транзакція ревертиться.
// Android — розрахунок amountOutMinimum
val slippageBips = 50 // 0.5% у basis points
val amountOutMinimum = quotedAmountOut.multiply(BigInteger.valueOf(10000 - slippageBips))
.divide(BigInteger.valueOf(10000))
Показувати користувачу: «Мінімум отримаєте X.XX TOKEN». Це честно та зменшує претензії при високій волатильності.
Для stablecoin-пар (USDC → USDT)—0.1% slippage достатньо. Для мем-токенів з низькою ліквідністю—потрібен ручний контроль до 5–10%, з явним попередженням про ризики.
Approve: одобрення токена перед свопом
ERC-20 потребує approve(spenderAddress, amount) перед тим, як роутер возьме токени. Якщо approve уже достатній (allowance >= amountIn)—пропустити.
Перевірка allowance: ERC20.allowance(ownerAddress, spenderAddress) через eth_call.
Два підходи до суми approve:
- Точна сума (approve на amountIn)—безпечніше, але потребує approve при кожному свопі.
- Max approve (
uint256.max)—одна транзакція навсегда, але ризик при компрометації роутера.
У 2023–2024 кілька роутерів було взламано, та користувачі з max approve втратили кошти. Рекомендую точний approve з опцією «запам'ятати дозвіл» для power users.
Трекінг та історія свопів
Після відправки транзакції—показати статус pending з txHash. Polling eth_getTransactionReceipt щих 5 секунд. При статусі status: 0 (revert)—показати причину: декодувати revertReason з receipt або зробити eth_call з тими ж параметрами для отримання помилки.
Зберігати історію свопів локально: токен A → токен B, суми, txHash, timestamp, итоговий статус. Користувач повинен бачити минулі операції без інтернету.
Сроки: 5 днів: інтеграція котировочного API, розрахунок slippage, flow approve → swap, трекінг транзакції, історія. Мультичейн своп (ETH + BSC + Polygon)—+2–3 дні.







