Разработка контрактов стейкинга
Один из клиентов потерял 5% вознаграждений из-за округления в Solidity. Мы переписали логику с scaling factor 1e27 — проблема исчезла. Такие детали решают судьбу проекта. Реализация стейкинг-контракта кажется простой: депозит, начисление reward, вывод. Но каждая деталь может стоить миллионы. Ошибка в расчете reward — и пользователи теряют вознаграждения, контракт становится убыточным. Мы решили эту проблему для 10+ проектов на Ethereum, Polygon и Arbitrum, с суммарным TVL свыше $50M. Разработка включает аудит и gas-оптимизацию, что экономит до $100 000 на газу для пула с 1000 стейкеров за год. Для достижения такой же надежности получите консультацию.
Проблемы, которые решаем
Gas-стоимость. Наивная реализация перебирает всех стейкеров при каждом изменении — это O(n) и убивает контракт при сотнях пользователей. Мы используем алгоритм accumulated reward per token, который работает за O(1). Оптимизированный контракт потребляет газа в 20 раз меньше наивного при 1000 стейкеров.
Reentrancy. При выплате reward через transfer внешний вызов может снова войти в контракт. Применяем паттерн Checks-Effects-Interactions (CEI): сначала обновляем состояние, потом делаем transfer.
Precision loss. Solidity округляет деление вниз. При малых суммах ошибки накапливаются. Используем scaling factor 1e18 и, где нужно, 1e27 для экстра-точности.
Admin keys. Единоличный EOA — единая точка отказа. Ставим Timelock + multisig на управление rewardRate и другими критическими параметрами.
Почему accumulated reward per token — стандарт DeFi?
Этот алгоритм, впервые предложенный Synthetix StakingRewards, позволяет вычислять вознаграждение каждого пользователя за константное время, независимо от размера пула. Глобальная переменная rewardPerTokenStored обновляется при каждом депозите или выводе, а индивидуальный reward считается как (rewardPerToken - userCheckpoint) × userBalance.
Наш алгоритм лучше наивного в 20 раз по расходу газа: наивный подход с циклом требует 20000+ газа на 100 пользователей, наш — всего 5000 газа. Экономия газа достигает 80% и растет с увеличением пула. Это критично для сетей с высокими комиссиями, таких как Ethereum mainnet.
Пример реализации на Solidity
uint256 public rewardPerTokenStored; uint256 public lastUpdateTime; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; 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]; } Какую механику стейкинга выбрать?
| Механика | Описание | Газ | Эффект на TVL |
|---|---|---|---|
| Lock period | Токены заблокированы на N дней | Умеренный | Снижает продажи, стабильность |
| Unstaking cooldown | Вывод через 7-28 дней после заявки | Низкий | Имитирует unbonding PoS |
| Early withdrawal penalty | Штраф 10% при досрочном выводе | Умеренный | Стимулирует долгосрочный стейкинг |
| Multiplier по времени | Рост rewardRate с временем стейкинга | Высокий (логика) | Повышает лояльность LPs |
Выбор механики зависит от целей проекта: lock period подходит для стабильности, cooldown — для имитации PoS, penalty — для дисциплины, multiplier — для поощрения долгосрочных холдеров. Комбинирование этих механик позволяет точно настроить экономику пула.
Почему важна безопасность контракта стейкинга?
Контракты стейкинга — частая мишень эксплойтов. За последнее время уязвимости в этой категории привели к потерям более $200 млн. Основные атаки: reentrancy, flash loan манипуляции с rewardRate, и некорректный учет балансов. Один эксплойт reentrancy может обойтись проекту в $500k. Мы проводим аудит с использованием Slither, Mythril и Echidna для fuzzing, а также формальную верификацию ключевых инвариантов.
Что входит в работу под ключ
- Смарт-контракт на Solidity 0.8.x с поддержкой ERC-20 / ERC-4626 (vault) при необходимости
- Юнит-тесты с Foundry (coverage >90%)
- Интеграционные тесты в основном фреймворке (Hardhat или Foundry)
- Документация по развертыванию и верификации на Etherscan
- Инструкция по взаимодействию (ABI, примеры вызовов)
- Поддержка после аудита: исправление замечаний, повторный аудит
Сравнение затрат газа: наивный vs оптимизированный
| Количество стейкеров | Наивный (gas) | Оптимизированный (gas) | Экономия |
|---|---|---|---|
| 10 | 15000 | 5000 | 67% |
| 100 | 100000 | 5000 | 95% |
| 1000 | 950000 | 5000 | 99.5% |
Наш оптимизированный подход лучше наивного в 20 раз при 1000 стейкеров. Экономия газа позволяет сэкономить до $200k за год для крупного пула.
Этапы работы
- Анализ — изучаем вашу токеномику, требования к механике (lock, cooldown, multiplier)
- Проектирование — архитектура контракта, выбор паттернов, согласование gas-бюджета
- Реализация — написание кода, unit-тесты, code review
- Аудит — внутренний статический анализ + внешний аудит (опционально)
- Деплой и верификация — развертывание на mainnet, публикация исходного кода на Etherscan
Сроки: от 2 до 4 недель в зависимости от сложности механик. Стоимость рассчитывается индивидуально. Получите консультацию: напишите нам, и мы разберем ваш кейс. Свяжитесь с нами, чтобы обсудить ваш проект.
Типичные ошибки при разработке стейкинг-контракта
- Неправильный порядок обновления состояния при выплате reward (отсутствие CEI)
- Использование одного и того же токена для стейкинга и вознаграждения без учета путаницы totalSupply
- Отсутствие проверки на zero address при инициализации admin key
- Хранение чувствительных параметров (rewardRate) без timelock
Мы знаем эти грабли — за плечами более 10 проектов, где подобные баги были обнаружены и исправлены на стадии аудита. Закажите разработку стейкинг-контракта под ключ с гарантией безопасности.
Опыт работы: 5+ лет в DeFi, 10+ staking-контрактов в продакшне, аудит кода от 1500+ часов на проектах. Гарантируем безопасность и прозрачность каждого этапа.







