Размещаете ордер на 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 — идентификатор сети. Это защищает ордера от повторного использования на других цепочках.Процесс работы
- Аналитика: определяем требования к свопам, объёмы, частоту.
- Проектирование: выбираем стек (viem, cow-sdk), проектируем flow.
- Реализация: пишем код подписания, отправки, мониторинга.
- Тестирование: на Sepolia проверяем quote, send, cancellation.
- Деплой: запуск на mainnet, включение мониторинга.
Получите консультацию нашего Web3-инженера — оценим проект и предложим решение под вашу задачу.







