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
4663, every spend proof bound to it.| Contract | Role | Address |
|---|---|---|
| ShieldedPool ABI ↓ | Deposits, private sends, unshields, and the note tree | 0x6f98666e9d05431dCd765AAa289a5E346AfA6a3E |
| TransferVerifier ABI ↓ | Verifies join-split spend proofs on chain | 0x186706467d0Dbe19374236deD89eE7E58991275E |
| ShieldVerifier ABI ↓ | Verifies deposit proofs on chain | 0x0D6E2e89586Cf457e831cdC33C209195C6a065fC |
| CowlTradeAdapter ABI ↓ | Atomic private trades through the chain’s live Uniswap V3 | 0x0b86f9d1D2E0Abc8ab7C7BE39498855E8F4a3A98 |
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
| Token | Role | Address |
|---|---|---|
| $COWL | Protocol token, routable through the 1% Uniswap V3 tier against WETH | 0xfc7CB8A3Df69c0F658Ac5Fb1e31dE1843E04E38f |
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
| Network | Endpoint |
|---|---|
| Mainnet, chain 4663 | https://relay.cowlprotocol.com/mainnet |
| Testnet, chain 46630 | https://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
46630.Core
| Contract | Role | Address |
|---|---|---|
| ShieldedPool ABI ↓ | Deposits, private sends, unshields, and the note tree | 0xf9F825f2D6d8509c78baaa587694f74672C32A59 |
| CowlTradeAdapter ABI ↓ | Atomic private trades: unshield, swap, re-shield in one transaction | 0xD0D74be38C0B99EBa6465e9F512c3F78EE2d1f3B |
| TransferVerifier ABI ↓ | Verifies join-split spend proofs on chain | 0xBA945Bf3A0F777cdcA53643e6a14037D82cA4239 |
| ShieldVerifier ABI ↓ | Verifies deposit proofs on chain | 0xB75c565943cdb00959EC6a8B1eEe823ffD000ba9 |
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.
| Contract | Role | Address |
|---|---|---|
| TestSwapRouter ABI ↓ | Fixed-rate WETH/USDG router, V3 interface | 0xbd610c3A708C483a64dC2C92876C2D1a8Ef43b03 |
| TestQuoterV2 ABI ↓ | Prices an exact output before you trade it | 0x5cD1F037A2CB277A7661Ad6c045803BFC428f84B |
| TestWETH ABI ↓ | Wrapped ether for the swap leg | 0xdC155cafBa4D26790781c12e4B1001F933496Da2 |
| TestUSDG ABI ↓ | Six-decimal test dollar, open mint | 0xa82762eDA1AF5Ed19B9BD544C121dbcF365526aC |
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.
cowl statusto see the exact addresses it’s using.