Інтеграція з CoW Protocol (intent-based trading)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з CoW Protocol (intent-based trading)
Середній
~3-5 днів
Часті запитання

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

Етапи блокчейн-розробки

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

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

Інтеграція з CoW Protocol (intent-based trading)

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

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

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

Структура ордера

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;        // комісія для solver (зазвичай 0 для off-chain ордерів)
  kind: "sell" | "buy";
  partiallyFillable: boolean;
  sellTokenBalance: "erc20" | "external" | "internal";
  buyTokenBalance: "erc20" | "internal";
}

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

Конкуренція solver-нод

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

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

Інтеграція через 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 ордери (для контрактів)

Смарт-контракти не можуть підписувати 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 імовірний (торгівля stablecoin-to-stablecoin)
  • Інтеграцій 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 у фронтенді) — 1-2 дні. On-chain контракт з pre-sign інтеграцією (наприклад, vault, який автоматично створює CoW ордери) — 3-5 днів. Повнофункціональний протокол з моніторингом, retry логікою та fallback на Uniswap при недоступності solver — 1 тиждень. Вартість розраховується після уточнення архітектури.