📑 Зміст
🔬 Як працює SimpleDEX
Основні концепції:
1. Automated Market Maker (AMM)
SimpleDEX використовує модель Constant Product Market Maker:
2. Liquidity Pools
- Постачальники ліквідності (LP) додають обидва токени в пул
- Отримують LP токени пропорційно до їх частки в пулі
- Заробляють 0.3% комісії з кожного swap
3. Swap механізм
Формула розрахунку обміну:
amountOut = (amountIn * 0.997 * reserveOut) / (reserveIn + amountIn * 0.997)
- 0.3% комісія йде в пул (збільшує k)
- Slippage protection через
minAmountOut
💻 Як використовувати
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:
-
Вхідна сума з комісією (0.3% йде в пул):
amountInWithFee = 10 * (10000 - 30) = 10 * 9970 = 99,700 -
Розрахунок виходу за формулою:
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 -
Новий стан пулу:
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 (яких ми уникли):
- Flash loan attacks - мінімізовано через комісії
- Price manipulation - захист через slippage
- Sandwich attacks - користувач контролює через minAmountOut
🚀 Деплой на Conflux eSpace
Крок 1: Налаштування Remix
- Відкрийте Remix IDE
- Створіть новий файл
SimpleDEX.sol - Скопіюйте код з цієї сторінки
- Встановіть compiler version:
0.8.20
Крок 2: Підключення Fluent Wallet
- Встановіть Fluent Wallet
- Переключіться на Conflux eSpace Testnet
- Отримайте testnet CFX: Faucet
Крок 3: Деплой
- Compile контракт в Remix
- Deploy → Injected Provider (Fluent)
- Вкажіть адреси token0 та token1
- 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:
- Користувачі роблять swap БЕЗ CFX на балансі
- dApp оплачує gas за користувачів
- Покращений UX для нових користувачів
Для eSpace:
- Користувачі платять мінімальні комісії (~$0.0001 за транзакцію)
- Повна EVM-сумісність без модифікацій коду
🔗 Докладніше про Sponsorship: Conflux Core Space Sponsor Whitelist
📚 Додаткові ресурси
📖 Conflux Docs
Офіційна документація Conflux Network
📄 Uniswap V2 Whitepaper
Технічна документація Uniswap V2
🔬 AMM Math Explained
Детальне пояснення математики AMM
🧮 Impermanent Loss Calculator
Калькулятор непостійних втрат
💬 Підтримка
Маєте питання? Приєднуйтесь:
🇺🇦 Telegram
Українська спільнота Conflux
💬 Discord
Міжнародна спільнота
🛠 Dev Chat
Чат для розробників
Створено для Conflux Ukraine Webinar
📅 30 жовтня 2025 | 🎯 DeFi на Conflux: Створення Simple DEX