Інтеграція з CoW Protocol для захисту від MEV

Розміщуєте ордер на Uniswap на 100 000 USDC? У 90% випадків сандвіч-боти вкрадуть частину slippage. CoW Protocol (Coincidence of Wants) вирішує цю проблему кардинально: ваші транзакції не видимі в public mempool до batch-виконання. Ми — Web3-інженери з 5+ років у DeFi, що реалізували 30+ подібних ін

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

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

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

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

Розміщуєте ордер на Uniswap на 100 000 USDC? У 90% випадків сандвіч-боти вкрадуть частину slippage. CoW Protocol (Coincidence of Wants) вирішує цю проблему кардинально: ваші транзакції не видимі в public mempool до batch-виконання. Ми — Web3-інженери з 5+ років у DeFi, що реалізували 30+ подібних інтеграцій. Економія на газі досягає 80%, а slippage знижується в 3–5 разів.

Механіка: користувач підписує «намір» (intent) — хочу продати X токенів A, отримати мінімум Y токенів B, без вказівки конкретного шляху. Solver-мережа бере пул намірів, шукає збіги (coincidences of wants) або найкращий маршрут через DEX, виконує batch on-chain. Користувач не взаємодіє з пулом напряму. CoW Protocol technical documentation підтверджує, що batch settlement ефективно усуває frontrunning.

Як працює intent-based архітектура

Order structure

Intent у CoW Protocol — це EIP-712 підписана структура:

interface Order { sellToken: Address; buyToken: Address; receiver: Address; sellAmount: bigint; buyAmount: bigint; // мінімум, який готовий прийняти validTo: number; // unix timestamp закінчення appData: Hex; // довільні метадані (IPFS hash) feeAmount: bigint; // fee для solver (зазвичай 0 при off-chain orders) kind: "sell" | "buy"; partiallyFillable: boolean; sellTokenBalance: "erc20" | "external" | "internal"; buyTokenBalance: "erc20" | "internal"; } 

Ордер підписується приватним ключем користувача (EIP-712 signTypedData). Жодного on-chain газу на момент підписання.

Solver competition

Кілька solver-нод конкурують за право виконати batch ордерів. Solver, який пропонує найкращий outcome для користувачів (більший buyAmount або менший sellAmount) — перемагає. Це створює конкуренцію на користь трейдера, а не проти нього.

CoW swap — це не просто захист від MEV. Якщо solver знаходить coincidence of wants (користувач A хоче продати ETH за USDC, користувач B хоче продати USDC за ETH) — обидва отримують виконання без on-chain swap взагалі. Zero slippage, zero AMM fees. Тільки settlement gas.

Інтеграція через CoW SDK

Встановлення та підключення

npm install @cowprotocol/cow-sdk viem 
import { OrderBookApi, OrderSigningUtils, SupportedChainId } from "@cowprotocol/cow-sdk"; import { createWalletClient, http } from "viem"; import { mainnet } from "viem/chains"; const orderBookApi = new OrderBookApi({ chainId: SupportedChainId.MAINNET }); 

CoW Protocol працює на Ethereum mainnet, Gnosis Chain, Arbitrum One та Sepolia testnet.

Створення та відправка ордера

// 1. Отримати fee quote const quoteRequest = { sellToken: WETH_ADDRESS, buyToken: USDC_ADDRESS, from: walletAddress, receiver: walletAddress, sellAmountBeforeFee: parseEther("1").toString(), kind: OrderKind.SELL }; const { quote } = await orderBookApi.getQuote(quoteRequest); // 2. Підписати ордер const orderToSign = { ...quote, receiver: walletAddress, }; const signedOrder = await OrderSigningUtils.signOrder( orderToSign, SupportedChainId.MAINNET, walletClient ); // 3. Відправити в orderbook const orderId = await orderBookApi.sendOrder({ ...orderToSign, ...signedOrder, from: walletAddress }); 

Моніторинг виконання

Після відправки ордер знаходиться в одному зі станів: open, filled, cancelled, expired. Polling через getOrder(orderId) або WebSocket через orderBookApi.subscribe().

const pollOrder = async (orderId: string) => { const order = await orderBookApi.getOrder(orderId); if (order.status === "fulfilled") { console.log(`Executed at: ${order.executedSellAmount} → ${order.executedBuyAmount}`); } return order.status; }; 

Важно: validTo timestamp — це закінчення ордера. Після нього ордер автоматично позначається expired. Встановлюйте розумний час (20-60 хвилин для звичайних ордерів, кілька хвилин для термінових).

Pre-sign orders (для контрактів)

Смарт-контракти не можуть підписувати EIP-712 повідомлення. Для on-chain інтеграції використовуємо pre-sign механізм: контракт викликає setPreSignature(orderId, true) на GPv2Settlement — це дозволяє solver включити цей ордер в settlement.

interface IGPv2Settlement { function setPreSignature(bytes calldata orderUid, bool signed) external; } function createOrder(bytes calldata orderUid) external { settlement.setPreSignature(orderUid, true); } 

Коли варто використовувати CoW Protocol?

CoW Protocol ідеально підходить для великих свопів ($10K+), де MEV захист критичний. Протоколи, що виконують свопи від імені користувачів (yield aggregators, rebalancers), також виграють від batch-виконання. Особливо корисний захист при торгівлі стейблкоїнами, де coincidence of wants ймовірний. Gnosis Safe має вбудовану підтримку CoW.

Однак HFT-трейдерам CoW не підходить через latency. Токени з низькою ліквідністю можуть залишитися без solver-ів. Якщо потрібне гарантоване негайне виконання, краще використовувати прямий DEX swap.

Які типові помилки виникають при інтеграції?

Неправильний appData: appData повинен бути keccak256 хешем JSON документа з метаданими. Якщо передати довільний хеш без реального документа — ордер може бути відхилений.

fee amount: для off-chain ордерів feeAmount зазвичай береться з quote. Не встановлюйте 0 вручну — це може призвести до відхилення.

Allowance: перед створенням ордера користувач повинен видати allowance CoW vault relayer (0xC92E8bdf79f0507f65a392b0ab4667716BFE0110 на mainnet), не самому settlement контракту.

Порівняння CoW Protocol з іншими DEX

Критерій CoW Protocol Uniswap 1inch
MEV захист Так (batch + private mempool) Ні Частково (private RPC)
Складність інтеграції Середня (SDK + EIP-712) Низька Середня
Slippage Мінімальний (coincidence) Залежить від пулу Середній
Gas cost Низький (batch) Середній Середній

Орієнтири за термінами та вартістю

Тип інтеграції Термін
Проста (фронтенд + SDK) 1–2 дні
On-chain контракт з pre-sign 3–5 днів
Повноцінний протокол з retry та fallback до 1 тижня

Вартість розраховується індивідуально під архітектуру. Замовте попередню оцінку — за 1 день підготуємо архітектуру та кошторис.

Деталі EIP-712 Підпис ордера використовує доменну сепарацію EIP-712: verifyingContract — адреса GPv2Settlement, chainId — ідентифікатор мережі. Це захищає ордери від повторного використання на інших ланцюжках.

Процес роботи

  1. Аналітика: визначаємо вимоги до свопів, обсяги, частоту.
  2. Проектування: вибираємо стек (viem, cow-sdk), проектуємо flow.
  3. Реалізація: пишемо код підписання, відправки, моніторингу.
  4. Тестування: на Sepolia перевіряємо quote, send, cancellation.
  5. Деплой: запуск на mainnet, включення моніторингу.

Отримайте консультацію нашого Web3-інженера — оцінимо проект і запропонуємо рішення під вашу задачу.