# CCIP Tutorials: Canton as Destination
Source: https://docs.chain.link/ccip/canton/tutorials/destination
Last Updated: 2026-07-06

> For the complete documentation index, see [llms.txt](/llms.txt).

> **CAUTION**
>
> Addresses shown may change due to upgrades since Canton contracts are immutable. Confirm party IDs and contract addresses with [Chainlink CCIP](https://chain.link/ccip-contact).

**Canton as Destination** (`any2canton`) tutorials cover receiving on Canton — Ethereum Sepolia is the source in the starter kit, Canton is the destination.

> **CAUTION: You must manually execute on Canton**
>
> Every tutorial in this section ends with **`any2canton:manual-exec`**. See [Manual Execution (Canton)](/ccip/canton/concepts/manual-execution).

> **NOTE: Testnet only**
>
> These tutorials run on **Canton testnet** and **Ethereum Sepolia** only. Complete [prerequisites](/ccip/canton/tutorials/destination/prerequisites) with testnet credentials and tokens before starting.

Tutorials use the [`ccip-starter-kit-canton`](https://github.com/smartcontractkit/ccip-starter-kit-canton) on [`@chainlink/ccip-sdk`](https://www.npmjs.com/package/@chainlink/ccip-sdk).

## Getting Started

- [Prerequisites for Canton as Destination](/ccip/canton/tutorials/destination/prerequisites) — Clone the starter kit, configure Sepolia and Canton access, and fund TEST/ETH.
- [Canton as Destination flow](/ccip/canton/concepts/overview#public-chain--canton) — Execute path in the overview.

## Tutorials by Use Case

| Tutorial                                                                                        | Scripts                                     | Description                                  |
| :---------------------------------------------------------------------------------------------- | :------------------------------------------ | :------------------------------------------- |
| [Arbitrary Messaging](/ccip/canton/tutorials/destination/arbitrary-messaging)                   | `any2canton:data` + `manual-exec`           | Execute an incoming data message on Canton   |
| [Token Transfers](/ccip/canton/tutorials/destination/token-transfers)                           | `any2canton:token` + `manual-exec`          | Execute an incoming token transfer on Canton |
| [Programmable Token Transfers](/ccip/canton/tutorials/destination/programmable-token-transfers) | `any2canton:data-and-token` + `manual-exec` | Execute an incoming PTT on Canton            |

## Common Flow (all any2canton tutorials)

1. Send from Sepolia with an `any2canton:*` script
2. Poll message status via the CCIP API or [CCIP Explorer](/ccip/tools-resources/ccip-explorer)
3. Run `any2canton:manual-exec` — the SDK **finds or creates** a compatible `CCIPReceiver` for message finality
4. Fetch proofs from the indexer and disclosures from Global CCIP EDS (+ token pool operator EDS for token messages)
5. For token messages: accept the `TransferInstruction` to receive LINK on-ledger

> **TIP**
>
> No separate receiver deployment tutorial is needed for the default path. Pass a `receiver` hint only for custom `CCIPReceiver` configurations.

## Prerequisites

- [Starter kit setup](/ccip/canton/tutorials/destination/prerequisites)
- Funded Sepolia account with ETH (or LINK for fees) and TEST for token tutorials
- Canton ledger access for manual execution
- Token pool registered for the instrument — see [CCT guides](/ccip/canton/tutorials/cross-chain-tokens)

> **CAUTION: Educational Example Disclaimer**
>
> Please note, this page contains community examples only — these are not Chainlink products or services and are not
> supported or maintained by Chainlink. This code represents an example of using a Chainlink product or service, and is
> intended for demonstration and educational purposes only. It is provided "AS IS" and "AS AVAILABLE" without warranties
> of any kind, may not have been audited, and may omit checks or error handling. Each party intending to use this
> example code does so entirely at their own risk and must perform its own audits, security and code review, key
> management, and testing before any production deployment and ensure the operation and performance of such code matches
> expectations. Neither Chainlink Labs nor the Chainlink Foundation deploys, operates, monitors, maintains or endorses
> any deployment of this code. Note that this is not a Chainlink product, feature or service, and there are no
> commitments made with respect to the code, including compatibility with future Chainlink releases. You should not rely
> on this code without first conducting your own technical, engineering, and security review. This code is also outside
> the scope of any Chainlink bug bounty programs. Neither Chainlink Labs, the Chainlink Foundation, nor Chainlink node
> operators are responsible for outcomes due to errors in this example or how it is deployed or operated, or liable for
> any resulting claims or damages. Use of the Chainlink Network is subject to the Chainlink Foundation [Terms of
> Service](https://chain.link/terms), which provides important information and disclosures. By using this code, you
> acknowledge and agree to these terms.