TokenMessengerMinterV2, MessageTransmitterV2, StablecoinHandler, and
CctpExtensions. Because Move uses static dispatch, contracts cannot call each
other dynamically at runtime. Instead, these functions return receipt structs
(BurnReceipt and MintReceipt) that act as hot potatoes: they have no
abilities (they cannot be dropped, copied, or stored) and must be consumed in
the same transaction. The Move compiler enforces this at compile time, not at
runtime, so a transaction that fails to consume a receipt will not compile.
For working end-to-end examples, see
Transfer USDC between Aptos and Arc.
Package addresses
Package IDs identify deployed modules. Use them in
use declarations and
transaction payloads. Object IDs identify onchain state objects (such as
configuration or shared resources) and are passed as function arguments when a
transaction interacts with protocol state.Testnet
Package IDs
Object IDs
Mainnet
Package IDs
Object IDs
CCTP interface
TokenMessengerMinterV2: initiates crosschain USDC burns and prepares mints upon attested message receipt.MessageTransmitterV2: provides the core messaging layer, verifying attestations and routing messages to the appropriate handler.StablecoinHandler: executes the actual burn and mint of USDC, consuming the receipt structs returned byTokenMessengerMinterV2.CctpExtensions: provides protocol extension hooks for advanced integrations.
TokenMessengerMinterV2 interface
TokenMessengerMinterV2 manages the USDC burn and mint lifecycle. Its functions
return receipt structs (BurnReceipt and MintReceipt) that must be passed to
the StablecoinHandler in the same transaction.
MessageTransmitterV2 interface
MessageTransmitterV2 provides the messaging layer for CCTP on Aptos. It
verifies attestations, marks nonces as used, and returns a Receipt hot potato
that the caller must consume in the same transaction.
StablecoinHandler interface
StablecoinHandler is the entry point for executing USDC burns and mints on
Aptos. Its functions consume the receipt structs produced by
TokenMessengerMinterV2 and call the appropriate completion functions
internally.
CctpExtensions interface
CctpExtensions provides protocol extension hooks for advanced integrations.
Function-level documentation is not yet available here. Refer to the
aptos-cctp GitHub repository for the
current interface definitions.
Move scripts
Precompiled scripts for
deposit_for_burn, deposit_for_burn_with_hook, and
receive_message are available in
typescript/example/precompiled-move-scripts/
in the aptos-cctp repository. The v2/ subdirectory contains scripts for both
testnet and mainnet. You can also compile them from source; see the
Aptos documentation on compiling scripts.Examples
Send USDC from Aptos (outbound)
The outbound flow uses a Move script that withdraws the fungible asset, callsdeposit_for_burn to create a BurnReceipt, then passes both to
stablecoin_handler::burn to complete the transfer.
Send USDC from Aptos with hook data (outbound)
For transfers that include hook data (for example, to trigger a post-mint action on the destination blockchain):Receive USDC on Aptos (inbound)
The inbound flow verifies the attestation, creates aReceipt, exchanges it for
a MintReceipt using prepare_mint, then passes the MintReceipt to
stablecoin_handler::mint to deposit USDC to the recipient.