Circle Internet Financial
Circle Internet Financial Logo

Jul 11, 2025

July 11, 2025

Build Once, Scale Globally: Unlocking Native USDC And CCTP V2 on Sonic

what you’ll learn

USDC provides Sonic users with a trusted digital dollar that facilitates liquidity, and crosschain transfers. Learn how to deploy USDC dApps on Sonic.

Build Once, Scale Globally: Unlocking Native USDC And CCTP V2 on Sonic

Sonic is changing how developers build crosschain apps with USDC, and Circle powers this shift with native USDC and CCTP V2. Together, they help enable secure, native interoperability for moving value across chains in under a minute. Native USDC is redeemable 1:1 for USD, backed by highly liquid cash and cash-equivalent assets, and offers near-instant settlement, while CCTP V2 enables secure crosschain transfers through native burning on the source chain and native minting on the destination. This unifies liquidity, improves capital efficiency, and improves the developer and user experience.

In this post, we’ll explore how these technologies work together on Sonic, highlight key ecosystem protocols building with them, and walk through a sample application you can try yourself.

Ecosystem Players on Sonic

With the upgrade to native USDC and support for CCTP V2, builders are already deploying meaningful use cases on Sonic. USDC is powering the next wave of activity on protocols such as Aave, CCTP.to, Curve Finance, Shadow Exchange, and Silo Finance.

Try Out CCTP V2 Yourself

How do crosschain transfers work in practice? Here’s a step-by-step example using a sample app to move USDC from Ethereum Sepolia to Sonic Blaze testnet. You can fork this sample application on Replit and try it yourself — no signup or API keys are required.

Here’s what the flow looks like under the hood:

1. Approve USDC

await client.sendTransaction({
  to: "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238", // USDC Address on Ethereum Sepolia
  data: encodeFunctionData({
    abi: [
      {
        type: "function",
        name: "approve",
        stateMutability: "nonpayable",
        inputs: [
          { name: "spender", type: "address" },
          { name: "amount", type: "uint256" },
        ],
        outputs: [{ name: "", type: "bool" }],
      },
    ],
    functionName: "approve",
    args: [
      "0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa", // Token Messenger Address on Ethereum Sepolia
      10000000000n,
    ],
  }),
});

2. Burn USDC

await client.sendTransaction({
  to: "0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa", // Token Messenger Address on Ethereum Sepolia
  data: encodeFunctionData({
    abi: [
      {
        type: "function",
        name: "depositForBurn",
        stateMutability: "nonpayable",
        inputs: [
          { name: "amount", type: "uint256" },
          { name: "destinationDomain", type: "uint32" },
          { name: "mintRecipient", type: "bytes32" },
          { name: "burnToken", type: "address" },
          { name: "hookData", type: "bytes32" },
          { name: "maxFee", type: "uint256" },
          { name: "finalityThreshold", type: "uint32" },
        ],
        outputs: [],
      },
    ],
    functionName: "depositForBurn",
    args: [
      amount,
      13, // Destination Domain for Sonic Blaze
      mintRecipient,
      "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238", // USDC Address on Ethereum Sepolia
      maxFee,
      finalityThreshold,
    ],
  }),
});

3. Retrieve Attestation

const response = await axios.get(
  `${IRIS_API_URL}/v2/messages/0?transactionHash=${txHash}` // 0 = Domain ID for Ethereum Sepolia
);

4. Mint USDC

await client.sendTransaction({
  to: "0xe737e5cebeeba77efe34d4aa090756590b1ce275", // Message Transmitter on Sonic Blaze
  data: encodeFunctionData({
    functionName: "receiveMessage",
    args: [attestation.message, attestation.attestation],
  }),
});

Ready to Ship?

Everything’s ready for you to start building. Whether you're testing on Sonic Blaze or deploying to mainnet, native USDC and CCTP V2 are already live and integrated. You can:

  • Fork the CCTP V2 sample app and customize it
  • Use Sonic Blaze testnet for dev and testing:
    • USDC address: 0xA4879Fed32Ecbef99399e5cbC247E533421C4eC6
    • TokenMessenger address: 0x8fe6b999dc680ccfdd5bf7eb0974218be2542daa
    • MessageTransmitter address: 0xe737e5cebeeba77efe34d4aa090756590b1ce275
    • Domain ID: 13
  • Use Sonic Mainnet for production:
    • USDC address: 0x29219dd400f2bf60e5a23d13be72b486d4038894
    • TokenMessenger address: 0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d
    • MessageTransmitter address: 0x81D40F21F12A8F0E3252Bccb954D722d4c464B64
    • Domain ID: 13

Related posts

U.S. Congress Passes Historic Stablecoin Bill

U.S. Congress Passes Historic Stablecoin Bill

July 17, 2025
Native USDC & CCTP V2 are coming to Sei: What You Need to Know

Native USDC & CCTP V2 are coming to Sei: What You Need to Know

July 10, 2025
Circle Responds to the FASB’s Invitation to Comment on its 2025 Agenda Consultation

Circle Responds to the FASB’s Invitation to Comment on its 2025 Agenda Consultation

July 2, 2025
Blog
Build Once, Scale Globally: Unlocking Native USDC And CCTP V2 on Sonic
build-once-scale-globally-unlocking-native-usdc-and-cctp-v2-on-sonic
July 11, 2025
USDC provides Sonic users with a trusted digital dollar that facilitates liquidity, and crosschain transfers. Learn how to deploy USDC dApps on Sonic.
USDC
Stablecoins
Developer
CCTP
Build on Circle