Canton Integration
Integrate cross-chain swaps from Canton to EVM chains using Squid. Canton support is powered by Squid Intents — Squid's intent-based execution protocol for fast, solver-driven cross-chain settlement.
Squid Intents must be enabled on your integrator ID. Reach out to the Squid team to request Squid Intents access before integrating with Canton.
Canton Parameters
Chain ID
canton
Supported Tokens
Canton Coin (CC) — native asset
DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc
Canon Coin (CC) is the native asset on Canton. Additional tokens are supported — query the Supported Tokens endpoint with chainId=canton to get the full list of available tokens.
Token addresses on Canton follow the format
admin::fingerprintfor the native Canton Coin, orinstrumentId::admin::fingerprintfor CIP-056 tokens (e.g.,USDCx::decentralized-usdc-admin::12208...).
Key Concepts
Transaction Type: DEPOSIT_ADDRESS_DIRECT_TRANSFER
DEPOSIT_ADDRESS_DIRECT_TRANSFERCanton routes use the DEPOSIT_ADDRESS_DIRECT_TRANSFER transaction type. Unlike standard EVM routes, this type:
Does not require ERC-20 approval — Canton is not EVM-compatible
Returns a deposit address — the route response includes a
targetfield containing the deposit address for fundsUses the order hash as a memo — the
datafield in the transaction request contains the order hash, which must be included as a transfer memo when sending funds
Canton transactions can be executed in two ways:
Connected wallet (browser): Using a CIP-103-compatible Canton wallet, the transfer is built using the Splice token-standard
TransferFactoryand submitted viaprepareExecuteAndWaitDeposit address: Send funds directly to the deposit address with the order hash as a memo from any Canton wallet
Why can't Canton swaps be fully automated from a script?
Unlike EVM chains where a private key can be imported to sign transactions programmatically, Canton wallets use the CIP-103 protocol — a browser-based wallet discovery and signing standard. Wallet keys are managed entirely within browser extensions (Send, C8, Nightly) and communicate via
window.postMessage. There is no exportable private key or Node.js-compatible signing SDK for Canton.The API and SDK examples handle everything that can be done programmatically: requesting a route, displaying deposit details, and polling transaction status. The only manual step is sending funds to the deposit address from your Canton wallet with the order hash as the memo.
For fully automated execution in a browser environment, use the Squid Widget, which connects to Canton wallets via CIP-103.
Canton Address Format
Canton addresses use the format name::fingerprint, where name is an identifier and fingerprint is a 1220-prefixed SHA-256 hash (68 hex characters total). Example: DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc
Token Pre-Approval (EVM → Canton)
Canton uses the CIP-56 token standard, which follows an offer-and-acceptance model for token transfers. Unlike EVM's push-only model (where tokens are sent directly to a recipient), Canton requires recipients to explicitly agree to receive a token before it can be credited to their wallet.
To streamline this, Canton supports TransferPreapproval — a smart contract that pre-authorizes incoming transfers for a specific token. Without a preapproval in place, incoming tokens arrive as a pending "transfer offer" that the recipient must manually accept in their wallet.
How this affects integrations:
Squid Widget: The widget handles
TransferPreapprovalchecks automatically. If a user's Canton wallet does not have a preapproval for the receiving token, the widget will prompt them to set one up before executing the swap.API / SDK: The
TransferPreapprovalis not exposed as an API endpoint. When building EVM → Canton swaps via the API or SDK, the route is a standard EVM transaction (DEPOSIT_ADDRESS_CALLDATA). The Canton-side token delivery is handled by Squid's backend. However, the user's Canton wallet must have aTransferPreapprovalfor the destination token, or they will need to manually accept the transfer offer in their wallet.
API Integration
Canton → EVM Swap
The following example demonstrates a full Canton-to-EVM swap using the Squid API directly. It sends Canton Coin (CC) to USDC on Base using the deposit-address pattern.
API Code Examples
Canton → EVM
SDK Integration
The Squid SDK provides the same Canton routing capabilities. After initializing the SDK, use squid.getRoute() with the same parameters, then execute the transaction natively on the Canton network.
Note: Because Canton is not EVM-compatible,
squid.executeRoute()cannot be used directly. Canton transactions must be executed natively — either through a connected Canton wallet or by sending funds to the deposit address.
SDK Code Examples
Canton → EVM
Transaction Handling
Deposit Address Flow
The Squid route response for Canton returns a transactionRequest with:
target
The deposit address — send funds here
data
The order hash — include this as the transfer memo
type
DEPOSIT_ADDRESS_DIRECT_TRANSFER
Connected Wallet Flow (Widget)
For browser-based integrations using the Squid Widget, Canton swaps are executed through the connected Canton wallet:
The route's order hash is used as the transfer memo
A Splice token-standard transfer is built via the
TransferFactoryThe transfer is submitted through the wallet's
prepareExecuteAndWaitmethodThe memo field key is
splice.lfdecentralizedtrust.org/reason
For widget integration, Canton wallet connection and transaction execution are handled automatically. See the Widget Integration guide.
Status Tracking
Canton routes are powered by Squid Intents, which requires the quoteId for status polling.
Extracting the quoteId
The quoteId may appear in several locations within the route response. Use a fallback chain to extract it reliably:
Important: A Squid Intents transaction will not be tracked correctly unless status is polled with the
quoteId. See the Integrating Squid Intents guide for full status polling details.
Important Notes
Canton is not EVM-compatible — Canton uses Daml smart contracts, not Solidity. Standard EVM tooling (
ethers.js, MetaMask) does not work with Canton. Use a CIP-103-compatible Canton wallet for browser interactions.Deposit address with memo — Canton routes return a deposit address and order hash. The order hash must be included as the transfer memo when sending funds. Omitting the memo will cause the swap to fail.
Balances are private — Canton balances can only be read through a connected wallet's ledger API. Address-only balance lookups are not supported.
Canton wallet required — Compatible browser wallets include Cantor8 (C8), Send Wallet, and Nightly. Wallets connect via the CIP-103 discovery protocol.
quoteIdis required for status polling — All Squid Intents transactions require thequoteIdparameter when calling the/v2/statusendpoint.
For a full reference of all transaction types across all chains, see the Transaction Types page.
Last updated