Повний гайд по створенню та використанню DEX на Conflux
Зміст
Як працює 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
Калькулятор непостійних втрат
Підтримка
Маєте питання? Приєднуйтесь:
Створено для Conflux Ukraine Webinar
30 жовтня 2025 | DeFi на Conflux: Створення Simple DEX