Contract Addresses
All CoW Protocol smart contract addresses deployed across supported networks.
Core Contracts
All core contracts are deployed at identical addresses across all supported networks using CREATE2 deterministic deployment.
GPv2Settlement:
GPv2VaultRelayer:
GPv2AllowListAuthentication (Proxy):
The GPv2AllowListAuthentication implementation is at 0x9E7Ae8Bdba9AA346739792d219a808884996Db67.
Supported Networks
CoW Protocol is deployed on the following networks:
| Network | Chain ID | Type |
|---|
| Ethereum | 1 | Mainnet |
| Gnosis Chain | 100 | Mainnet |
| Arbitrum One | 42161 | Layer 2 |
| Base | 8453 | Layer 2 |
| Polygon | 137 | Sidechain |
| Avalanche C-Chain | 43114 | Sidechain |
| BNB Smart Chain | 56 | Sidechain |
| Optimism | 10 | Layer 2 (bridge-only) |
| Linea | 59144 | Layer 2 |
| Plasma | 9745 | Layer 2 |
| Ink | 57073 | Layer 2 |
| Sepolia | 11155111 | Testnet |
Deprecated Networks
| Network | Status |
|---|
| Rinkeby | Deprecated - not recommended for new integrations |
| Goerli | Deprecated - not recommended for new integrations |
Integration Example
import { domain } from "@cowprotocol/contracts";
// Ethereum Mainnet
const mainnetDomain = domain(1, "0x9008D19f58AAbD9eD0D60971565AA8510560ab41");
// Gnosis Chain
const gnosisDomain = domain(100, "0x9008D19f58AAbD9eD0D60971565AA8510560ab41");
// Arbitrum One
const arbitrumDomain = domain(42161, "0x9008D19f58AAbD9eD0D60971565AA8510560ab41");
Best Practices
- Store addresses in configuration files rather than hardcoding them
- Use environment variables for different networks
- Validate addresses before executing transactions
- Always verify contract addresses through official channels before integrating
Last modified on March 18, 2026