Интеграция с CoW Protocol (intent-based trading)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с CoW Protocol (intent-based trading)
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1062
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с CoW Protocol (intent-based trading)

CoW Protocol (Coincidence of Wants) решает одну конкретную проблему: MEV-атаки на DEX-трейдеров. На классическом Uniswap ваш swap виден в mempool — sandwich-боты вставляют свои транзакции до и после вашей, извлекая прибыль из вашего slippage. CoW Protocol скрывает транзакции от public mempool до исполнения.

Механика: пользователь подписывает «намерение» (intent) — хочу продать X токенов A, получить минимум Y токенов B, без указания конкретного пути. Solver-сеть берёт пул намерений, ищет совпадения (coincidences of wants) или лучший маршрут через DEX, исполняет batch on-chain. Пользователь не взаимодействует с пулом напрямую.

Как работает 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().

// Polling до исполнения или истечения
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

Подходит для:

  • Крупных свопов, где MEV защита критична ($10K+)
  • Протоколов, исполняющих свопы от имени пользователей (yield aggregators, rebalancers)
  • Ситуаций где coincidence of wants вероятен (стейблкоин-стейблкоин торговля)
  • Gnosis Safe интеграций (CoW хорошо интегрирован с Safe)

Не подходит для:

  • Высокочастотного трейдинга (latency несовместимо)
  • Токенов с низкой ликвидностью (solver может не найти путь)
  • Когда нужно гарантированное немедленное исполнение

Типичные ошибки интеграции

Неправильный appData: appData должен быть keccak256 хэшем JSON документа с метаданными. Если передать произвольный хэш без реального документа — ордер может быть отклонён некоторыми solvers.

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

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

Ориентиры по срокам

Простая интеграция (подписание и отправка ордеров через SDK в frontend) — 1-2 дня. On-chain контракт с pre-sign интеграцией (например, vault, который автоматически создаёт CoW ордера) — 3-5 дней. Полноценный протокол с мониторингом, retry логикой и fallback на Uniswap при недоступности solver — 1 неделя. Стоимость рассчитывается после уточнения архитектуры.