Reference
Contracts
Circle and USDC contract addresses for every network, on testnet and mainnet.
Every network in the SDK carries the addresses of the contracts it uses. You never enter these yourself. This page lists them so you can verify a transfer, open a contract in an explorer, or audit what the SDK touches.
EVM (mainnet)
Circle deploys the CCTP V2 contracts at the same address on every EVM chain.
| Contract | Address |
|---|---|
TokenMessengerV2 | 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d |
MessageTransmitterV2 | 0x81D40F21F12A8F0E3252Bccb954D722d4c464B64 |
EVM (testnet, on Sepolia and equivalents)
| Contract | Address |
|---|---|
TokenMessengerV2 | 0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA |
MessageTransmitterV2 | 0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275 |
Stellar (mainnet)
Stellar uses three Soroban contracts. Addresses are Contract Ids starting with C.
| Contract | Address |
|---|---|
TokenMessenger | CAE2G5Z77UP7GYPYGFOWFGW7C7J6I4YP2AFGSADRKQY62SYUFLPNFTXL |
MessageTransmitter | CACMENFFJPJMSDAJQLX4R7K3SFZIW2LJSE3R2UMLGSWHFHS353FVXAZV |
CctpForwarder | CBZL2IH7F6BIDAA3WBNXYKIXSATJGMSW7K5P5MJ6STX5RXN47TZJDF5T |
Stellar (testnet)
| Contract | Address |
|---|---|
TokenMessenger | CDNG7HXAPBWICI2E3AUBP3YZWZELJLYSB6F5CC7WLDTLTHVM74SLRTHP |
MessageTransmitter | CBJ6MTCKKZG73PMDZCJMSFRD7DQEMI4FKDH7CGDSV4W6FHCRBCQAVVJY |
CctpForwarder | CA66Q2WFBND6V4UEB7RD4SAXSVIWMD6RA4X3U32ELVFGXV5PJK4T4VSZ |
What each contract does
TokenMessenger[V2]burns USDC on the source chain and emits the cross chain message.MessageTransmitter[V2]verifies the attestation and mints on the destination chain.CctpForwarderis Stellar only. It mints USDC to itself, then forwards it to the real recipient. See Chains.
Read them in code
Every network exposes its addresses through the Network value.
import { NetworkId, AssetSymbol, ZetHubBridge } from "@zethub/bridge";
const sdk = new ZetHubBridge();
const chains = await sdk.chainDetailsMap();
const base = chains[NetworkId.BASE].network;
base.tokenMessenger;
base.messageTransmitter;
base.token(AssetSymbol.USDC).address;
const stellar = chains[NetworkId.STELLAR].network;
stellar.cctpForwarder;
stellar.token(AssetSymbol.USDC).issuer;