Skip to main content
This page provides a comprehensive reference of all CoW Protocol smart contract addresses across supported networks.

Core Protocol Contracts

GPv2Settlement

The main settlement contract that executes trades and manages order fulfillment.
const SETTLEMENT_ADDRESS = "0x9008D19f58AAbD9eD0D60971565AA8510560ab41";

// Same address across all networks:
// Ethereum (1), Gnosis (100), Arbitrum (42161),
// Optimism (10), Polygon (137), BSC (56),
// Base (8453), Avalanche (43114), Sepolia (11155111)
Deployment Transactions by Network:
NetworkChain IDTransaction Hash
Ethereum10xf49f90aa5a268c40001d1227b76bb4dd8247f18361fcad9fffd4a7a44f1320d3
Gnosis1000x9ddc538f89cd8433f4a19bc4de0de27e7c68a1d04a14b327185e4bba9af87133
Arbitrum421610x240486f35ebf42ea69b2b3f1569d587c18c87f98c0ec997bef7d18182ca4c38c
Optimism100xd1bbd68ee6b0eecf6f883e148284fc4fb4c960299b75004dfddd5135246cd5eb
Polygon1370x0e24d3a2a8530eaad5ae62e54e64d57665a77ce3970227d20c1b77da315cbbf6
BSC560x9e0c16a655ceadcb95ba2de3bf59d2b3a3d10cce7bdf52aa5520164b58ffd969
Base84530x00a3c4e2dc4241465208beeba27e90a9ce3159ad4f41581c4c3a1ef02d6e37cb
Avalanche431140x374b84f0ea6bc554abc3ffdc3fbce4374fefc76f2bd25e324ce95a62cafcc142
Sepolia111551110x6bba22a00ffcff6bca79aced546e18d2a5a4f4e484a4e4dbafab13daf42f718d

GPv2AllowListAuthentication

Manages solver authentication and authorization for the protocol.
const AUTHENTICATOR_ADDRESS = "0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE";
Contract Structure: This contract is deployed using a proxy pattern:
  • Proxy Address: 0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE (use this for interactions)
  • Implementation Address: 0x9E7Ae8Bdba9AA346739792d219a808884996Db67
Proxy Deployment Transactions:
NetworkChain IDTransaction Hash
Ethereum10xb84bf720364f94c749f1ec1cdf0d4c44c70411b716459aaccfd24fc677013375
Gnosis1000x1a2d87a05a94bc6680a4faee31bbafbd74e9ddb63dd3941c717b5c609c08b957
Arbitrum421610xe994adff141a2e72bd9dab3eb7b3480637013bdfb1aa42c62d9d6c90de091237
Optimism100x5b6403b485e369ce524d04234807df782e6639e55a7c1d859f0a67925d9a5f49
Polygon1370x686e4bbcfd6ebae91f0fcc667407c831953629877ec622457916729de3d461c3
BSC560x8da639c62eb4a810573c178ed245184944d66c834122e3f88994ebf679b50e34
Base84530x5497004d2a37c9eafd0bd1e5861a67d3a209c5b845724166e3dbca9527ee05ec
Avalanche431140xa58fc76846917779d7bcbb7d34f4a2a44aab2b702ef983594e34e6972a0c626b
Sepolia111551110x73c54c75b3f382304f3adf33e3876c8999fb10df786d4a902733369251033cd1

GPv2VaultRelayer

Handles the interaction between CoW Protocol and the Balancer V2 Vault for token transfers.
const VAULT_RELAYER_ADDRESS = "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110";
The VaultRelayer is deployed as part of the GPv2Settlement deployment process and shares the same deployment transaction.

Chain ID Reference

Quick reference for network chain IDs:
NetworkChain IDNative Token
Ethereum Mainnet1ETH
Optimism10ETH
BNB Smart Chain56BNB
Gnosis Chain100xDAI
Polygon137MATIC
Base8453ETH
Arbitrum One42161ETH
Avalanche C-Chain43114AVAX
Sepolia (Testnet)11155111ETH

Deprecated Networks

The following networks have been deprecated and should not be used for new integrations.

Rinkeby (Chain ID: 4)

Rinkeby testnet has been deprecated by the Ethereum Foundation. Historical Addresses:
  • GPv2Settlement: 0x9008D19f58AAbD9eD0D60971565AA8510560ab41
  • GPv2AllowListAuthentication: 0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE

Goerli (Chain ID: 5)

Goerli testnet has been deprecated in favor of Sepolia. Historical Addresses:
  • GPv2Settlement: 0x9008D19f58AAbD9eD0D60971565AA8510560ab41
  • GPv2AllowListAuthentication: 0x2c4c28DDBdAc9C5E7055b4C863b72eA0149D8aFE

Using Contract Addresses

Web3.js Example

const Web3 = require('web3');
const web3 = new Web3('YOUR_RPC_URL');

const settlementABI = [ /* ABI from networks.json */ ];
const settlementAddress = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';

const settlement = new web3.eth.Contract(settlementABI, settlementAddress);

// Interact with the contract
const domainSeparator = await settlement.methods.domainSeparator().call();

Ethers.js Example

const { ethers } = require('ethers');

const provider = new ethers.providers.JsonRpcProvider('YOUR_RPC_URL');
const settlementAddress = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';
const settlementABI = [ /* ABI from networks.json */ ];

const settlement = new ethers.Contract(
  settlementAddress,
  settlementABI,
  provider
);

// Interact with the contract
const vault = await settlement.vault();
console.log('Balancer Vault:', vault);

Viem Example

import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';

const client = createPublicClient({
  chain: mainnet,
  transport: http(),
});

const settlementAddress = '0x9008D19f58AAbD9eD0D60971565AA8510560ab41';

const domainSeparator = await client.readContract({
  address: settlementAddress,
  abi: settlementABI,
  functionName: 'domainSeparator',
});

Verifying Contract Addresses

Always verify contract addresses through multiple sources:
  1. Official Repository: Check the networks.json file in the official GitHub repository
  2. Block Explorers: View verified contracts on Etherscan, Gnosisscan, etc.
  3. Official Documentation: Cross-reference with the official CoW Protocol documentation

Address Management Best Practices

For Integrators:
  1. Store addresses in configuration files, not hardcoded
  2. Use environment variables for different networks
  3. Implement address validation before transactions
  4. Keep a local copy of the networks.json file
  5. Subscribe to repository updates for new deployments

Additional Resources

Build docs developers (and LLMs) love