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

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

**Canton as Source** (`canton2any`) tutorials cover sending from Canton — Canton is the source chain, a remote CCIP-supported chain (Ethereum Sepolia in the starter kit) is the destination.

> **NOTE: Testnet only**
>
> These tutorials run on **Canton testnet** and **Ethereum Sepolia** only. Complete [prerequisites](/ccip/tutorials/canton/source/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 Source](/ccip/tutorials/canton/source/prerequisites) — Clone the starter kit, configure Canton ledger access, Okta JWT, and fund Amulet/LINK.
- [Canton as Source flow](/ccip/concepts/canton/overview#canton--public-chain) — On-ledger send path in the overview.

## Tutorials by Use Case

| Tutorial                                                                                   | Script                      | Description                                   |
| :----------------------------------------------------------------------------------------- | :-------------------------- | :-------------------------------------------- |
| [Arbitrary Messaging](/ccip/tutorials/canton/source/arbitrary-messaging)                   | `canton2any:data`           | Send a data-only message from Canton          |
| [Token Transfers](/ccip/tutorials/canton/source/token-transfers)                           | `canton2any:token`          | Bridge LINK from Canton to Sepolia            |
| [Programmable Token Transfers](/ccip/tutorials/canton/source/programmable-token-transfers) | `canton2any:data-and-token` | Send LINK plus calldata to a Sepolia receiver |

## Common Flow (all canton2any tutorials)

1. Fetch explicit disclosures from Global CCIP EDS (and token pool operator EDS for token messages)
2. Create or reuse `CCIPSender` and `PerPartyRouter` on Canton
3. Submit via `PerPartyRouter_CCIPSend` with CommitteeVerifier tickets (and token pool tickets when applicable)
4. Track delivery in [CCIP Explorer](/ccip/tools-resources/ccip-explorer)
5. Destination execution on Sepolia runs automatically by default, or via `canton2any:manual-exec` with `--no-exec`

## Prerequisites

- [Starter kit setup](/ccip/tutorials/canton/source/prerequisites)
- **Amulet** (default) or **LINK** on Canton for CCIP fees
- **LINK** on Canton for token transfer and PTT tutorials
- Token pool registered on TAR for token messages — see [CCT guides](/ccip/tutorials/canton/cross-chain-tokens)

> **CAUTION: Educational Example Disclaimer**
>
> This page includes an educational example to use a Chainlink system, product, or service and is provided to
> demonstrate how to interact with Chainlink's systems, products, and services to integrate them into your own. This
> template is provided "AS IS" and "AS AVAILABLE" without warranties of any kind, it has not been audited, and it may be
> missing key checks or error handling to make the usage of the system, product or service more clear. Do not use the
> code in this example in a production environment without completing your own audits and application of best practices.
> Neither Chainlink Labs, the Chainlink Foundation, nor Chainlink node operators are responsible for unintended outputs
> that are generated due to errors in code.