Hands-on exploration of Circle's developer SDK stack. Three modules, each a runnable reference implementation against Circle's testnet APIs.
| Module | What it covers | When to reach for it |
|---|---|---|
cctp/ |
Cross-Chain Transfer Protocol: native USDC across Ethereum, Avalanche, Polygon, Arbitrum (standard + fast flows) | You need to move USDC across chains without bridge collateral |
wallets/ |
Developer-Controlled Wallets SDK: server-side wallet provisioning, balance queries, USDC transfers, idempotent sends | You're building a wallet service and want Circle to handle key custody |
contracts/ |
Smart Contract Platform SDK: deploy contracts, read state, write transactions, stream events, all signed via developer-controlled wallets | You want contract interaction without managing private keys locally |
Need cross-chain USDC? -> cctp/
Need a managed wallet backend? -> wallets/
Need on-chain contract calls
without local key custody? -> contracts/
Building all three? -> wallets/ underpins the others
The wallets module is foundational: both cctp and contracts flows assume a wallet ID provisioned via Developer-Controlled Wallets. Look at wallets/ first if you're new to the stack.
| Tool | Notes |
|---|---|
| Node.js 18+ | each module is independent |
| Circle API key | from console.circle.com |
| Entity secret | 32-byte hex, stored in your secret manager |
| Testnet USDC | grab from faucet.circle.com |
Each module is self-contained:
cd cctp && npm install && cp .env.example .env # fill in keys, then npm run dev
cd wallets && npm install && cp .env.example .env
cd contracts && npm install && cp .env.example .envSee each subdirectory's README for module-specific commands and walkthroughs.
These three SDKs cover the full surface area of "interact with USDC programmatically without taking on key custody risk":
wallets/solves "where do I keep funds and how do I sign"contracts/solves "how do I deploy and call smart contracts using those wallets"cctp/solves "how do I move USDC across chains natively, without wrapped tokens or bridge contracts"
A real Circle-native dApp typically uses all three.