Розробка AMM DEX на Uniswap V2/V3 з аудитом контрактів

Відмітимо: коли ми взялися за розробку першого AMM DEX для клієнта з DeFi, помилка в розрахунку price impact призвела до втрати $50k за годину. З тих пір ми перевіряємо кожну формулу і використовуємо тільки перевірені патерни. Розробка AMM DEX — це не просто написання смарт-контракту, а комплексна с

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Відмітимо: коли ми взялися за розробку першого 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 кроків?

  1. Розробка смарт-контрактів (Factory, Pair, Router) з тестами на Foundry.
  2. Аудит безпеки (Slither, Mythril, Echidna) та формальна верифікація.
  3. Деплой на тестнет, інтеграція з фронтендом.
  4. Тестування пулів ліквідності з реальними токенами.
  5. Деплой на 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 під ключ — від ідеї до деплою та підтримки.