Documentation Index
Fetch the complete documentation index at: https://developers.circle.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Starknet CCTP contracts are written in Cairo and run on a non-EVM zk-rollup.
Transactions executed on Starknet are batched and proven using STARK proofs,
which are then posted to Ethereum L1. This design allows Starknet to inherit
Ethereum’s security while offering higher throughput and lower fees.
To align with Starknet’s architecture while keeping parity with EVM chains, CCTP
uses two contracts:
TokenMessengerMinterV2: consolidates the responsibilities of
TokenMessengerV2 (burn + send) and TokenMinterV2 (receive + mint).
MessageTransmitterV2: provides the messaging layer that emits or receives
attested messages and delivers them to TokenMessengerMinterV2.
This mirrors how other non-EVM deployments (for example, Solana) combine
messenger and minter logic while preserving behavior with the EVM equivalents.
Mainnet contract addresses
Testnet contract addresses
CCTP interface
TokenMessengerMinterV2: initiates crosschain burns and mints tokens upon
attested message receipt.
MessageTransmitterV2: emits messages, verifies attestations, and routes
verified messages to the recipient contract.
TokenMessengerMinterV2 interface
The TokenMessengerMinterV2 contract consolidates the roles of both
TokenMessengerV2 and TokenMinterV2 found on EVM chains. It handles USDC
burns, message emission, and token minting once crosschain messages are attested
by Circle’s Iris service.
| Function | Description | Notes |
|---|
deposit_for_burn | Burns USDC and emits a crosschain message for minting on another domain. | Standard CCTP transfer initiation. |
deposit_for_burn_with_hook | Same as deposit_for_burn, but attaches custom metadata (hook_data). | Used for programmable transfers. |
handle_receive_finalized_message | Mints USDC upon receiving a fully finalized message. | Called by MessageTransmitterV2. |
handle_receive_unfinalized_message | Processes partially finalized (“Fast Burn”) messages. | Enables faster crosschain transfers. |
message_body_version | Returns supported message format version. | Used for compatibility checks. |
local_message_transmitter | Returns the linked MessageTransmitterV2 address. | Must match configured domain transmitter. |
MessageTransmitterV2 interface
The MessageTransmitterV2 contract provides the core messaging layer for CCTP
on Starknet. It is responsible for emitting, receiving, and validating
crosschain messages, enforcing attestation rules, and ensuring message
uniqueness.
| Function | Description | Notes |
|---|
send_message | Sends a crosschain message with specified domain, recipient, and message body. | Core function for outgoing CCTP messages. |
receive_message | Validates a message and its attestation; delivers message body to the recipient. | Called by an offchain forwarding service with an attestation from Circle to complete the transfer. |
get_max_message_body_size | Returns the maximum allowed message size. | Used by offchain components for validation. |
is_nonce_used | Checks if a message nonce has been processed already. | Prevents message replay. |
get_local_domain | Returns this contract’s domain ID. | Expected to be 25 for Starknet. |
get_version | Returns protocol version supported by this transmitter. | Used by Iris attestation service. |