Skip to content

docs: TokenMessengerV2.depositForBurnWithHook — minFinalityThreshold values are undocumented per chain, leaving developers to guess #111

Description

@osr21

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions