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 Address
ethereum logoEthereum

Mainnet

Sepolia

0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

polygon logoPolygon

Mainnet


Amoy

USDC 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359

USDC.e 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174*

0x14196f08a4fa0b66b7331bc40dd6bcd8a1deea9f

base logoBase

Mainnet

Base Sepolia

0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

arbitrum logoArbitrum

Mainnet

Arbitrum Sepolia

0xaf88d065e77c8cC2239327C5EDb3A432268e5831

0x14196F08a4Fa0B66B7331bC40dd6bCd8A1dEeA9F

arbitrum nova logoArbitrum Nova

Mainnet

0x750ba8b76187092B0D1E87E28daaf484d1b5273b

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 Testnt USDC 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
}