Skip to main content

Core Libraries

CoW Protocol employs specialized libraries designed for gas efficiency and security, using low-level optimizations where appropriate.

GPv2Order

Defines the complete order structure and provides utilities for order management.

Data Structure

struct Data {
    IERC20 sellToken;
    IERC20 buyToken;
    address receiver;
    uint256 sellAmount;
    uint256 buyAmount;
    uint32 validTo;
    bytes32 appData;
    uint256 feeAmount;
    bytes32 kind;
    bool partiallyFillable;
    bytes32 sellTokenBalance;
    bytes32 buyTokenBalance;
}

Key Functions

  • hash(Data memory order) - Computes EIP-712 digest for signing
  • actualReceiver(Data memory order) - Resolves recipient address (handles zero-address as owner)
  • packOrderUidParams() - Encodes 56-byte UID (32-byte digest + 20-byte owner + 4-byte timestamp)
  • extractOrderUidParams() - Decodes UID components

Pre-computed Constants

bytes32 constant KIND_SELL = keccak256("sell");
bytes32 constant KIND_BUY = keccak256("buy");
bytes32 constant BALANCE_ERC20 = keccak256("erc20");
bytes32 constant BALANCE_EXTERNAL = keccak256("external");
bytes32 constant BALANCE_INTERNAL = keccak256("internal");

GPv2Trade

Handles compact settlement representation through a flags field that encodes order parameters into a single uint256 value.

Flag Encoding

BitsFieldValues
0Order kind0 = sell, 1 = buy
1Fill type0 = fill-or-kill, 1 = partially fillable
2-3Sell token balance00 = ERC20, 01 = external, 10 = internal
4Buy token balance0 = ERC20, 1 = internal
5-6Signing scheme00 = EIP-712, 01 = eth_sign, 10 = EIP-1271, 11 = PreSign
The default value 0x00 represents the most common case: a fill-or-kill sell order by an externally owned account using EIP-712 signatures.

Key Functions

  • extractOrder() - Converts trade data into a full order struct
  • extractFlags() - Unpacks flags into separate order parameters

GPv2Interaction

Enables arbitrary contract calls during settlement using inline assembly for gas optimization.

Data Structure

struct Data {
    address target;
    uint256 value;
    bytes callData;
}

Key Functions

  • execute(Data calldata interaction) - Performs the contract interaction
  • selector(Data calldata interaction) - Extracts 4-byte function selector

Settlement Phases

Interactions run at three distinct phases:
  1. Pre-settlement - Setup operations like approvals
  2. Intra-settlement - Liquidity transformations after input transfers
  3. Post-settlement - Cleanup tasks like token unwrapping

GPv2Signing

Supports four signature schemes:
SchemeDescription
EIP-712Standard typed data signing
eth_signLegacy signing with message prefix
EIP-1271Smart contract signature verification
PreSignOn-chain pre-authorization

Key Features

  • Careful memory management to avoid unnecessary copies
  • Extensive use of calldata instead of memory for read-only data
  • Domain separator includes contract address for replay protection
  • Pre-computed hash constants for common types
Last modified on March 4, 2026