Problem
depositForBurnWithHook accepts a minFinalityThreshold parameter, but neither the contract NatSpec nor the README documents what values are valid, what they mean, or which value to use for each supported chain. Developers integrating CCTP v2 are left to infer the correct value from sample code or trial and error.
What We Found (empirically, Arc Testnet)
While building a CCTP v2 reference app on Arc Testnet we traced through the relay bridge source and Circle sample apps to determine the correct values:
| Chain |
CCTP Domain |
Recommended minFinalityThreshold |
Meaning |
| Arc Testnet |
26 |
2000 |
"Finalized" finality level on Arc |
| Ethereum Sepolia |
0 |
? |
Undocumented |
| Base Sepolia |
6 |
? |
Undocumented |
| Arbitrum Sepolia |
3 |
? |
Undocumented |
Using 0 appears permissive (fast finality), but it's unclear whether that's intentional or simply unvalidated by the contract.
Suggested Doc Addition
In the README or NatSpec, add a table like:
minFinalityThreshold values per chain:
0 = "fast" finality (lower security guarantee)
1000 = "safe" (chain-specific)
2000 = "finalized" (highest security, recommended for cross-chain value transfers)
Plus a per-chain table showing which values each chain supports.
Why This Matters
The minFinalityThreshold directly affects how long attestation takes and the security of the transfer. Developers who pass 0 everywhere may ship integrations with weaker finality guarantees than intended, without realizing it.
Reference
Reference implementation: osr21/arc-stablecoin-dapp — Arc uses minFinalityThreshold = 2000 (see artifacts/arc-dapp/src/pages/crosschain.tsx).
Problem
depositForBurnWithHookaccepts aminFinalityThresholdparameter, but neither the contract NatSpec nor the README documents what values are valid, what they mean, or which value to use for each supported chain. Developers integrating CCTP v2 are left to infer the correct value from sample code or trial and error.What We Found (empirically, Arc Testnet)
While building a CCTP v2 reference app on Arc Testnet we traced through the relay bridge source and Circle sample apps to determine the correct values:
minFinalityThreshold2000Using
0appears permissive (fast finality), but it's unclear whether that's intentional or simply unvalidated by the contract.Suggested Doc Addition
In the README or NatSpec, add a table like:
Plus a per-chain table showing which values each chain supports.
Why This Matters
The
minFinalityThresholddirectly affects how long attestation takes and the security of the transfer. Developers who pass0everywhere may ship integrations with weaker finality guarantees than intended, without realizing it.Reference
Reference implementation: osr21/arc-stablecoin-dapp — Arc uses
minFinalityThreshold = 2000(seeartifacts/arc-dapp/src/pages/crosschain.tsx).