By denominating your collection in USDC, you can eliminate price volatility, and offer a more accessible experience to users.

Ensure you are using a supported USDC token

First of all, make sure your collection is denominated in one of the USDC token addresses supported by Crossmint.

ChainNetworkUSDC Token AddressUSDXM Token Address
Ethereum

Mainnet

Sepolia

0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

Polygon

Mainnet


Amoy

USDC 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359

USDC.e 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174*

0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582

-

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

Base

Mainnet

Base Sepolia

0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

0x036CbD53842c5426634e7929541eC2318f3dCF7e

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

Arbitrum

Mainnet

Arbitrum Sepolia

0xaf88d065e77c8cC2239327C5EDb3A432268e5831

0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

Arbitrum Nova

Mainnet

Testnet

0x750ba8b76187092B0D1E87E28daaf484d1b5273b

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

Sei

Mainnet

Testnet

0x3894085Ef7Ff0f0aeDf52E2A2704928d1Ec074F1

-

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

USDC.e is only supported on previously registered integrations on Polygon mainnet. Please use the native USDC address for new projects.

If you need some testnet USDC you can mint it freely from the contract or from this faucet app that uses the same testnet token contracts as the NFT Checkout tools.

Crossmint Testnet USDXM Faucet

Validate your collection meets the requirements

In addition to the standard requirements, keep in mind:

  1. The mint function should be nonpayable.
  2. The USDC token has 6 decimals instead of 18 like ETH, Matic, and most other tokens.
  3. The totalPrice attribute in the mintConfig of your button should be in units of USDC. If your intended price is 100 USD, then you will set totalPrice to 100 e.g. totalPrice="100".
  4. Your ERC-20 transfer call must request the funds from msg.sender instead of the address parameter. This allows Crossmint to pay from our fleet of treasury wallets and deliver the NFTs directly to the user’s wallet. See an example mint function below.
Solidity
function mintUSDC(address _to) public {
  // pre payment logic here

  // note that you need to transfer from msg.sender, NOT the _to address
  tokenInstance.transferFrom(msg.sender, address(this), priceUSDC );

  // actual minting logic here
}