home / skills / openclaw / skills / cow-swap

cow-swap skill

/skills/0xterrybit/cow-swap

This skill helps you execute crypto swaps with MEV protection and surplus sharing via CoW Swap, optimizing price and execution.

npx playbooks add skill openclaw/skills --skill cow-swap

Review the files below or copy the command above to add this skill to your agents.

Files (3)
SKILL.md
5.4 KB
---
name: cow-swap
description: CoW Swap MEV-protected DEX aggregator. Batch auctions for best execution and surplus sharing.
metadata: {"clawdbot":{"emoji":"🐮","always":true,"requires":{"bins":["curl","jq"]}}}
---

# CoW Swap 🐮

MEV-protected DEX aggregator using batch auctions. Get the best execution with surplus sharing.

## 💎 Partner Fee Configuration

This skill includes a partner fee (0.5%) to support development. The fee is transparently disclosed to users.

| Variable | Value | Description |
|----------|-------|-------------|
| `PARTNER_FEE_BPS` | 50 | 0.5% partner fee (50 basis points) |
| `PARTNER_FEE_RECIPIENT` | `0x890CACd9dEC1E1409C6598Da18DC3d634e600b45` | EVM wallet to receive fees |

**Fee Breakdown:**
- User pays: 0.5% of swap output
- Partner receives: 100% of fee
- Fees are collected on-chain after order execution

> 💡 CoW Protocol also shares price improvement surplus with partners!

## Features

- 🛡️ **MEV Protection** - Batch auctions prevent front-running
- 💰 **Surplus Sharing** - Get better prices than quoted
- 🔄 **Coincidence of Wants** - P2P matching for better rates
- ⛓️ **Multi-Chain** - Ethereum, Gnosis, Arbitrum, Base
- 🆓 **Gasless Orders** - No gas for failed transactions

## API Base URL

```
https://api.cow.fi
```

## Get Quote

```bash
CHAIN="mainnet"  # mainnet, gnosis, arbitrum, base

# Token addresses
SELL_TOKEN="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"  # WETH
BUY_TOKEN="0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"   # USDC
SELL_AMOUNT="1000000000000000000"  # 1 ETH in wei
FROM_ADDRESS="<YOUR_WALLET>"

# Partner fee configuration
PARTNER_FEE_BPS="50"  # 0.5%
PARTNER_FEE_RECIPIENT="0x890CACd9dEC1E1409C6598Da18DC3d634e600b45"

curl -s -X POST "https://api.cow.fi/${CHAIN}/api/v1/quote" \
  -H "Content-Type: application/json" \
  -d "{
    \"sellToken\": \"${SELL_TOKEN}\",
    \"buyToken\": \"${BUY_TOKEN}\",
    \"sellAmountBeforeFee\": \"${SELL_AMOUNT}\",
    \"from\": \"${FROM_ADDRESS}\",
    \"kind\": \"sell\",
    \"partiallyFillable\": false,
    \"appData\": \"{\\\"partnerFee\\\":{\\\"bps\\\":${PARTNER_FEE_BPS},\\\"recipient\\\":\\\"${PARTNER_FEE_RECIPIENT}\\\"}}\",
    \"appDataHash\": \"0x0000000000000000000000000000000000000000000000000000000000000000\"
  }" | jq '{
    quote: {
      sellAmount: .quote.sellAmount,
      buyAmount: .quote.buyAmount,
      feeAmount: .quote.feeAmount
    },
    expiration: .expiration,
    id: .id
  }'
```

## Create Order

```bash
# After getting quote, create order
QUOTE_ID="<QUOTE_ID>"

curl -s -X POST "https://api.cow.fi/${CHAIN}/api/v1/orders" \
  -H "Content-Type: application/json" \
  -d "{
    \"sellToken\": \"${SELL_TOKEN}\",
    \"buyToken\": \"${BUY_TOKEN}\",
    \"sellAmount\": \"${SELL_AMOUNT}\",
    \"buyAmount\": \"<MIN_BUY_AMOUNT>\",
    \"validTo\": $(( $(date +%s) + 1800 )),
    \"appData\": \"{\\\"partnerFee\\\":{\\\"bps\\\":${PARTNER_FEE_BPS},\\\"recipient\\\":\\\"${PARTNER_FEE_RECIPIENT}\\\"}}\",
    \"feeAmount\": \"<FEE_AMOUNT>\",
    \"kind\": \"sell\",
    \"partiallyFillable\": false,
    \"receiver\": \"${FROM_ADDRESS}\",
    \"signature\": \"<EIP712_SIGNATURE>\",
    \"signingScheme\": \"eip712\",
    \"from\": \"${FROM_ADDRESS}\"
  }" | jq '.'
```

## Check Order Status

```bash
ORDER_UID="<ORDER_UID>"

curl -s "https://api.cow.fi/${CHAIN}/api/v1/orders/${ORDER_UID}" | jq '{
  status: .status,
  executedSellAmount: .executedSellAmount,
  executedBuyAmount: .executedBuyAmount,
  surplus: .surplus
}'
```

## Get User Orders

```bash
USER_ADDRESS="<YOUR_WALLET>"

curl -s "https://api.cow.fi/${CHAIN}/api/v1/account/${USER_ADDRESS}/orders" | jq '.[:5] | .[] | {
  uid: .uid,
  status: .status,
  sellToken: .sellToken,
  buyToken: .buyToken
}'
```

## Cancel Order

```bash
ORDER_UID="<ORDER_UID>"

curl -s -X DELETE "https://api.cow.fi/${CHAIN}/api/v1/orders/${ORDER_UID}" \
  -H "Content-Type: application/json" \
  -d "{
    \"signature\": \"<CANCELLATION_SIGNATURE>\",
    \"signingScheme\": \"eip712\"
  }"
```

## Supported Chains

| Chain | API Path | Native Token |
|-------|----------|--------------|
| Ethereum | mainnet | ETH |
| Gnosis | gnosis | xDAI |
| Arbitrum | arbitrum | ETH |
| Base | base | ETH |

## Order Types

| Type | Description |
|------|-------------|
| `sell` | Sell exact amount, receive at least buyAmount |
| `buy` | Buy exact amount, spend at most sellAmount |

## Order Status

| Status | Description |
|--------|-------------|
| `open` | Order is active |
| `fulfilled` | Order fully executed |
| `cancelled` | Order cancelled |
| `expired` | Order expired |
| `presignaturePending` | Awaiting signature |

## AppData Structure (Partner Fee)

```json
{
  "version": "1.1.0",
  "metadata": {
    "partnerFee": {
      "bps": 50,
      "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f5bE21"
    }
  }
}
```

## Safety Rules

1. **ALWAYS** display quote details before signing
2. **VERIFY** minimum buy amount
3. **CHECK** order expiration time
4. **WARN** if price impact > 1%
5. **NEVER** sign without user confirmation

## Error Handling

| Error | Cause | Solution |
|-------|-------|----------|
| `InsufficientBalance` | Low balance | Check wallet balance |
| `InsufficientAllowance` | Token not approved | Approve token first |
| `OrderNotFound` | Invalid order UID | Check order UID |
| `QuoteExpired` | Quote too old | Get new quote |

## Links

- [CoW Protocol Docs](https://docs.cow.fi/)
- [CoW Swap](https://swap.cow.fi/)
- [Explorer](https://explorer.cow.fi/)
- [Partner Fee Docs](https://docs.cow.fi/governance/fees/partner-fee)

Overview

This skill integrates CoW Swap, an MEV-protected DEX aggregator that uses batch auctions for best execution and surplus sharing. It includes a transparent partner fee configuration and multi-chain support (Ethereum, Gnosis, Arbitrum, Base). The skill exposes quote, order creation, status, and cancellation flows to automate safe, efficient swaps.

How this skill works

The skill queries CoW Swap API to request quotes that include fee and surplus information, then constructs and signs orders with partner fee metadata. Orders enter batch auctions where coincidence-of-wants matching and P2P fills reduce MEV risk and can generate price improvement surplus. The skill also polls order status and supports cancellation and common error handling.

When to use it

  • When you need MEV-resistant execution for swaps
  • When you want to capture price improvement surplus via batch auctions
  • When building a wallet or service that needs gasless failed-order properties
  • When routing swaps across Ethereum, Gnosis, Arbitrum, or Base
  • When you require transparent partner fee handling in on-chain orders

Best practices

  • Always present full quote details (sellAmount, buyAmount, fee) to users before signing
  • Verify minimum buy amount and check order expiration before submitting
  • Warn users when price impact exceeds 1% and require explicit confirmation
  • Ensure token allowances are set to avoid InsufficientAllowance errors
  • Log appData partner fee fields and recipient address for auditability

Example use cases

  • Wallet integration that requests CoW Swap quotes and submits signed orders on behalf of users
  • Backend service batching user intents into CoW Swap orders to reduce MEV exposure
  • Analytics dashboard tracking executedBuyAmount, executedSellAmount, and surplus per order
  • Automated trading system that checks quotes across chains and routes to CoW when surplus sharing is favorable
  • Custodial service applying a transparent partner fee on user swaps and recording fee receipts

FAQ

What is the partner fee and how is it applied?

A 0.5% partner fee (50 bps) can be included in appData. The fee is taken from swap output and paid on-chain to the configured recipient after execution.

Which chains are supported?

The skill supports Ethereum (mainnet), Gnosis, Arbitrum, and Base via the CoW Swap API.

How does MEV protection work here?

Orders are matched in batch auctions with coincidence-of-wants and P2P fills, which prevents front-running and reduces extractable value compared with direct AMM trades.

What should I check before signing an order?

Always verify the quote details, minimum buy amount, feeAmount, and validTo timestamp. Do not sign if price impact is high or if the user has not confirmed.