Token Transfers: Canton as Destination
This tutorial demonstrates how to transfer tokens from Ethereum Sepolia to Canton: burn TEST on Sepolia and receive LINK on Canton after manual execution.
Introduction
The prod testnet lane maps Sepolia TEST to Canton LINK. Token delivery on Canton happens only after you:
- Send the token transfer from Sepolia (
any2canton:token). - Wait for source finality and Committee Verifier proofs on the indexer.
- Execute on Canton (
any2canton:manual-exec) โ the SDK processesTokenReceiveTicketand issues aTransferInstructionfor your party to accept.
What You Will Build
In this tutorial, you will:
- Fund your Sepolia wallet with TEST tokens.
- Send
1TEST from Sepolia to your Canton party. - Execute on Canton and verify LINK balance.
Understanding Token Transfers (any2canton)
Key points:
- Burn and mint: TEST is burned on Sepolia; LINK is minted on Canton after execution.
- Manual execution required: Unlike
canton2anydefault auto-exec on Sepolia, allany2cantontoken transfers requireany2canton:manual-execon Canton. - Token pool disclosures: Execution fetches disclosures from Global CCIP EDS and the token pool operator EDS.
See the Canton as Destination flow โ TokenReceiveTicket and token pool release steps.
Running the Tutorial
Prerequisites Check
-
Complete prerequisites.
-
Mint TEST on Sepolia:
Terminalnpm run faucet:evm-test -
Note your Canton LINK balance before the transfer:
Terminalnpm run check-balance -- --chain canton --token link
Step 1: Send TEST from Sepolia
npm run any2canton:token -- --amount 1
Faster finality (32 block confirmations):
npm run any2canton:token -- --amount 1 --finality 32
Expected send output
๐ช Sending 1 TEST from Sepolia โ Canton
Receiver party: yourParty::1220โฆ
LINK is minted on Canton only after manual execution.
๐ CCIP Message ID: 0xโฆ
๐ CCIP Explorer: https://ccip.chain.link/#/side-drawer/msg/0xโฆ
โ๏ธ Execute on Canton once the message is finalized on Sepolia:
npm run any2canton:manual-exec -- 0x<messageId>
Step 2: Execute on Canton
Wait for the requested finality and Committee Verifier proofs on the indexer, then:
npm run any2canton:manual-exec -- <sepoliaTxHash | messageId>
Pass either the Sepolia source transaction hash (๐ Source transaction) or the CCIP Message ID (๐ CCIP Message ID, 0xโฆ) โ any2canton:manual-exec accepts both.
Execution typically takes 1โ3 minutes on the ledger after you run the command.
Verification
Check LINK balance on Canton
npm run check-balance -- --chain canton --token link
Your LINK balance should increase after successful execution and TransferInstruction acceptance.
CCIP Explorer
Confirm the message reached SUCCESS and inspect the Canton execution update in Lighthouse.
Verbose holdings (optional)
npm run check-balance -- --chain canton --token link --show-holdings