Повернутися до матеріалів

📖 Документація SimpleDEX

Повний гайд по створенню та використанню DEX на Conflux

🔬 Як працює SimpleDEX

Основні концепції:

1. Automated Market Maker (AMM)

SimpleDEX використовує модель Constant Product Market Maker:

x × y = k
x = резерв токену 0  |  y = резерв токену 1  |  k = константа

2. Liquidity Pools

3. Swap механізм

Формула розрахунку обміну:

amountOut = (amountIn * 0.997 * reserveOut) / (reserveIn + amountIn * 0.997)

💻 Як використовувати

1. Деплой контракту

// Припустимо у нас є два токени: CFX та USDT
address token0 = 0x... // CFX address
address token1 = 0x... // USDT address

SimpleDEX dex = new SimpleDEX(token0, token1);

2. Додати ліквідність

// Approve токени для DEX
IERC20(token0).approve(address(dex), 1000 * 10**18);
IERC20(token1).approve(address(dex), 1000 * 10**6);

// Додати ліквідність (наприклад 1000 CFX та 1000 USDT)
dex.addLiquidity(1000 * 10**18, 1000 * 10**6);
// Отримаємо LP токени

3. Swap токенів

// Approve токени для swap
IERC20(token0).approve(address(dex), 10 * 10**18);

// Swap 10 CFX на USDT з мінімальним виходом 9.5 USDT (5% slippage)
dex.swap(
    address(token0),     // tokenIn = CFX
    10 * 10**18,         // amountIn = 10 CFX
    95 * 10**5           // minAmountOut = 9.5 USDT (slippage protection)
);

4. Видалити ліквідність

// Перевірити баланс LP токенів
uint256 lpBalance = dex.balanceOf(msg.sender);

// Видалити всю ліквідність
dex.removeLiquidity(lpBalance);
// Отримаємо назад CFX та USDT + зароблені комісії

📊 Математика DEX

Приклад розрахунку:

Початковий стан пулу:

  • Reserve CFX: 1,000
  • Reserve USDT: 1,000
  • k = 1,000,000

Swap 10 CFX на USDT:

  1. Вхідна сума з комісією (0.3% йде в пул):
    amountInWithFee = 10 * (10000 - 30) = 10 * 9970 = 99,700
  2. Розрахунок виходу за формулою:
    amountOut = (amountInWithFee * reserveOut) / (reserveIn * 10000 + amountInWithFee)
    amountOut = (99,700 * 1,000) / (1,000 * 10,000 + 99,700)
    amountOut = 99,700,000 / 10,099,700 ≈ 9.871 USDT

    Спрощена форма: (10 * 0.997 * 1,000) / (1,000 + 10 * 0.997) ≈ 9.871 USDT

  3. Новий стан пулу:
    Reserve CFX: 1,010 CFX (додали 10)
    Reserve USDT: 990.129 USDT (забрали 9.871)
    k ≈ 1,000,130 (збільшився за рахунок комісії 0.3%!)

Price Impact:

Price Impact = (Expected - Actual) / Expected * 100%
Expected = 10 USDT (за ціною 1:1)
Actual = 9.871 USDT
Impact = (10 - 9.871) / 10 * 100% ≈ 1.29%

⚠️ Чому не 9.97 USDT (якщо комісія 0.3%)?

  • 0.3% комісія = 0.03 CFX забрано як fee
  • Але також є price impact через зміну балансів пулу
  • Загальна втрата: 0.03 (fee) + 0.099 (price impact) = 0.129 USDT

🛡️ Безпека

Важливі моменти:

1. Reentrancy Protection ✅

  • Використовуємо ReentrancyGuard від OpenZeppelin
  • Всі external функції захищені nonReentrant

2. Slippage Protection ✅

  • Параметр minAmountOut в функції swap
  • Захищає від front-running атак

3. Integer Overflow ✅

  • Solidity 0.8+ автоматично перевіряє overflow
  • Додаткові перевірки на нульові значення

Типові вразливості DEX (яких ми уникли):


🚀 Деплой на Conflux eSpace

Крок 1: Налаштування Remix

  1. Відкрийте Remix IDE
  2. Створіть новий файл SimpleDEX.sol
  3. Скопіюйте код з цієї сторінки
  4. Встановіть compiler version: 0.8.20

Крок 2: Підключення Fluent Wallet

  1. Встановіть Fluent Wallet
  2. Переключіться на Conflux eSpace Testnet
  3. Отримайте testnet CFX: Faucet

Крок 3: Деплой

  1. Compile контракт в Remix
  2. Deploy → Injected Provider (Fluent)
  3. Вкажіть адреси token0 та token1
  4. Deploy та підтвердіть транзакцію

Крок 4: Verify контракт

Верифікуйте на ConfluxScan:

Contract Address: 0x...
Compiler: v0.8.20
Optimization: Yes, 200 runs

🎁 Бонус: Transaction Sponsorship

⚠️ Важлива примітка: Transaction Sponsorship доступний тільки на Conflux Core Space, а не на eSpace.

SimpleDEX з цього вебінару створений для Conflux eSpace (EVM-сумісна мережа), де sponsorship не підтримується.

Якщо ви хочете використати Sponsorship:

Потрібно перенести контракт на Conflux Core Space:

// На Conflux Core Space можна налаштувати sponsorship
SponsorWhitelistControl(0x0888000000000000000000000000000000000001)
    .addPrivilege(address(this));

Переваги Sponsorship на Core Space:

Для eSpace:

🔗 Докладніше про Sponsorship: Conflux Core Space Sponsor Whitelist


📚 Додаткові ресурси


💬 Підтримка

Маєте питання? Приєднуйтесь:


Створено для Conflux Ukraine Webinar
📅 30 жовтня 2025 | 🎯 DeFi на Conflux: Створення Simple DEX