# Cross-Chain Token (CCT) — Canton
Source: https://docs.chain.link/ccip/tutorials/canton/cross-chain-tokens
Last Updated: 2026-07-06

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

Connect a Canton instrument to CCIP by deploying a token pool, registering on the Token Admin Registry (TAR), and enabling a cross-chain lane.

> **NOTE: Testnet only**
>
> Starter kit `cct:*` scripts target **Canton testnet** only.

## Choose your guide

| Guide                                                                                                  | When to use                                                              |
| :----------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------- |
| [Registry Issuer Guide](/ccip/tutorials/canton/cross-chain-tokens/registry-issuer-guide)               | Issue a new token via Digital Asset Registry and connect CCIP end to end |
| [BurnMint Token Pool Deployment](/ccip/tutorials/canton/cross-chain-tokens/burn-mint-token-pool)       | Existing CIP-56 instrument with burn/mint authority                      |
| [LockRelease Token Pool Deployment](/ccip/tutorials/canton/cross-chain-tokens/lock-release-token-pool) | Fixed-supply instrument with transfer pre-approvals                      |

## Starter kit (`cct:*` scripts)

The [`ccip-starter-kit-canton`](https://github.com/smartcontractkit/ccip-starter-kit-canton) automates pool deployment and TAR registration on Canton testnet. Each BurnMint and LockRelease guide includes **Starter kit** and **Manual** paths for those steps.

### Setup

1. Clone and install:

   ```bash filename="Terminal"
   git clone https://github.com/smartcontractkit/ccip-starter-kit-canton.git
   cd ccip-starter-kit-canton
   npm install
   ```

2. Configure environment — follow [Canton as Source prerequisites](/ccip/tutorials/canton/source/prerequisites) for `.env`, `canton-config.json`, and Okta JWT access.

3. In `config/canton-config.json`, set **`party`** (pool owner/admin) and **`transferInstructionUrl`** (your validator API) — see [Canton as Source prerequisites](/ccip/tutorials/canton/source/prerequisites#understanding-canton-configuration-canton-configjson).

### Scripts

| Script                  | Command                           | What it does                                                                                                                                                                                  |
| :---------------------- | :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Deploy BurnMint pool    | `npm run cct:deploy-burn-mint`    | Creates a [`BurnMintTokenPool`](https://github.com/smartcontractkit/chainlink-canton/blob/main/contracts/ccip/pools/burn-mint-token-pool/daml/CCIP/BurnMintTokenPool.daml) on-ledger          |
| Deploy LockRelease pool | `npm run cct:deploy-lock-release` | Creates a [`LockReleaseTokenPool`](https://github.com/smartcontractkit/chainlink-canton/blob/main/contracts/ccip/pools/lock-release-token-pool/daml/CCIP/LockReleaseTokenPool.daml) on-ledger |
| Register on TAR         | `npm run cct:set-token`           | Runs `ProposeAdministrator` → `AcceptAdminRole` → `SetPool` on the Token Admin Registry                                                                                                       |

### Typical flow (BurnMint)

```bash filename="Terminal"
# 1. Deploy pool
npm run cct:deploy-burn-mint -- \
  --instanceId acme-eur-bm-pool \
  --instrument 'yourParty::1220…::token-id'

# 2. Register on TAR (poolOwner defaults to party in canton-config.json)
npm run cct:set-token -- \
  --instrument 'yourParty::1220…::token-id' \
  --poolInstanceId acme-eur-bm-pool

# 3. Enable lane — manual Ledger API (see guide Step 3)
```

> **NOTE: Script scope**
>
> Starter kit scripts cover **pool creation** and **TAR registration** only. You still configure **rate limiters**, **`ApplyChainUpdates`**, **LockRelease liquidity and pre-approval**, **EDS**, and **lane validation** manually — each guide documents those steps.

## On-ledger checklist (all guides)

Every CCT deployment ends with the same verification path:

1. Pool deployed at `{instanceId}@{poolOwner}` with the correct `InstrumentId`.
2. TAR maps the instrument to your pool; your party is token admin.
3. Lane enabled — three rate limiters plus `ApplyChainUpdates` on the pool.
4. [Explicit Disclosure Service](/ccip/concepts/canton/explicit-disclosure) running for your pool operator.
5. Test transfers — see [CCIP on Canton — Overview](/ccip/concepts/canton/overview) and [CCIP Explorer](/ccip/tools-resources/ccip-explorer).

Cross-chain send and receive are validated by Chainlink operations once your token is registered and lanes are configured.

> **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.