Skip to main content

Vault

The Vault module provides utilities for integrating CoW Protocol with Balancer Vault, enabling advanced trading features like internal balance usage and batch swaps.

Constants

VAULT_INTERFACE

A partial ABI interface for the Balancer Vault containing methods for manageUserBalance and batchSwap:
const VAULT_INTERFACE: Interface;

Key Addresses (Mainnet)

ContractAddress
Balancer Vault0xBA12222222228d8Ba445958a75a0704d566BF2C8
CoW Protocol Vault Relayer0xC92E8bdf79f0507f65a392b0ab4667716BFE0110

Functions

grantRequiredRoles

Grants necessary permissions to the CoW Protocol Vault Relayer.
async function grantRequiredRoles(
  vault: Contract,
  vaultRelayerAddress: string
): Promise<void>;
This function is intended to be called by the Balancer Vault admin, not by traders.

Balance Types

Users can configure token handling through three balance types:
TypeDescriptionGas Cost
ERC20Standard transfers requiring token approvalStandard
EXTERNALLeverages existing Vault approvalsReduced
INTERNALUses Vault internal balancesLowest

Example

import { ethers } from "ethers";

const provider = new ethers.providers.JsonRpcProvider("YOUR_RPC_URL");

// Balancer Vault on mainnet
const vaultAddress = "0xBA12222222228d8Ba445958a75a0704d566BF2C8";
const vaultRelayer = "0xC92E8bdf79f0507f65a392b0ab4667716BFE0110";

// Check internal balance
const vault = new ethers.Contract(vaultAddress, VAULT_INTERFACE, provider);
Internal balance operations have different gas cost characteristics than standard ERC20 transfers. Test thoroughly on testnets before using Vault integration in production.
Last modified on March 4, 2026