Торговый бот в сети эфира
1) Цель
Арбитражно‑реактивный бот, который:
Отслеживает цену заданных токенов по блокам.
Если в текущем блоке цена падает > X% (по умолчанию 10%, настраивается), отправляет bundle на покупку через Titan Builder.
Параллельно мониторит публичный мемпул и при детекте крупной продажи по токену — формирует backrun‑bundle (наша покупка сразу после продажи в этом же блоке).
либо в следующий блок , если транзакции не было видно в публичном мемпуле соответственно.
2) Скоуп
2.1 Источник цены / детектор падения
Поддержка Uniswap v2 и v3 (основная пара: Token/WETH).
Цена берётся из ончейн‑состояния пула:
v2: reserve0/reserve1 (on-chain call на последний собранный блок).
v3: slot0.sqrtPriceX96 → конвертация в цену.
Метрика падения: сравнение цены «предыдущий блок → текущий блок». Порог падения X% (дефолт 10%), конфигурируется.
Анти-шум: минимальный объём пула / ликвидности, игнор мелких скачков (параметры в конфиге).
2.2 Отслеживание публичного мемпула
Подписка на mempool по целевым пулам/роутерам (Uniswap v2/v3).
Дефолтный триггер «крупной продажи»: либо минимальный notional (например, ≥ 10k USD экв.), либо ≥ Y% от текущей ликвидности пула — задаётся вручную.
При детекте продажи для нашего токена: собираем backrun‑bundle: [их sell] → [наш buy].
2.3 Управление списком токенов
Вы задаёте список токенов + адрес пула(ов). В конфиге по каждому:
адрес токена,
адрес(а) пула,
тип пула (v2/v3, fee для v3),
индивидуальные параметры: порог падения, min ликвидность, slippage профиль и т.д.
2.4 Размер входа и tip билдеру
Размер входа ручной диапазон на токен: 0.06…0.2 ETH. Логика:
в конфиге задаём интервалы «просадка → размер входа» (step‑функция или линейная зависимость).
бот читает текущую просадку и выбирает размер из разрешённого диапазона.
Вознаграждение билдеру (bundle bribe):
ручной диапазон 0.0012…0.0045 ETH.
расчёт: либо фикс по «корзинам» просадки, либо линейка: tip = a + b * drawdown% (коэффициенты в конфиге).
опция автоподнятия tip при N неудачных включениях подряд.
2.5 Отправка bundle через смарт‑контракт
Процесс:
1. Средства (WETH/ETH) лежат на контракте‑контроллере.
2. Контракт имеет метод «исполнить покупку» (вызов роутера Uniswap + проверка minOut и deadline).
3. Транзакция с вызовом отправляется только внутри bundle (через Titan).
4. Если билдер не включает bundle — ничего не списывается (tx не майнится, средства остаются на контракте).
5. Если bundle включён, но ценовые условия не выполняются — require/revert откатывает, средства не уходят.
Контрактные фичи:
Whitelist «исполнителя» (бота) — чтобы никто посторонний не мог дёргать метод.
Пауза/разблок (Pausable).
События логирования.
2.6 DEX‑роутинг
Uniswap v2: прямой swap по паре Token/WETH (или через WETH при нужде).
Uniswap v3: используем единичный пул с фиксированной fee (из конфига) или Quoter для расчёта amountOut и minOut.
Опция мульти‑хопов (WETH→…→Token) — вне MVP, можно добавить по желанию.
2.7 Проскальзывание (slippage)
Предлагаю 3 варианта, можно иметь все и выбирать в конфиге:
A. Фиксированное:
На токен задаём жёсткий slippage_bps (например, 50–200 bps).
Простое и предсказуемое. Для backrun‑bundle можно ставить чуть шире (потому что наш buy идёт сразу после большого sell).
B. Динамическое от просадки:
slippage = clamp( base + k * drawdown%, min_slip, max_slip ).
Идея: чем сильнее просадка, тем шире окна, чтобы не упустить включение.
C. Рыночное (по ликвидности):
Считываем виртуальный price impact от ожидаемого amountIn по кривой пула и добавляем safety‑надбавку (например, +20% от рассчитанного импакта).
Самое «умное», но потребует on‑the‑fly Quoter/симуляцию (в бандле это ок).
Технически в контракте это просто minOut, который мы заранее вычисляем и передаём из бота:
minOut = quotedAmountOut * (1 - slippage)
deadline = block.timestamp + 90 (или block.number window, если делаем строго текущий блок)
Рекомендация на старт: B для обычных падений, A (узкое, 50–100 bps) для backrun, потому что порядок фиксирован: сначала их sell, тут же наш buy.
2.8 Безопасность и защитные проверки
Чёрный список токенов с налогом/антиботом (при желании — скан простых «honeypot» признаков перед добавлением).
Минимальная ликвидность пула.
Лимит газ/priorityFee и лимит на количество подряд неуспешных бандлов.
Хранение ключей: .env/vault, отдельный деплойер для контракта, ролевой доступ.
2.9 Логи, мониторинг, симуляции
Логи в файл + Telegram‑уведомления (опционально).
Тесты на форке (anvil/hardhat) + Tenderly симуляции бандлов.
Дашборд (CLI или простая веб‑страница) с текущими параметрами и состоянием баланса контракта.
2.10 Технологии
Язык бота: Python (web3.py) и TypeScript.
Контракты: Solidity (Foundry/Hardhat).
Интеграция: Titan Builder API/SDK (приватные бандлы, backrun).
3) Что от вас нужно
Список токенов и пулов (адреса).
Ваши стартовые диапазоны:
размер входа per token,
tip билдеру per token,
пороги падения и «крупной продажи».
Выбор стратегии slippage (A/B/C) и стартовые значения.
RPC/infra (можем поднять сами, но лучше выделенный эндпоинт с низкой задержкой).
4) Доставляемое
Репозиторий с кодом бота и смарт‑контрактом.
Скрипты деплоя, примеры конфигов.
Инструкция по запуску.
Набор автотестов и сценариев симуляций (fork/Tenderly).
Базовая телеметрия/логи.
5) Оценка стоимости
Два пакета — чтобы было прозрачно.
MVP (один DEX‑роут, v2 простая стратегия slippage A/B; список токенов; backrun по одному пула на токен; базовые логи, без веб‑дашборда):
$2500
Обычные падения (detector): стратегия B, например
slip_bps = clamp(60 + 25 * drawdown%, 50, 250)
Пример: при падении 12% → ~360 bps → срабатывает ограничение 250 bps (2.5%).
Backrun после крупной продажи: стратегия A — узкое окно 50–100 bps, потому что мы в том же блоке сразу за продажей и знаем порядок включения; достаточно зафиксировать minOut от Quoter/резервов.
Поддержка: баг‑фиксы 2 недели включены. Дальше — $300/мес (опционально).
(Инфраструктура — RPC/Tenderly/Builder‑аккаунты/алёртинги — оплачиваются отдельно по их тарифам.).