# CCIP Tutorials: Canton as Source
Source: https://docs.chain.link/ccip/canton/tutorials/source
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 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/canton/tutorials/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/canton/tutorials/source/prerequisites) — Clone the starter kit, configure Canton ledger access, and fund Amulet/LINK.
- [Canton as Source flow](/ccip/canton/concepts/overview#canton--public-chain) — On-ledger send path in the overview.

## Tutorials by Use Case

| Tutorial                                                                                   | Script                      | Description                                   |
| :----------------------------------------------------------------------------------------- | :-------------------------- | :-------------------------------------------- |
| [Arbitrary Messaging](/ccip/canton/tutorials/source/arbitrary-messaging)                   | `canton2any:data`           | Send a data-only message from Canton          |
| [Token Transfers](/ccip/canton/tutorials/source/token-transfers)                           | `canton2any:token`          | Bridge LINK from Canton to Sepolia            |
| [Programmable Token Transfers](/ccip/canton/tutorials/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/canton/tutorials/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/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.