Розробка leveraged yield farming
Alpaca Finance на BSC у 2021 році показала proof-of-concept: займаєш кредит під залог LP-токенів, додаєш ліквідність в пул з плечем, farming rewards покривають вартість займу й дають net yield 50-200% APY. Привабило мільярди. Також створило хвилю ліквідацій при падінні BNB у травні 2021.
Leveraged yield farming — протокол, де користувач відкриває позицію з плечем (2x-10x) у yield-farming стратегії. Lending pool надає займ, borrower фарми з плечем, протокол управляє ліквідаціями. Усі три компоненти тісно пов'язані, ошибка в будь-якому створює системний ризик.
Чому це складніше звичайного лендингу
Проблема ціноутворення LP-токенів
У звичайному лендингу залог — ETH або USDC з ліквідною ціною від Chainlink. У leveraged farming залог — LP-токен Uniswap V2, Curve або іншого DEX. Справедлива ціна LP-токена нетривіальна та залежить від цін обох активів у пулі.
Формула справедливої ціни LP-токена (для Uniswap V2 x*y=k пула):
LP_price = 2 * sqrt(reserve0 * reserve1 * price0 * price1) / totalSupply
Це не (reserve0 * price0 + reserve1 * price1) / totalSupply — такий підхід уразливий для flash-loan маніпуляції ціною. Атакуючий може тимчасово дисбалансувати пул, завищити spot ціну LP-токена, позичити більше, повернути пул. Alpha Homora V1 втратила $37M у лютому 2021 саме через маніпуляцію ціною залогу.
Правильний розрахунок використовує sqrt(price0 * price1) — не залежить від поточного балансу пула, тільки від ринкових цін. Ціни з Chainlink, не з пула.
Ліквідація при impermanent loss
Стандартний collateral ratio в лендингу — статичний: ETH упав на 20%, ти близько до ліквідації. У leveraged farming гірше: навіть без руху ціни ETH, impermanent loss зменшує вартість LP-позиції при русі одного активу відносно іншого.
Протокол повинен враховувати IL при розрахунку health factor. Позиція 2x ETH-USDC при 10% русі ETH має ~0.25% IL, що на 2x плечо дає ~0.5% зменшення equity. Малі цифри, але при 10x плечо та 50% русі ринку — вже критично.
Правильна реалізація рахує equity = position_value - debt де position_value вичислюється через справедливу ціну LP. Liquidation threshold встановлюється з урахуванням worst-case IL для даної пари.
Debt ratio та kill factor
Два ключові параметри позиції:
Debt ratio = debt / position_value. При відкритті з 2x плечем та $1000 власних коштів: позиція $2000, борг $1000, debt ratio 50%.
Kill factor (liquidation threshold) — максимальний debt ratio, при якому ліквідатор може закрити позицію. Зазвичай 80-85%. Kill factor встановлюється per-pair: USDC/ETH у стейбл-пулі — вище (менший IL ризик), ETH/BTC-альткоін — нижче.
При ліквідації: ліквідатор викликає liquidate(), протокол продає LP-позицію (знімає ліквідність, робить своп), погашає борг з виручки, повертає залишок користувачу. Liquidation penalty (зазвичай 5%) йде ліквідатору як incentive.
Архітектура контрактів
Три ключові контракти
Lending Pool: пули ліквідності для кожного токена (ETH, USDC, BNB). Лендери депонують, отримують ibTokens (interest-bearing tokens, як Compound cToken). Borrowers позичають під залог позицій у Vault.
Worker: adapter-контракт для кожної стратегії (Uniswap V3 ETH-USDC 0.3%, PancakeSwap BNB-BUSD). Worker знає як відкривати/закривати позицію, додавати/убирати ліквідність у конкретному пулі. Нову стратегію додаємо як новий Worker без змін основних контрактів.
Vault: управляє позиціями користувачів. Зберігає дані про кожну позицію (owner, debt, position id у Worker), вичислює health factor, приймає виклики ліквідації.
struct Position {
address worker; // яка стратегія
address owner; // власник
uint256 debtShare; // доля у загальному борзі (не абсолютна сума)
uint256 id; // id у контракті Worker
}
Борг зберігаємо в shares, а не абсолютних значеннях — автоматично враховує накопилені проценти (як Aave aToken ratio).
Автоматичний реінвест (auto-compound)
Farming rewards (наприклад, CAKE на PancakeSwap) потрібно регулярно клеймити, продавати в базові токени та додавати назад в позицію. Це reinvest. Чим частіше — тим вище APY за рахунок складного процента, але вище gas costs.
Reinvest викликають боти-кіпери (будь-хто за невелике вознаграження) через reinvest() на контракті Worker. Оптимальна частота залежить від розміру позиції та вартості газу — для малих позицій раз на день достатньо, для великих — раз на годину.
Управління ризиками governance
Параметри, які мають бути під governance timelock:
- Kill factor per-pair
- Min debt size (захист від dust атак)
- Max leverage per-pair
- Reinvest bounty rate
- Нові Workers (додавання нових стратегій)
Жоден з цих параметрів не повинен змінюватися мгновенно. Timelock мінімум 48 годин для критичних (kill factor), 24 години для менш критичних.
Ризики, які потрібно прийняти заздалегідь
Smart contract risk: контракт складний, велика attack surface. Зовнішній аудит обов'язковий. Alpha Homora, Alpaca — обидва були взломані, деякі повторно.
Liquidation cascade: при різкому падінні ринку багато позицій одночасно досягають kill factor. Ліквідатори входять на ринок з великими обсягами, ціна падає ще сильніше, нові ліквідації. Протокол повинен мати emergency pause та параметри максимального обсягу ліквідацій за блок.
Oracle manipulation: критично захистити LP-price від spot маніпуляції. TWAP мінімум 30 хвилин + Chainlink вторинне джерело.
Процес розробки
Токеномика та параметри (1-2 тижні). Розрахунок kill factor для кожної пари, модель процентної ставки (utilization-based як Compound), incentive для ліквідаторів. Агентне моделювання liquidation cascade.
Core контракти (3-5 тижнів). Lending Pool з ibToken, базовий Vault, один тестовий Worker.
Workers для цільових стратегій (1-2 тижні на Worker). Інтеграція з Uniswap V3, PancakeSwap V3 або Curve залежно від цільових пулів.
Keeper інфраструктура (1 тиждень). Автоматизація reinvest та ліквідацій.
Аудит (обов'язковий). Не запускайте з реальними засобами без зовнішнього аудиту. Мінімум 3-4 тижні для повного аудиту протоколу такої складності.
Сроки від проектування до готовності до аудиту: 2-3 місяці. Вартість розраховується після фіналізації цільових пулів та мереж.







