Разработка контрактов ликвидити-майнинга
Отметим: когда протокол запускает liquidity mining, типичная задача — распределять вознаграждение в токенах пропорционально вложенной ликвидности. На первый взгляд, простой стейкинг, но после внедрения всплывают десятки edge cases: flash loan атаки, inflation attack на пустом контракте, потеря точности при округлении. Один наш клиент потерял $50 000 из-за precision loss в первой версии — после этого мы переписали архитектуру, внедрив виртуальный начальный баланс и масштабирование 1e18. Наша команда решила эти проблемы в 50+ проектах, от небольших IDO до мультичейн-ферм с TVL > $200M. Мы не пишем универсальный контракт — каждый проект требует настройки под конкретную токеномику, аудит на reentrancy и газ-оптимизацию. Обращайтесь к нам для разработки надёжных контрактов — подготовим архитектуру и смету за один день.
Как устроена математика распределения наград?
Базовый алгоритм — MasterChef из Synthetix StakingRewards. Ключевая идея: накопленное вознаграждение на единицу стейка (rewardPerTokenStored).
uint256 public rewardPerTokenStored; function rewardPerToken() public view returns (uint256) { if (totalSupply == 0) return rewardPerTokenStored; return rewardPerTokenStored + ( (block.timestamp - lastUpdateTime) * rewardRate * 1e18 / totalSupply ); } function earned(address account) public view returns (uint256) { return (balanceOf[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; } Обновление происходит только при stake/withdraw/getReward, а не в каждом блоке — O(1) при любой численности участников. Погрешность от дискретных блоков устраняется масштабированием через 1e18.
Что делать с boosted rewards и multi-reward?
В моделях типа Convex/Curve эффективный стейк зависит от заблокированных governance-токенов (veTokens). Формула:
effective_balance = min(0.4 * balance + 0.6 * (totalSupply * veBal / veTotalSupply), balance) Это снижает sell pressure на reward-токен, но требует тщательного тестирования при нулевом veBalance. Для multi-reward каждый токен ведёт собственный rewardPerTokenStored. Референс — Synthetix StakingMultiRewards.
| Параметр | Masterchef | Boosted rewards | Multi-reward |
|---|---|---|---|
| Сложность | Низкая | Средняя | Высокая |
| Стоимость газа | 50-70k | 70-90k | 90-120k |
| Устойчивость к inflation attack | Да (вирт. баланс) | Да | Да |
| Гибкость токеномики | Низкая | Высокая | Высокая |
| Риски precision loss | Низкие | Средние | Средние |
Защита от уязвимостей ликвидити-майнинга
-
Inflation attack при первом депозите. Вводим виртуальный начальный баланс (
VIRTUAL_TOTAL_SUPPLY = 1e18), который никогда не снимается, или требуем минимальный депозит. - Flash loan атака. Устанавливаем минимальный период стейка (lockup) — 1-7 дней. Альтернатива: vesting вознаграждений (линейное высвобождение за N дней). Даже 24-часовой vesting делает атаку нерентабельной.
-
Griefing через обновление staking. Делаем
_updateRewardO(1), избегаем итераций по массивам. - Precision loss. Масштабирование через 1e18, накопление remainder’ов.
Детали реализации boosted rewards
Внутренняя логика: при stake/withdraw пересчитываем `effectiveBalance` пользователя на основе его веса в veToken. Храним отображение `effectiveBalances`. При обновлении `rewardPerToken` используем сумму effective-балансов вместо raw totalSupply.Сравнение газовых затрат на сложные схемы
| Операция | Базовая ферма | Multi-reward | Boosted |
|---|---|---|---|
| Stake | 60k | 90k | 80k |
| Withdraw | 55k | 85k | 75k |
| GetReward | 50k | 80k | 70k |
Наши контракты на 20-30% дешевле типовых реализаций за счёт компактного storage layout и off-chain расчётов. Например, экономия газа в 30k на каждой операции позволяет сэкономить до $5 000 в месяц на комиссиях при активном пуле. Дополнительная экономия: использование immutable переменных снижает стоимость деплоя на 15-20%.
Как мы работаем?
- Аналитика (0.5 дня). Определяем: один или несколько reward-токенов, нужен ли boosting, минимальный lockup, способ пополнения наград (manual или автомат).
- Проектирование архитектуры (0.5 дня). Выбор паттерна, расчёт rewardRate, проектирование событий для индексации.
- Разработка (2-3 дня). Реализация контракта с форматными тестами и fuzzing-проверками арифметики.
- Аудит внутренний (1 день). Прогон Slither, Mythril, Echidna. Исправление замечаний.
- Деплой (0.5 дня). Deployer-скрипт, верификация на Etherscan, transferOwnership на multisig.
Что входит в работу?
- Полный исходный код контрактов с комментариями и тестами (Foundry/Hardhat).
- Развёрнутый отчёт о газ-оптимизации с замерами.
- Гайд по интеграции субграфа (The Graph) для событий.
- Поддержка в течение 30 дней после деплоя: доработка параметров, редеплой при необходимости.
- Сопровождение внешнего аудита (по запросу).
Почему стоит заказать разработку у нас?
Мы разработали контракты для протоколов с TVL до $500M, провели более 20 внутренних аудитов. Наш опыт включает интеграцию с Chainlink oracle, кросс-чейн мосты (LayerZero, Wormhole) и MEV-защиту. Проекты, которые мы сопровождаем, проходят внешний аудит без критических замечаний. Мы проводим аудит ликвидности контракта на предмет уязвимостей. Получите консультацию по вашему проекту прямо сейчас — свяжитесь с нами для подготовки архитектуры и сметы.







