Відмітимо: коли ми взялися за розробку першого AMM DEX для клієнта з DeFi, помилка в розрахунку price impact призвела до втрати $50k за годину. З тих пір ми перевіряємо кожну формулу і використовуємо тільки перевірені патерни. Розробка AMM DEX — це не просто написання смарт-контракту, а комплексна система: математика ціноутворення, захист від MEV, економіка пулу та UX. У цій статті ми розберемо, як побудувати DEX на базі AMM з нуля: від формули constant product до деплою на mainnet. Ми вже реалізували DEX для 10+ проєктів, total value locked перевищує $50M. Наш досвід включає роботу з Ethereum, Arbitrum, Polygon та BNB Chain. Якщо ви плануєте запуск власного DEX, вам знадобиться не тільки код, але й розуміння маркет-мейкінгу та безпеки. У цій статті ми ділимося практичними рішеннями.
Чому constant product формула досі актуальна?
AMM (Automated Market Maker) замінює традиційний order book математичною формулою. Uniswap V2 популяризував x * y = k — добуток резервів постійний. Ціна токена X в одиницях Y: price = y / x. При свопі трейдер вносить Δx, отримує Δy з урахуванням комісії 0.3%. Price impact — зсув ціни — прямо пропорційний розміру угоди відносно пулу. Це фундаментально: великі ордери дають погану ціну в малих пулах.
Формула з урахуванням комісії: Δy = y * Δx * (1 - fee) / (x + Δx * (1 - fee)). Незважаючи на простоту, вона страждає від неефективності для активів з однаковою ціною (stablecoins). Для цього існує Curve з гібридною формулою.
Приклад розрахунку price impact
Якщо резерви пулу 1000 USDC і 1 ETH, ціна ETH = 1000 USDC. Своп 100 USDC (Δx=100) дасть: Δy = 1 * 100 * 0.997 / (1000 + 100*0.997) ≈ 0.0907 ETH. Price impact = (1000 / 0.0907) - 1100? ≈ 1.6%.
Як concentrated liquidity змінює ефективність капіталу?
Uniswap V3 додав concentrated liquidity: LP вказують ціновий діапазон [Pa, Pb]. Поза діапазоном ліквідність неактивна. Формули: x = L * (1/√P - 1/√Pb), y = L * (√P - √Pa). Капітальна ефективність зростає в 100-4000 разів для стейблкоїн-пар, але LP приймають більш складний impermanent loss.
| Параметр | Uniswap V2 | Uniswap V3 |
|---|---|---|
| Формула | x*y=k | concentrated liquidity |
| Ефективність капіталу | 1x | до 4000x |
| Impermanent loss | стандартний | залежить від діапазону |
| Газ на своп | ~100k | ~150k |
Архітектура смарт-контрактів AMM DEX
Типова архітектура складається з Factory, Pair (Pool) та Router. Factory створює пули через CREATE2:
contract AmmFactory { mapping(address => mapping(address => address)) public getPair; function createPair(address tokenA, address tokenB) external returns (address pair) { require(tokenA != tokenB, "IDENTICAL_ADDRESSES"); (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "ZERO_ADDRESS"); require(getPair[token0][token1] == address(0), "PAIR_EXISTS"); bytes memory bytecode = type(AmmPair).creationCode; bytes32 salt = keccak256(abi.encodePacked(token0, token1)); assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt) } IAmmPair(pair).initialize(token0, token1); getPair[token0][token1] = pair; getPair[token1][token0] = pair; } } Pair контракт — ядро: зберігає резерви, випускає LP-токени, виконує свопи з оптимістичним переводом та перевіркою інваріанту. Патерн flash loan закладено через callback:
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock { (uint112 _reserve0, uint112 _reserve1,) = getReserves(); if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data); uint balance0 = IERC20(_token0).balanceOf(address(this)); uint balance1 = IERC20(_token1).balanceOf(address(this)); uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0; uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, "INSUFFICIENT_INPUT_AMOUNT"); uint balance0Adjusted = balance0 * 1000 - amount0In * 3; uint balance1Adjusted = balance1 * 1000 - amount1In * 3; require(balance0Adjusted * balance1Adjusted >= uint(_reserve0) * _reserve1 * 1000**2, "K"); _update(balance0, balance1, _reserve0, _reserve1); } Router контракт забезпечує multi-hop маршрути, slippage protection та deadline.
Захист від MEV та реентерансі
Класична атака sandwich: MEV-бот вставляє свою покупку перед свопом жертви та продаж після. Захист: Slippage tolerance — користувач задає максимальний price impact; private mempool (Flashbots); commit-reveal схеми; batch auctions (CoW Protocol) — всі ордери виконуються за єдиною ціною.
Reentrancy protection: mutex lock використовує один storage slot, що економить ~2300 gas порівняно з OpenZeppelin ReentrancyGuard.
uint private unlocked = 1; modifier lock() { require(unlocked == 1, "LOCKED"); unlocked = 0; _; unlocked = 1; } Токеноміка та управління
Рекомендуємо дворівневу структуру комісій: LP fee (0.3%) + protocol fee (0.05%), навіть якщо protocol fee спочатку вимкнено. Governance токен розподіляється через liquidity mining за патерном MasterChef (SushiSwap). Спрощена формула: pendingReward = userLPBalance * (accRewardPerShare - userRewardDebt) / 1e12.
Фронтенд та UX
Критичні компоненти: swap-інтерфейс з real-time price impact, управління ліквідністю з візуалізацією діапазону (для V3), графіки через The Graph, інтеграція гаманців (wagmi + viem, WalletConnect v2), симуляція транзакцій через Tenderly.
Як розгорнути AMM DEX за 5 кроків?
- Розробка смарт-контрактів (Factory, Pair, Router) з тестами на Foundry.
- Аудит безпеки (Slither, Mythril, Echidna) та формальна верифікація.
- Деплой на тестнет, інтеграція з фронтендом.
- Тестування пулів ліквідності з реальними токенами.
- Деплой на mainnet, налаштування моніторингу (Tenderly, Etherscan API).
Що входить в розробку AMM DEX
| Етап | Що робимо | Результат |
|---|---|---|
| Аналітика | Визначаємо модель AMM, токеноміку | ТЗ |
| Розробка контрактів | Solidity + Foundry, тести | Вихідний код |
| Аудит | Slither, Mythril, Echidna | Звіт про аудит |
| Фронтенд | React + wagmi, інтеграція гаманців | Готова DApp |
| Деплой | Налаштування мережі, моніторинг | Робочий DEX |
Чому варто замовити розробку у нас?
Ми гарантуємо якість коду та проходження аудиту. Наш досвід — понад 10 успішних DEX проєктів, включаючи інтеграцію з Layer 2 (Arbitrum, Optimism). Використовуємо перевірені патерни та бібліотеки. Uniswap V2 Whitepaper — основа, яку ми адаптуємо під ваші завдання. Automated Market Maker — ключовий механізм, що лежить в основі. Зв'яжіться з нами для безкоштовної консультації та оцінки проєкту. Замовте розробку AMM DEX під ключ — від ідеї до деплою та підтримки.







