Skip to main content

Documentation Index

Fetch the complete documentation index at: https://cowswap-mintlify-seo-audit-1777280932.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Signing

The signing module provides utilities for various signature schemes used in CoW Protocol order signing.

Signing Schemes

enum SigningScheme {
  EIP712 = 0,
  ETHSIGN = 1,
  EIP1271 = 2,
  PRESIGN = 3,
}
SchemeDescription
EIP712Recommended. Provides structured data to wallets about what is being signed
ETHSIGNUses the eth_sign RPC call for legacy wallet compatibility
EIP1271For smart contract wallets like Gnosis Safe
PRESIGNOn-chain pre-authorization before settlement

Signature Types

EcdsaSignature

interface EcdsaSignature {
  scheme: SigningScheme.EIP712 | SigningScheme.ETHSIGN;
  data: string; // ECDSA signature (r, s, v)
}

Eip1271Signature

interface Eip1271Signature {
  scheme: SigningScheme.EIP1271;
  verifier: string; // Smart contract address
  data: string; // Signature bytes
}

PreSignSignature

interface PreSignSignature {
  scheme: SigningScheme.PRESIGN;
  signer: string; // Signer address
}

Functions

signOrder

Signs orders using externally owned accounts with either EIP-712 or ETHSIGN schemes.
async function signOrder(
  domain: TypedDataDomain,
  order: Order,
  signer: Signer,
  scheme: SigningScheme.EIP712 | SigningScheme.ETHSIGN
): Promise<EcdsaSignature>;
Parameters:
NameTypeDescription
domainTypedDataDomainEIP-712 domain separator
orderOrderOrder to sign
signerSignerethers.js Signer instance
schemeSigningSchemeEIP712 or ETHSIGN

encodeEip1271SignatureData

Encodes EIP-1271 signature components into hex format.
function encodeEip1271SignatureData(signature: {
  verifier: string;
  data: string;
}): string;

decodeEip1271SignatureData

Reverses the encoding to retrieve original signature components.
function decodeEip1271SignatureData(encodedSignature: string): {
  verifier: string;
  data: string;
};

Example

import { domain, signOrder, SigningScheme, Order, OrderKind } from "@cowprotocol/contracts";
import { ethers } from "ethers";

const settlementDomain = domain(1, "0x9008D19f58AAbD9eD0D60971565AA8510560ab41");
const wallet = new ethers.Wallet("YOUR_PRIVATE_KEY");

const order: Order = {
  // ... order fields
  kind: OrderKind.SELL,
  partiallyFillable: false,
};

// EIP-712 signing (recommended)
const signature = await signOrder(
  settlementDomain,
  order,
  wallet,
  SigningScheme.EIP712
);
EIP-712 is the recommended signing scheme for optimal user experience, as it shows users a structured representation of the order data in their wallet.
Last modified on April 27, 2026