Разработка бота для автоматического фарминга
Держать деньги в одном yield-протоколе и вручную переносить их при изменении ставок — значит постоянно проигрывать тому, у кого есть автоматизация. APY на Aave, Compound, Curve, Convex, Yearn меняются каждый блок. Ручной мониторинг даёт реакцию в часах. Бот — в минутах или секундах.
Задача не в том, чтобы «написать скрипт, который перекладывает деньги». Задача — построить систему, где стоимость ротации (gas) не съедает выигрыш от смены протокола, а сама логика переключения не ломается при изменении интерфейсов протоколов.
Где теряются деньги при плохой реализации
Слепая погоня за APY без учёта газа
Самая частая ошибка: бот видит разницу в 2% APY между Aave и Compound и делает ротацию. На mainnet Ethereum транзакция вывода + одобрение + депозит обходится в $20-50 на газе. На позиции в $1000 это 2-5% тела — и ротация становится убыточной.
Правило: переносить только если (APY_new - APY_current) * position_size * time_horizon > gas_cost * safety_factor. time_horizon — предполагаемое время нахождения в новом протоколе, safety_factor — 2-3x для учёта неопределённости. На L2 (Arbitrum, Optimism) порог значительно ниже из-за дешёвого газа.
Несинхронизированные данные о доходности
APY в DeFi — это не фиксированная ставка. Это проекция текущего состояния пула на год. Compound supplyRatePerBlock считается из utilization rate прямо сейчас. Aave добавляет reward tokens (AAVE staking), которые нужно клеймить и учитывать отдельно. Convex показывает boosted APY, который зависит от veCRV баланса вашего vault.
Бот, который сравнивает «APY» из разных источников без нормализации, принимает решения на основе несопоставимых чисел. Нужна единая методология: base yield (из протокола) + reward yield (из emission, нормализованный к USD) + compound effect (реинвестирование), всё приведённое к реальному 7-дневному скользящему среднему.
Архитектура бота
Слои системы
Data layer: агрегация данных с протоколов. Для каждого протокола — отдельный адаптер. Aave V3 через IPool.getReserveData(), Compound V3 через CometSupply events + getSupplyRate(), Curve через get_virtual_price() и Convex rewardRate. Данные пишем в Redis с TTL 60 секунд, чтобы не дёргать RPC на каждый расчёт.
Strategy engine: логика принятия решений. Оценивает текущую позицию, все кандидаты на ротацию, считает net APY с учётом газа, принимает решение. Здесь же — риск-фильтры: не входить в протоколы, которые не прошли аудит, не держать более X% в одном протоколе, исключить пулы с TVL ниже порога (риск ликвидности при выводе).
Execution layer: сборка и отправка транзакций. Используем viem для построения транзакций — он даёт типизированные контракты через ABI и правильную оценку газа. Для batching: Multicall3 позволяет approve + deposit в одной транзакции, что снижает газ на 30-40%.
Monitoring: Telegram-уведомления о каждой ротации (сколько вложили, куда, ожидаемый APY), алерты при ошибках транзакций, дашборд с историей позиций через The Graph или собственный индексер.
On-chain vs off-chain логика
Два подхода:
Off-chain keeper (проще, дешевле): бот работает на сервере, держит приватный ключ (или подключается к Gnosis Safe через Safe Transaction Service API), отправляет транзакции напрямую. Минус — зависимость от аптайма сервера и доверие к серверу.
On-chain vault с keeper (сложнее, безопаснее): смарт-контракт-vault хранит средства, keeper (bot) только вызывает rebalance(). Стратегия закодирована в контракте — пользователи могут верифицировать логику. Приватный ключ keeper-бота может только вызывать rebalance(), не выводить средства. Это стандарт для Yearn-style vault.
Для личного бота с небольшой суммой — off-chain keeper достаточно. Для протокола с чужими средствами — только on-chain vault с аудитом.
Работа с несколькими сетями
| Сеть | Особенности | Основные протоколы |
|---|---|---|
| Ethereum mainnet | Высокий газ, высокий TVL | Aave V3, Compound V3, Curve, Convex |
| Arbitrum | Дешёвый газ, богатый DeFi | Aave V3, GMX, Radiant, Camelot |
| Optimism | Дешёвый газ, Velodrome | Aave V3, Velodrome, Extra Finance |
| Base | Новая, растущий TVL | Aave V3, Aerodrome, Moonwell |
Мультичейн-бот работает с несколькими RPC через ethers.js/viem провайдеры. Bridge ликвидности между сетями — отдельная задача с отдельными рисками (bridge эксплойты), обычно не включаем в автоматику без ручного подтверждения.
Стек
TypeScript + viem для on-chain взаимодействий. Node.js для keeper-процесса. Redis для кэширования данных. PostgreSQL для истории ротаций и аналитики. Docker для деплоя. PM2 или systemd для мониторинга процесса.
Hardhat/Foundry для on-chain vault контрактов, если выбираем этот путь. Тесты на fork mainnet через Foundry vm.createFork — прогоняем сценарии ротации на реальном состоянии сети.
Ориентиры по срокам
Off-chain keeper бот для 2-3 протоколов на одной сети — 3-5 дней. С нормализацией APY, учётом газа и Telegram мониторингом — ближе к 1 неделе. On-chain Yearn-style vault с отдельными стратегиями — 2-4 недели включая тесты. Стоимость рассчитывается после уточнения протоколов и сетей.







