CCTP

CCTP Starknet Contracts and Interfaces

Contracts for CCTP V2 support on the Starknet blockchain

Starknet CCTP contracts are written in Cairo and run on a non-EVM zk-rollup. 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/receives attested messages and delivers them to TokenMessengerMinterV2.

This mirrors how other non-EVM deployments (for example, Solana) combine messenger/minter logic while preserving behavior with the EVM equivalents.

  • TokenMessengerMinterV2: initiates crosschain burns and mints tokens upon attested message receipt.
  • MessageTransmitterV2: emits messages, verifies attestations, and routes verified messages to the recipient contract.

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.

FunctionDescriptionNotes
deposit_for_burnBurns USDC and emits a crosschain message for minting on another domain.Standard CCTP transfer initiation.
deposit_for_burn_with_hookSame as deposit_for_burn, but attaches custom metadata (hook_data).Used for programmable transfers.
handle_receive_finalized_messageMints USDC upon receiving a fully finalized message.Called by MessageTransmitterV2.
handle_receive_unfinalized_messageProcesses partially finalized (“Fast Burn”) messages.Enables faster crosschain transfers.
message_body_versionReturns supported message format version.Used for compatibility checks.
local_message_transmitterReturns the linked MessageTransmitterV2 address.Must match configured domain transmitter.

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.

FunctionDescriptionNotes
send_messageSends a crosschain message with specified domain, recipient, and message body.Core function for outgoing CCTP messages.
receive_messageValidates a message and its attestation; delivers message body to the recipient.Called by an offchain relayer with an attestation from Circle to complete the transfer.
get_max_message_body_sizeReturns the maximum allowed message size.Used by offchain components for validation.
is_nonce_usedChecks if a message nonce has been processed already.Prevents message replay.
get_local_domainReturns this contract's domain ID.Expected to be 25 for Starknet.
get_versionReturns protocol version supported by this transmitter.Used by Iris attestation service.
Did this page help you?
© 2023-2025 Circle Technology Services, LLC. All rights reserved.