NFTs on Arc with USDC Gas and Permanent Storage

On most chains, minting an NFT means asking a user to buy a volatile token first. On Arc, the fee is in dollars. That changes who can collect, and what an NFT can be used for.
Arc is a payments chain first, but it is fully EVM compatible, so ERC-721 and ERC-1155 contracts deploy unchanged. Gas is paid in USDC, finality is sub second, and consumer wallets such as MetaMask, Phantom and Ledger were live at mainnet. For consumer brands, ticketing, loyalty and creator platforms, a chain where users only ever see dollars is an easier product to ship.
What Arc does not change is the oldest problem in NFTs: the token points at files, and the files have to stay put. This post covers minting on Arc with metadata and media on Lighthouse, plus the use cases that fit a dollar denominated chain best.
Why Arc Suits Consumer NFTs
| Property | Why it matters |
|---|---|
| USDC gas | Users see fees in dollars; no second token to buy |
| Sub second deterministic finality | A mint or ticket scan confirms before the user looks away |
| Prices in USDC | Primary sales and royalties in a stable unit |
| EVM compatible | Standard contracts, OpenZeppelin, Foundry, Hardhat |
| Circle wallets and App Kits | Embedded wallets and onramps for mainstream users |
The combination points toward NFTs as utility: tickets, memberships, receipts, warranties, certificates and access passes, where the holder cares more about what the token does than what it might sell for.
The Storage Side: Where NFTs Actually Break
The contract stores ownership and a tokenURI. Everything a wallet displays comes from fetching that URI. If it points at a project's server, the NFT is only as durable as that server. IPFS for NFT Metadata: How Token URIs Break catalogs the ways this goes wrong.
The fix:
- Store media and metadata on content addressed storage.
- Use
ipfs://URIs, not gateway URLs. - Back the data with persistence that does not depend on one pinning node.
Lighthouse does all three. Uploads return CIDs, data is pinned on IPFS and held in Filecoin storage deals with ongoing proofs, and dedicated gateways serve it fast, including image resizing at retrieval and 4K video streaming.

Minting on Arc, Step by Step
1. Upload the collection
import lighthouse from "@lighthouse-web3/sdk";
const apiKey = process.env.LIGHTHOUSE_API_KEY;
// Upload the media folder: one directory CID for the whole collection
const media = await lighthouse.upload("./collection/images", apiKey);
const mediaDirCID = media.data.Hash;
// Generate metadata that references media by CID
// e.g. metadata/0.json -> { "name": "Access Pass #0", "image": "ipfs://<mediaDirCID>/0.png", ... }
const meta = await lighthouse.upload("./collection/metadata", apiKey);
const baseURI = `ipfs://${meta.data.Hash}/`;
2. A contract that sells for USDC
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract AccessPass is ERC721 {
IERC20 public immutable usdc; // USDC ERC-20 interface on Arc (6 decimals)
uint256 public constant PRICE = 25_000_000; // 25 USDC
address public immutable treasury;
string private base; // "ipfs://<metadataDirCID>/"
uint256 public nextId;
constructor(IERC20 _usdc, address _treasury, string memory _base) ERC721("Access Pass", "PASS") {
usdc = _usdc;
treasury = _treasury;
base = _base;
}
function mint() external returns (uint256 id) {
require(usdc.transferFrom(msg.sender, treasury, PRICE), "payment failed");
id = nextId++;
_safeMint(msg.sender, id);
}
function _baseURI() internal view override returns (string memory) {
return base;
}
}
Two Arc specific details. Price with the USDC ERC-20 interface, which uses 6 decimals, not the 18 decimal native representation used for gas. And the buyer pays both the mint price and the gas in the same currency, which makes checkout copy simple: one dollar amount.
3. Deploy
forge create src/AccessPass.sol:AccessPass \
--rpc-url https://rpc.mainnet.arc.io \
--private-key $DEPLOYER_KEY \
--constructor-args $USDC_ADDRESS $TREASURY "ipfs://<metadataDirCID>/"
Chain ID 5042 on mainnet and 5042002 on testnet. Get the USDC contract address from the official Arc docs rather than from a third party list.
Pay to View Media, Priced in Dollars
The most natural NFT product on a dollar chain is paid content. A creator sells a pass for a few dollars in USDC; holders unlock a film, a course, a research series or a music release.
Lighthouse encrypts the content client side and splits its key across independent nodes with threshold cryptography. Decryption can be granted to specific addresses, or gated on conditions such as holding an NFT or the return value of a payment contract. The file itself never has to leave decentralized storage, and Lighthouse never holds a complete key.
// Encrypt the premium video before upload
const { data } = await lighthouse.uploadEncrypted(
"./premium/episode-01.mp4",
process.env.LIGHTHOUSE_API_KEY,
creatorAddress,
signedMessage
);
const videoCID = data[0].Hash;
// Grant access to a buyer after their USDC mint confirms
await lighthouse.shareFile(creatorAddress, [buyerAddress], videoCID, signedMessage);
Chain support note. Condition based gating, such as "decrypt if you hold an Access Pass," reads contract state from chains on Lighthouse's Chains Supported list, and Arc is not listed yet. Until it is, grant access per buyer as above by listening for mint events, or request Arc support on Discord.
The pattern is covered end to end in Creating a Pay-to-View Model Using Lighthouse Storage, and video delivery in Serving Video from IPFS Without Buffering.
NFT Ideas Built for Arc
Event tickets. Priced in USDC, confirmed in under a second at the door. Ticket art and venue details by CID; recordings unlocked for holders afterwards.
Receipts and warranties. A purchase settled in USDC mints a receipt NFT whose metadata points to the encrypted invoice and warranty terms. Pairs with Cross Border Payments on Arc with Private Verifiable Records.
Credentials and certificates. Course completions and professional certifications with the certificate PDF stored by CID, so anyone can verify it has not been altered.
Membership passes. Monthly or annual passes that gate a content vault, bought with dollars from an embedded wallet.
Agent identity. An NFT representing an AI agent, with its capabilities and service terms by CID, for agents selling services on Arc. See Agentic Commerce on Arc with x402 Nanopayments and Lighthouse.
Frequently Asked Questions
Can you mint NFTs on Arc? Yes. Arc is EVM compatible, so standard ERC-721 and ERC-1155 contracts work, and minting fees are paid in USDC.
What is the gas token for NFT mints on Arc? USDC. The native representation has 18 decimals; the USDC ERC-20 interface used for prices and transfers has 6.
Where should Arc NFT metadata be stored?
On IPFS with Filecoin backed persistence, referenced with ipfs:// URIs. Lighthouse handles upload, pinning, Filecoin deals and gateways.
Can NFTs on Arc unlock private content? Yes. Encrypt content with Lighthouse and grant decryption to holders, per address today, or through onchain conditions once Arc is supported for condition evaluation.
Get Started
New to the chain? Read What Is Arc by Circle and How Lighthouse Adds the Storage Layer. Launching NFTs on Arc? Start on the free tier, 5 GB with no card, or talk to our team.
Stay in Touch
Learn more at the website, docs, or GitHub. Join the community on Discord, X, Telegram, and LinkedIn.























































































