Розробка снайпер-бота для запуску токенів
У перші секунди після додавання ліквідності в пул Uniswap v2/v3 або PancakeSwap різниця між входом на блоці N та блоці N+3 може означати 5x проти 1.2x. Sniper bot — це інфраструктура для гарантованого раннього входу: моніторинг мемпулу, детекція подієї листингу та відправлення транзакції з правильним gas price протягом мілісекунд.
Де теряються гроші без правильного бота
Наївний підхід — слухати подію PairCreated від Uniswap factory та відправляти swap. Проблема: до моменту, коли подія попала в блок та ти її прочитав, пройшло вже 2-5 секунд. Конкуренти читають мемпул безпосередньо та бачать addLiquidity транзакцію ще до включення в блок.
Другий поширений провал — податкові токени (tax tokens). Контракт з _transfer override, який утримує 10-30% при покупці, невидимий через стандартний ABI. Бот купує, а насправді отримує на 25% менше. Honeypot-токени взагалі блокують продаж — sell завжди реверсується.
Як працює правильний sniper
Мониторинг мемпулу
Прямий підключення до ноди через WebSocket (eth_subscribe("newPendingTransactions")) дає pending транзакції до включення в блок. Для EVM-сетей достатньо своєї ноди або приватного RPC (Chainstack, Alchemy з доступом до мемпулу).
На 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 захист: лімit газу — чітко під операцію, не безліміт. Honeypot-контракти з бесконечним loop у _transfer спалюють весь gas limit без антиgrief.
Стек та архітектура
- TypeScript + viem — core логіка бота
- ethers.js — fallback для деяких provider quirks
- WebSocket до приватної ноди — мемпул підписка
- Redis — кеш вже-бачених транзакцій, anti-double-buy
- PostgreSQL — лог всіх операцій, P&L
Конфігурація через .env: RPC endpoint, приватний ключ у HSM або KMS (не plaintext), параметри ризику (max buy amount, max tax tolerance, stop-loss).
Часові орієнтири
Базовий sniper для однієї DEX та однієї сети — 3-5 днів. Мульти-chain версія з детектором honeypot та tax-симулятором — 1-2 тижні. Вартість розраховується індивідуально.







