Skip to content

docs: CCTP V2 integration on Arc Testnet — domain 26, minFinalityThreshold 2000, V1 selector incompatible #110

Description

@osr21

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions