Official repository for Aptos smart contracts used by the Cross-Chain Transfer Protocol.
This repository contains both CCTP V1 and CCTP V2 implementations.
| Package | Description |
|---|---|
message_transmitter |
Generic message passing (send / receive messages). |
token_messenger_minter |
Burns and mints tokens for cross-chain transfers. |
CCTP V2 introduces a multi-token handler architecture, fees, denylisting, and a hot potato receipt flow. It is split into four packages:
| Package | Description |
|---|---|
message_transmitter_v2 |
Generic V2 message passing with destination_caller and min_finality_threshold support. |
token_messenger_minter_v2 |
Token-agnostic burn/mint orchestration with fee control, denylisting, and a handler registry. |
stablecoin_handler |
Token-specific mint/burn logic for stablecoins (USDC, EURC, ...). Hosts the V2 Move scripts. |
cctp_extensions |
Shared V2 extensions (e.g. rescuable). |
Before you can start working with the contracts in this repository, make sure you have the following prerequisites installed:
- Run
make setupto install required dependencies (Aptos CLI, import Git submodules). - IntelliJ is recommended for developing Move contracts. Install the Move Intellij IDE Plugin.
V2 note: V2 packages require the
stablecoin-aptossubmodule to resolveAptosFrameworkto the same revision the V2 packages pin. Untilcirclefin/stablecoin-aptospublishes a V2-compatible release, runmake setup-v2instead ofmake setupfor V2 work. It runsmake setupand then appliespatches/stablecoin-aptos-v2.patchto the submodule../docker-start-containers.sh v2does this automatically.
# V1 (starts Aptos localnet + EVM contracts)
./docker-start-containers.sh
# V2 (starts Aptos localnet only)
./docker-start-containers.sh v2# All packages (V1 + V2)
make test
# V1 packages only
make test-v1
# V2 packages only
make test-v2# Install dependencies
yarn install# V1 e2e tests
yarn test:e2e
# V2 e2e tests
yarn test:e2e-v2- Rename
.env.exampleto.envand fill in the required environment variables.
# Base/EVM -> Aptos
yarn receive-message-example
# Aptos -> Base/EVM
yarn deposit-for-burn-example# Base/EVM -> Aptos
yarn receive-message-v2-example
# Base/EVM -> Aptos (fast transfer)
yarn receive-message-v2-fast-example
# Aptos -> Base/EVM
yarn deposit-for-burn-v2-example
# Aptos -> Base/EVM with hook data
yarn deposit-for-burn-with-hook-v2-exampleSee typescript/example/v2/README.md for more details on the V2 examples.
- Create a deployer keypair and fund it with APT.
- Deploy the
MessageTransmitterandTokenMessengerMinterpackages.
yarn deploy --privateKey=<key> --rpc=<rpcUrl> --aptosExtensionsPackageId=<packageId> --stablecoinPackageId=<packageId>- Verify source bytecode.
# Message Transmitter
yarn verify-pkg --packageName=message_transmitter --rpc=<rpcUrl> --packageId=<MessageTransmitterPackageId> --namedDeps aptos_extensions=<packageId>,deployer=<deployerAccountAddress>
# TokenMessengerMinter
yarn verify-pkg --packageName=token_messenger_minter --rpc=<rpcUrl> --packageId=<TokenMessengerMinterPackageId> --namedDeps aptos_extensions=<packageId>,deployer=<deployerAccountAddress>,message_transmitter=<packageId>,stablecoin=<packageId>- Create a deployer keypair and fund it with APT.
- Calculate the deployment addresses for the V2 packages.
yarn calculate-deployment-addresses-v2 --deployer=<deployerAddress>- Deploy the
MessageTransmitterV2,TokenMessengerMinterV2,CctpExtensions, andStablecoinHandlerpackages.
yarn deploy-v2 --privateKey=<key> --rpc=<rpcUrl> --aptosExtensionsPackageId=<packageId> --stablecoinPackageId=<packageId>- Verify source bytecode for all V2 packages.
yarn verify-all-v2-pkgs \
--deployer=<deployerAddress> \
--rpc=<rpcUrl> \
--aptosExtensionsPackageId=<packageId> \
--stablecoinPackageId=<packageId> \
--cctpExtensionsPackageId=<packageId> \
--messageTransmitterV2PackageId=<packageId> \
--tokenMessengerMinterV2PackageId=<packageId> \
--stablecoinHandlerPackageId=<packageId>- Build payload for publishing.
# Message Transmitter
aptos move build-publish-payload --package-dir packages/message_transmitter --named-addresses deployer=<deployerAccountAddress>,aptos_extensions=<packageId>,message_transmitter=<packageId> --json-output-file upgrade.json
# Token Messenger Minter
aptos move build-publish-payload --package-dir packages/token_messenger_minter --named-addresses deployer=<deployerAccountAddress>,aptos_extensions=<packageId>,message_transmitter=<packageId>,stablecoin=<packageId>,token_messenger_minter=<packageId> --json-output-file upgrade.json- Execute the transaction for upgrading.
yarn upgrade-pkg --privateKey=<upgradeAdminKey> --rpc=<rpcUrl> --payloadFilePath=upgrade.json --aptosExtensionsPackageId=<packageId> --packageId=<packageId>This project is licensed under the Apache-2.0 license.