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:
TokenMessengerV2 (burn + send) and TokenMinterV2 (receive + mint).TokenMessengerMinterV2.This mirrors how other non-EVM deployments (for example, Solana) combine messenger/minter logic while preserving behavior with the EVM equivalents.
| Contract | Domain | Address |
|---|---|---|
| TokenMessengerMinterV2 | 25 | 0x07d421B9cA8aA32DF259965cDA8ACb93F7599F69209A41872AE84638B2A20F2a |
| MessageTransmitterV2 | 25 | 0x02EBB5777B6dD8B26ea11D68Fdf1D2c85cD2099335328Be845a28c77A8AEf183 |
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.
| 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. |
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 relayer 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. |