Summary
After building a full CCTP V2 bridge (Arc Testnet ↔ Ethereum Sepolia ↔ Base Sepolia ↔ Avalanche Fuji), three Arc-specific integration details were not documented anywhere and caused significant debugging time. Sharing them here so the docs or a dedicated integration guide can cover them.
1. Arc Testnet CCTP domain is 26
The CCTP V2 depositForBurn call requires a destinationDomain parameter. Arc Testnet's domain is 26. This is not listed in the Circle CCTP docs or the arc-node README. The only way to confirm it is empirically by inspecting a successful MessageSent event.
// Sending from Ethereum Sepolia → Arc Testnet
const destinationDomain = 26; // Arc Testnet — not in Circle's public docs
2. Arc Testnet requires minFinalityThreshold: 2000 (finalized), not 1000 (safe)
CCTP V2's depositForBurn accepts a minFinalityThreshold parameter that controls when the attestation is issued. All other testnets work with 1000 (safe finality, ~1–2 min). Arc Testnet requires 2000 (finalized) — using 1000 results in an attestation that never progresses past pending in the Circle Iris API.
// Arc Testnet source burns:
const minFinalityThreshold = 2000; // finalized — required for Arc
// All other chains (Sepolia, Base Sepolia, Fuji):
const minFinalityThreshold = 1000; // safe — works fine
3. All CCTP contracts on Arc use V2 — the V1 4-parameter selector will silently fail
The CCTP V2 depositForBurn function signature is:
function depositForBurn(
uint256 amount,
uint32 destinationDomain,
bytes32 mintRecipient,
address burnToken,
bytes32 destinationCaller, // V2 addition
uint256 maxFee, // V2 addition
uint32 minFinalityThreshold // V2 addition
) external returns (uint64 nonce);
The V1 version has only 4 parameters. If a DApp or library calls the V1 selector (0x6fd3504e) against Arc's TokenMessenger (0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA), the transaction will be accepted by the node but revert on-chain with no useful error data. This is a common mistake when copying integration examples from older Circle docs.
The correct V2 selector is 0x8e0250ee.
Suggested documentation additions
- Add Arc Testnet to the CCTP supported domains list (domain 26)
- Document
minFinalityThreshold: 2000 as Arc-specific in the CCTP integration guide
- Add a warning that all Arc CCTP contracts are V2-only and the V1 ABI will silently fail
- Include Arc Testnet in the Circle Iris attestation API endpoint documentation
Context
Discovered while building arc-relay-bridge — a fully working CCTP V2 bridge across Arc Testnet, Ethereum Sepolia, Base Sepolia, and Avalanche Fuji.
Summary
After building a full CCTP V2 bridge (Arc Testnet ↔ Ethereum Sepolia ↔ Base Sepolia ↔ Avalanche Fuji), three Arc-specific integration details were not documented anywhere and caused significant debugging time. Sharing them here so the docs or a dedicated integration guide can cover them.
1. Arc Testnet CCTP domain is 26
The CCTP V2
depositForBurncall requires adestinationDomainparameter. Arc Testnet's domain is 26. This is not listed in the Circle CCTP docs or the arc-node README. The only way to confirm it is empirically by inspecting a successfulMessageSentevent.2. Arc Testnet requires minFinalityThreshold: 2000 (finalized), not 1000 (safe)
CCTP V2's
depositForBurnaccepts aminFinalityThresholdparameter that controls when the attestation is issued. All other testnets work with 1000 (safe finality, ~1–2 min). Arc Testnet requires 2000 (finalized) — using 1000 results in an attestation that never progresses pastpendingin the Circle Iris API.3. All CCTP contracts on Arc use V2 — the V1 4-parameter selector will silently fail
The CCTP V2
depositForBurnfunction signature is:The V1 version has only 4 parameters. If a DApp or library calls the V1 selector (
0x6fd3504e) against Arc's TokenMessenger (0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA), the transaction will be accepted by the node but revert on-chain with no useful error data. This is a common mistake when copying integration examples from older Circle docs.The correct V2 selector is
0x8e0250ee.Suggested documentation additions
minFinalityThreshold: 2000as Arc-specific in the CCTP integration guideContext
Discovered while building arc-relay-bridge — a fully working CCTP V2 bridge across Arc Testnet, Ethereum Sepolia, Base Sepolia, and Avalanche Fuji.