Разработка снайпер-бота для запуска токенов
В первые секунды после добавления ликвидности в пул Uniswap v2/v3 или PancakeSwap разница между входом на блоке N и блоке N+3 может означать 5x vs 1.2x. Sniper bot — это инфраструктура для гарантированно раннего входа: мониторинг мемпула, детекция события листинга и отправка транзакции с правильным gas price в течение миллисекунд.
Где теряются деньги без правильного бота
Наивный подход — слушать событие PairCreated от Uniswap factory и отправлять swap. Проблема: к моменту, когда событие попало в блок и ты его прочитал, прошло уже 2-5 секунд. Конкуренты читают мемпул напрямую и видят addLiquidity транзакцию ещё до включения в блок.
Второй распространённый провал — налоговые токены (tax tokens). Контракт с _transfer override, который удерживает 10-30% при покупке, не виден через стандартный ABI. Бот покупает, а реально получает на 25% меньше. Honeypot-токены вообще блокируют продажу — sell всегда ревертится.
Как работает правильный sniper
Mempool мониторинг
Подключение напрямую к ноде через WebSocket (eth_subscribe("newPendingTransactions")) даёт pending транзакции до включения в блок. Для EVM-сетей достаточно своей ноды или приватного RPC (Chainstack, Alchemy с mempool доступом).
На Solana — subscribe на logsSubscribe с фильтром по program ID Raydium или Orca. Latency критична: нода должна быть географически близко к валидаторам.
Симуляция перед покупкой
До отправки реальной транзакции — симуляция через eth_call или tenderly_simulateTransaction. Проверяем:
- Реальное количество токенов после transfer (детектим tax)
- Возможность продажи (ревертится ли sell)
- Наличие blacklist/whitelist функций в контракте
async function simulateBuy(tokenAddress: string, amountIn: bigint): Promise<SimResult> {
const balanceBefore = await getTokenBalance(tokenAddress, botAddress);
// Simulate swap
await provider.send('eth_call', [{
from: botAddress,
to: ROUTER_ADDRESS,
data: encodeSwapExact(WETH, tokenAddress, amountIn)
}, 'pending']);
const balanceAfter = await getTokenBalance(tokenAddress, botAddress);
const received = balanceAfter - balanceBefore;
const taxRate = 1 - Number(received) / Number(expectedOutput);
return { received, taxRate, isSafe: taxRate < 0.05 };
}
Gas стратегия
Для EIP-1559 сетей (Ethereum, Polygon): maxPriorityFeePerGas выставляем в 2-3x от текущего baseFee + aggressiveTip. Для BSC (legacy gas): мониторим текущий gasPrice конкурентов в мемпуле и выставляем на 10-20% выше.
Антиgrief защита: лимит gas — чётко под операцию, не безлимитный. Honeypot-контракты с бесконечным loop в _transfer сожгут весь gas limit без антиgrief.
Стек и архитектура
- TypeScript + viem — core логика бота
- ethers.js — fallback для некоторых provider quirks
- WebSocket к приватной ноде — mempool подписка
- Redis — кэш already-seen транзакций, anti-double-buy
- PostgreSQL — лог всех операций, P&L
Конфигурация через .env: RPC endpoint, private key в HSM или KMS (не в plaintext), параметры риска (max buy amount, max tax tolerance, stop-loss).
Ориентиры по срокам
Базовый sniper для одной DEX и одной сети — 3-5 дней. Мульти-chain версия с детектором honeypot и tax-симулятором — 1-2 недели. Стоимость рассчитывается индивидуально.







