Розробка системи захисту від сендвіч-атак у DeFi

Розробка системи захисту від сендвіч-атак Середній збиток користувача від сендвіч-атаки становить $100–200, а для великих свопів може сягати $10 000. Впровадження захисту дозволяє економити до $20 000 на місяць на втратах від MEV. Ми — команда з 5-річним досвідом у блокчейн-розробці, реалізували

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Розробка системи захисту від сендвіч-атак

Середній збиток користувача від сендвіч-атаки становить $100–200, а для великих свопів може сягати $10 000. Впровадження захисту дозволяє економити до $20 000 на місяць на втратах від MEV. Ми — команда з 5-річним досвідом у блокчейн-розробці, реалізували понад 50 проєктів із захисту DeFi-протоколів. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту.

Сендвіч-атака — форма MEV, за якої атакуючий вбудовується перед і після транзакції користувача в публічному mempool. На Uniswap-подібних AMM це призводить до втрати до 5% суми свопу для звичайного користувача. Ми допомагаємо проєктам усунути цю вразливість на рівні смарт-контрактів та інфраструктури. Якщо ваш проєкт страждає від MEV, отримайте консультацію експерта вже сьогодні.

Як працює сендвіч-атака і чому це проблема?

Для розуміння захисту розберемо механізм атаки. Публічний mempool дозволяє MEV-ботам бачити всі pending транзакції. Бот аналізує параметри свопу (адреса токена, суму, slippage tolerance) та обчислює, скільки потрібно купити перед жертвою і продати після, щоб отримати прибуток. Чим вищий допустимий slippage у користувача, тим ширше вікно для атаки. За даними EigenPhi, великі sandwich-боти на Ethereum заробляли сотні тисяч доларів на тиждень за рахунок звичайних користувачів. Джерело: EigenPhi. За даними Wikipedia, сендвіч-атаки становлять до 30% усіх MEV-транзакцій.

Вразливість лежить у детермінованості price impact: для AMM з формулою x*y=k атакуючий точно розраховує, який обсяг фронтран-свопу дасть максимальний прибуток. Слабкі місця — high slippage та публічність mempool.

Які методи захисту ми застосовуємо?

Ми використовуємо три рівні захисту: на рівні транзакцій, смарт-контрактів та архітектури протоколу. Нижче порівнюємо основні підходи:

Метод Ефективність Складність впровадження UX
Приватний RPC (Flashbots Protect) Знижує ризик на 95% Низька (1–2 тиж.) Без змін
Commit-reveal контракт Блокує 99% атак Середня (2–3 тиж.) Два кроки (важкий UX)
Batch auction (CoW Protocol) Повністю усуває Висока (2–4 міс.) Без змін
Динамічний slippage Знижує на 50–70% Середня (2–3 тиж.) Автоматичний

Commit-reveal схема в 2 рази ефективніша за динамічний slippage при захисті від цілеспрямованих атак з високим slippage.

Приватні RPC та MEV-protection провайдери

Найшвидший захист — надсилати транзакції не в публічний mempool, а напряму блок-білдерам. Flashbots Protect направляє транзакції в Flashbots bundle — атакуючий їх не бачить. MEV Blocker від CoW Protocol конкурентно виконує своп через кількох searcher'ів та повертає частину MEV користувачеві. Bloxroute пропонує захищені канали за плату. Нижче порівняння провайдерів:

Провайдер Тип Вартість Додаткові функції
Flashbots Protect Приватний relay Безкоштовно (газ) Підтримка bundle, сумісність з ethers.js
MEV Blocker (CoW) Аукціон searcher'ів 0% комісії Повернення MEV користувачеві
Bloxroute Захищений канал Платний Низька затримка, приватний потік
// Використання Flashbots Protect через ethers.js const { FlashbotsBundleProvider } = require('@flashbots/ethers-provider-bundle'); const { ethers } = require('ethers'); async function protectedSwap(swapParams, wallet, provider) { // Підключаємося до Flashbots relay const flashbotsProvider = await FlashbotsBundleProvider.create( provider, wallet, 'https://relay.flashbots.net' ); // Збираємо swap транзакцію як звичайно const swapTx = await buildSwapTransaction(swapParams); // Відправляємо через Flashbots const bundleSubmission = await flashbotsProvider.sendPrivateTransaction( { signer: wallet, transaction: swapTx }, { maxBlockNumber: (await provider.getBlockNumber()) + 10 } ); const receipt = await bundleSubmission.wait(); return receipt; } 
Приклад реалізації commit-reveal контракту
contract CommitRevealSwap { mapping(bytes32 => Commitment) public commitments; struct Commitment { address user; uint256 blockNumber; bool revealed; } uint256 public constant MIN_BLOCKS_BEFORE_REVEAL = 1; uint256 public constant MAX_BLOCKS_BEFORE_REVEAL = 10; function commit(bytes32 commitHash) external { commitments[commitHash] = Commitment({ user: msg.sender, blockNumber: block.number, revealed: false }); } function reveal( uint256 amountIn, uint256 amountOutMin, address[] calldata path, bytes32 salt ) external { bytes32 commitHash = keccak256(abi.encodePacked( msg.sender, amountIn, amountOutMin, keccak256(abi.encode(path)), salt )); Commitment storage commitment = commitments[commitHash]; require(commitment.user == msg.sender, "Not your commit"); require(!commitment.revealed, "Already revealed"); require( block.number >= commitment.blockNumber + MIN_BLOCKS_BEFORE_REVEAL, "Too early" ); require( block.number <= commitment.blockNumber + MAX_BLOCKS_BEFORE_REVEAL, "Expired" ); commitment.revealed = true; _executeSwap(amountIn, amountOutMin, path, msg.sender); } } 

Batch Auctions: архітектурне рішення CoW Protocol

CoW Protocol вирішує проблему на рівні архітектури. Заявки збираються за період (кілька блоків), off-chain solver знаходить оптимальне виконання для всього батчу, публікується єдина settlement-транзакція з uniform price. У batch auction немає місця для сендвіча: атакуючий не може вбудуватися між заявкою і виконанням, оскільки вони рознесені в часі.

Звичайний AMM: Block N: frontrun_buy → user_swap → backrun_sell CoW Batch Auction: Block N: submit_order(user1), submit_order(user2), ... Block N+3: solver publishes settlement_tx з uniform price 

Як ми проектуємо систему захисту?

Процес складається з п'яти етапів:

  1. Аналітика — вивчаємо ваш протокол, смарт-контракти, типові транзакції користувачів, поточний рівень MEV-активності.
  2. Проектування — обираємо комбінацію методів захисту під ваші вимоги (безпека, UX, бюджет).
  3. Реалізація — пишемо смарт-контракти (Solidity), інтегруємо приватні RPC, налаштовуємо динамічний slippage.
  4. Тестування — покриваємо unit-тестами та fuzzing (Echidna), проганяємо на тестнеті, симулюємо сендвіч-атаки.
  5. Деплой та моніторинг — розгортаємо на mainnet, підключаємо моніторинг MEV-активності (Tenderly, власні дашборди).

Ми гарантуємо прозорість: кожен етап супроводжується документацією, надаємо доступ до репозиторію та навчання вашої команди.

Що входить у роботу

  • Аудит поточної архітектури та виявлення вразливостей до сендвіч-атак.
  • Розробка та впровадження обраних методів захисту.
  • Вихідний код смарт-контрактів (Solidity) з покриттям тестами.
  • Налаштування приватних RPC (Flashbots, MEV Blocker) — конфігурація та інтеграція.
  • Документація з експлуатації та інструкція для користувачів.
  • Моніторингова система з алертами при сплеску MEV-активності.
  • Технічна підтримка протягом 3 місяців після деплою.

Терміни та вартість

Терміни залежать від складності: інтеграція приватного RPC — від 1 тижня, commit-reveal контракт — від 2 тижнів, повна система з моніторингом — від 4 тижнів. Batch auction протокол — від 2 місяців. Вартість розраховується індивідуально під ваш проєкт — пишіть, ми оцінимо задачу протягом 2 робочих днів.

Моніторинг та детекція атак

Для постійного захисту ми впроваджуємо компонент моніторингу, який відстежує активність MEV-ботів, аналізує втрати користувачів та надсилає алерти при аномальному сплеску сендвічів. Економія від впровадження такої системи може сягати $15 000 на місяць.

async function detectSandwichInBlock(blockNumber, provider, uniswapAddress) { const block = await provider.getBlock(blockNumber, true); const uniswapTxs = block.transactions.filter( tx => tx.to?.toLowerCase() === uniswapAddress.toLowerCase() ); const sandwiches = []; for (let i = 1; i < uniswapTxs.length - 1; i++) { const prev = uniswapTxs[i - 1]; const current = uniswapTxs[i]; const next = uniswapTxs[i + 1]; if (prev.from === next.from && prev.from !== current.from) { const prevDecoded = decodeSwap(prev.data); const nextDecoded = decodeSwap(next.data); if (prevDecoded && nextDecoded && prevDecoded.tokenIn === nextDecoded.tokenOut) { sandwiches.push({ attacker: prev.from, victim: current.from, frontrunTx: prev.hash, victimTx: current.hash, backrunTx: next.hash, estimatedProfit: calculateSandwichProfit(prevDecoded, nextDecoded) }); } } } return sandwiches; } 

Отримайте консультацію експерта із захисту DeFi вже сьогодні. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту.