Integration

Contracts

Every address Cowl runs on, with its ABI one click away. The full stack — shielded pool, proof verifiers, and the atomic trade adapter — is live on Robinhood Chain mainnet and testnet both. Read any of them on the explorer before you send a wei.

Robinhood Chain mainnet

Mainnet · Live
The full stack is live on mainnet — pool, verifiers, and the trade adapter wired to the chain’s live Uniswap V3. One immutable release, deployed once and never redeployed — these addresses are final. Chain ID 4663, every spend proof bound to it.
ContractRoleAddress
ShieldedPool
ABI ↓
Deposits, private sends, unshields, and the note tree0x6f98666e9d05431dCd765AAa289a5E346AfA6a3E
TransferVerifier
ABI ↓
Verifies join-split spend proofs on chain0x186706467d0Dbe19374236deD89eE7E58991275E
ShieldVerifier
ABI ↓
Verifies deposit proofs on chain0x0D6E2e89586Cf457e831cdC33C209195C6a065fC
CowlTradeAdapter
ABI ↓
Atomic private trades through the chain’s live Uniswap V30x0b86f9d1D2E0Abc8ab7C7BE39498855E8F4a3A98

The mainnet pool went live at block 18121312. Point an indexer or a cold sync there — nothing shielded exists before it. Trades route through the chain’s live Uniswap V3 stack, where the WETH/USDG book is over a thousand WETH deep.

Assets

TokenRoleAddress
$COWLProtocol token, routable through the 1% Uniswap V3 tier against WETH0xfc7CB8A3Df69c0F658Ac5Fb1e31dE1843E04E38f

Any ERC-20 on the chain can be shielded. What decides whether a spend can be gasless is whether the relayer can price its fee against the venue, which needs a route to the native asset.

Relayer endpoints

NetworkEndpoint
Mainnet, chain 4663https://relay.cowlprotocol.com/mainnet
Testnet, chain 46630https://relay.cowlprotocol.com

Each one publishes the chain and pool it serves, and its fee per spend. Check either with cowl relay quote <url>, or run your own.

Robinhood Chain testnet

Testnet · Live
Live now. Every deposit, private send, private trade, and unshield settles through these contracts. Chain ID 46630.

Core

ContractRoleAddress
ShieldedPool
ABI ↓
Deposits, private sends, unshields, and the note tree0xf9F825f2D6d8509c78baaa587694f74672C32A59
CowlTradeAdapter
ABI ↓
Atomic private trades: unshield, swap, re-shield in one transaction0xD0D74be38C0B99EBa6465e9F512c3F78EE2d1f3B
TransferVerifier
ABI ↓
Verifies join-split spend proofs on chain0xBA945Bf3A0F777cdcA53643e6a14037D82cA4239
ShieldVerifier
ABI ↓
Verifies deposit proofs on chain0xB75c565943cdb00959EC6a8B1eEe823ffD000ba9

The pool went live at block 92522685. Point an indexer or a cold sync there — nothing shielded exists before it.

Trade venue

The testnet venue wears the exact Uniswap V3 interface the adapter targets — exactOutputSingle, quoteExactOutputSingle, same structs — so on mainnet the adapter points at the chain’s live V3 stack and nothing else changes. The test USDG mints openly: every install is its own faucet.

ContractRoleAddress
TestSwapRouter
ABI ↓
Fixed-rate WETH/USDG router, V3 interface0xbd610c3A708C483a64dC2C92876C2D1a8Ef43b03
TestQuoterV2
ABI ↓
Prices an exact output before you trade it0x5cD1F037A2CB277A7661Ad6c045803BFC428f84B
TestWETH
ABI ↓
Wrapped ether for the swap leg0xdC155cafBa4D26790781c12e4B1001F933496Da2
TestUSDG
ABI ↓
Six-decimal test dollar, open mint0xa82762eDA1AF5Ed19B9BD544C121dbcF365526aC

ABIs

Every ABI ships from this site as plain JSON — cowlprotocol.com/abi/<Contract>.json — ready for viem, ethers, or anything else that eats JSON:

import { createPublicClient, http } from "viem";

const POOL = "0x6f98666e9d05431dCd765AAa289a5E346AfA6a3E"; // mainnet
const abi = await fetch(
  "https://www.cowlprotocol.com/abi/ShieldedPool.json",
).then((r) => r.json());

const client = createPublicClient({
  transport: http("https://robinhood-rpc.publicnode.com"),
});

const root = await client.readContract({ address: POOL, abi, functionName: "root" });
const held = await client.readContract({
  address: POOL,
  abi,
  functionName: "pooledValue",
  args: [0n], // native coin — the per-token conservation cap, live
});

The pool’s events and their topic hashes are documented under onchain events; governance state — owner, timelock, conservation cap — is public and covered in the trust model.

Tip
The CLI always talks to the current contracts. Run cowl statusto see the exact addresses it’s using.