Интеграция с CoW Protocol для защиты от MEV

Размещаете ордер на Uniswap на 100 000 USDC? В 90% случаев sandwich-боты украдут часть 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
    1009

Размещаете ордер на Uniswap на 100 000 USDC? В 90% случаев sandwich-боты украдут часть 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-инженера — оценим проект и предложим решение под вашу задачу.