Skip to main content

Domain

The domain module supplies utilities for constructing EIP-712 typed data domains necessary for signing CoW Protocol orders.

domain()

Generates the Gnosis Protocol v2 domain structure used in order signing.
function domain(
  chainId: number,
  verifyingContract: string
): TypedDataDomain
Parameters:
NameTypeDescription
chainIdnumberThe EIP-155 chain identifier where the contract operates
verifyingContractstringThe GPv2Settlement contract address for signature verification
Returns: A TypedDataDomain object containing:
  • name: "Gnosis Protocol"
  • version: "v2"
  • chainId: Supplied chain ID
  • verifyingContract: Settlement contract address

Example

import { domain } from "@cowprotocol/contracts";

const settlementDomain = domain(
  1, // Ethereum mainnet
  "0x9008D19f58AAbD9eD0D60971565AA8510560ab41"
);

console.log(settlementDomain);
// {
//   name: "Gnosis Protocol",
//   version: "v2",
//   chainId: 1,
//   verifyingContract: "0x9008D19f58AAbD9eD0D60971565AA8510560ab41"
// }

TypedDataDomain Interface

interface TypedDataDomain {
  name?: string;
  version?: string;
  chainId?: number;
  verifyingContract?: string;
  salt?: string;
}

Purpose

The domain structure prevents order replay across different chains and contract instances by being incorporated into all EIP-712 signatures. Always use the correct chain ID and settlement contract address for your target network.

Common Chain IDs

NetworkChain ID
Ethereum Mainnet1
Gnosis Chain100
Arbitrum One42161
Optimism10
Polygon137
BSC56
Base8453
Avalanche43114
Sepolia11155111
Last modified on March 4, 2026