Cross-Chain Token (CCT) — Canton

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

Choose your guide

GuideWhen to use
Registry Issuer GuideIssue a new token via Digital Asset Registry and connect CCIP end to end
BurnMint Token Pool DeploymentExisting CIP-56 instrument with burn/mint authority
LockRelease Token Pool DeploymentFixed-supply instrument with transfer pre-approvals

Starter kit (cct:* scripts)

The 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:

    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 for .env, canton-config.json, and ledger auth.

  3. In config/canton-config.json, set party (pool owner/admin) and transferInstructionUrl (your validator API) — see Canton as Source prerequisites.

Scripts

ScriptCommandWhat it does
Deploy BurnMint poolnpm run cct:deploy-burn-mintCreates a BurnMintTokenPool on-ledger
Deploy LockRelease poolnpm run cct:deploy-lock-releaseCreates a LockReleaseTokenPool on-ledger
Register on TARnpm run cct:set-tokenRuns ProposeAdministratorAcceptAdminRoleSetPool on the Token Admin Registry

Typical flow (BurnMint)

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)

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 running for your pool operator.
  5. Test transfers — see CCIP on Canton — Overview and CCIP Explorer.

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

Prerequisites (all CCT guides)

  • Starter kit setup for cct:* scripts (.env, canton-config.json, ledger auth)
  • CCIP DAR packages on your participant (contracts/dars/v2_0_0)
  • CCIP contract references from Chainlink ops (owner party, TAR, RMNRemote, FeeQuoter) — EDS and indexer URLs are pre-filled in the starter kit
  • A validator user with can_act_as rights for your ledger parties
  • Understanding of token pools and explicit disclosure

What's next

Get the latest Chainlink content straight to your inbox.