> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dfns.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Canton

> Network-specific features, supported assets, and integration requirements for Canton Network wallets and validator workflows on the Dfns platform.

export const SupportLink = ({children}) => {
  const url = "https://support.dfns.co";
  return <a href={url}>{children || url}</a>;
};

export const Youtube = props => {
  return <iframe className="w-full aspect-video rounded-xl" src={`https://www.youtube.com/embed/${props.videoId}`} title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen>
      </iframe>;
};

export const Delete = props => {
  return <code style={{
    paddingLeft: 0,
    paddingTop: 0
  }}>
      <Badge color="red" size="sm">DEL</Badge>
      <span style={{
    marginLeft: '0.5em'
  }}>{props.children}</span>
    </code>;
};

export const Get = props => {
  return <code style={{
    paddingLeft: 0,
    paddingTop: 0
  }}>
      <Badge color="green" size="sm">GET</Badge>
      <span style={{
    marginLeft: '0.5em'
  }}>{props.children}</span>
    </code>;
};

export const Put = props => {
  return <code style={{
    paddingLeft: 0,
    paddingTop: 0
  }}>
      <span class="px-1 py-0.5 rounded-md text-[0.875em] leading-tight bg-yellow-400/20 dark:bg-yellow-400/20 text-yellow-700 dark:text-yellow-400">
        PUT
      </span>
      <span style={{
    marginLeft: '0.5em'
  }}>{props.children}</span>
    </code>;
};

export const Post = props => {
  return <code style={{
    paddingLeft: 0,
    paddingTop: 0
  }}>
      <Badge color="blue" size="sm">POST</Badge>
      <span style={{
    marginLeft: '0.5em'
  }}>{props.children}</span>
    </code>;
};

Dfns supports the Canton network, including self-hosted validators. For more information, you can read our announcement [on our blog](https://www.dfns.co/article/canton-tier-1-support).

<Note>
  The Canton Network is a speciality chain that requires a dedicated activation by Dfns teams.

  Please reach out to our <SupportLink>Support Team</SupportLink> indicating your organization id so we can activate it for you.
</Note>

## 1/ Setup a Canton validator

Dfns offers two options for interacting with the Canton Network:

<AccordionGroup>
  <Accordion title="Option 1: Use Dfns’ shared validator">
    This is the easiest way to start quickly broadcasting transactions with Canton wallets.

    Create a new validator, name it and select kind "Dfns" (or `Shared` with the API) when requested and you are done.

    **Via API:** see details [here](/api-reference/networks/create-canton-validator) for the related endpoint to call.

    **Via the Dashboard:** head to the dashboard: Settings > Developers > Canton validators ([direct link](https://app.dfns.io/settings/canton-validators)) and click ➕ New Validator to access the creation form. Once you are done you will be requested to 🔑 sign the creation with your passkey. Then you are done!

    <Frame>
      <img src="https://mintcdn.com/dfns-6d8c7466/aH8Z4RyoX4Vg4edY/images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FJoXXiNbWWYSe88d2fY50_2FCapture_20d_E2_80_99e_CC_81cran_202025-08-11_20a_CC_80_2017.46.52.png?fit=max&auto=format&n=aH8Z4RyoX4Vg4edY&q=85&s=70c6dc0d32e3aca2c0e36905e4681081" alt="" width="3412" height="1808" data-path="images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FJoXXiNbWWYSe88d2fY50_2FCapture_20d_E2_80_99e_CC_81cran_202025-08-11_20a_CC_80_2017.46.52.png" />
    </Frame>

    Check out the video tutorial on our Youtube Channel:

    <Youtube videoId="B81gJ_ek3z0" />
  </Accordion>

  <Accordion title="Option 2: Connect your own validator (BYOV)">
    If you are running your own validator, then you can connect it to Dfns over API (see details [here](/api-reference/networks/create-canton-validator) ) or via the Dashboard. Once connected, you can create secure wallets linked to your validator. There is no extra setup needed on your validator side.

    <Note>
      You will always earn the rewards associated with the validator in the native wallet on that validator.

      We recommend configuring a automated sweep into a separate Dfns-secured Canton wallet to ensure your coins are safe. See an example configuration [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#configuring-sweeps-and-auto-accepts-of-transfer-offers).
    </Note>

    We need several information to be able to connect to your validator:

    * **The validator URL:** we expect to be able to call the validator External Signing API, for instance `$URL/api/validator/v0/admin/external-party/topology/generate`. See the underlying calls details [here](https://docs.dev.sync.global/app_dev/validator_api/index.html#validator-api-external-signing). The calls will be originating from our IP addresses (see [dfns-environments](/api-reference/regions))
    * **The validator's OAuth2 authentication parameters:** this is how we will authenticate into your validator. You should have setup authentication already (see details [here](https://docs.dev.sync.global/validator_operator/validator_helm.html#helm-validator-auth)), you can reuse the same Application details. For convenience you can find some examples with some common providers on [the API page](/api-reference/networks/create-canton-validator)
      * **Domain:** your OAuth2 tenant domain. Provided by your auth provider.
      * **Token Path:** token endpoint from your authorization provider. We will call this endpoint on your tenant domain (i.e.: `<domain>/<token path>`)
      * **Audience:** the audience your configured on your auth provider. It is suggested to start with  `https://canton.network.global`.
      * **Client ID:** The client id from your auth provider for this application.
      * **Client Secret:** The client secret from your auth provider for this application.
    * **The Ledger API URL:** URL to access the Ledger JSON API. Dfns requires access to the full Ledger JSON API — see the [complete endpoint list](https://github.com/hyperledger-labs/splice/blob/main/canton/community/ledger/ledger-json-api/src/test/resources/json-api-docs/openapi.yaml) for reference. The calls will be originating from our IP addresses (see [Dfns Environments](/api-reference/regions))
    * **The Ledger OAuth2 authentication parameters:** this is how we will authenticate to your ledger API. This will usually use the same parameters as for the validator.&#x20;

    Once you have gathered these information, you can start setting up the custom validator on Dfns.

    **Via API:** see details [here](/api-reference/networks/create-canton-validator) for the related endpoint to call.

    **Via the Dashboard:** head to the dashboard: Settings > Developers > Canton validators ([direct link](https://app.dfns.io/settings/canton-validators)) and click ➕ New Validator to access the creation form. Once you are done you will be requested to 🔑 sign the creation with your passkey, then you are done!

    <Frame>
      <img src="https://mintcdn.com/dfns-6d8c7466/aH8Z4RyoX4Vg4edY/images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FbnFiUAH2CdQUz4n1JkFJ_2FCapture_20d_E2_80_99e_CC_81cran_202025-08-11_20a_CC_80_2018.50.22.png?fit=max&auto=format&n=aH8Z4RyoX4Vg4edY&q=85&s=adb16bca30e3e954008c2b90e2f46195" alt="" width="3412" height="1808" data-path="images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FbnFiUAH2CdQUz4n1JkFJ_2FCapture_20d_E2_80_99e_CC_81cran_202025-08-11_20a_CC_80_2018.50.22.png" />
    </Frame>
  </Accordion>
</AccordionGroup>

<Info>
  Canton validators support a limited number of wallets. You can connect several validators to your Dfns account.
</Info>

## 2/ Setup a Canton Wallet

<Steps>
  <Step title="Create a Canton wallet">
    Create a Canton wallet via the dashboard Wallets page or via the [Create Wallet](/api-reference/wallets/create-wallet) API endpoint.

    At this stage, the wallet has a key but is not yet registered on any validator. The wallet address will not have a prefix and the wallet cannot be used for transactions yet.
  </Step>

  <Step title="Activate the wallet on a validator">
    Activate the wallet by registering it on a validator using the [Activate Wallet](/api-reference/wallets/activate-wallet) endpoint, specifying the `validatorId` of the validator you want to use.

    **Via API:**

    ```bash theme={null}
    POST /wallets/{walletId}/activate
    {
      "validatorId": "cv-xxxxx-xxxxx-xxxxxxxxxxxxxx"
    }
    ```

    **Via the Dashboard:** After creating a Canton wallet, the dashboard will prompt you to select a validator and activate the wallet.

    Once activated, the wallet address will have its full prefix and can be used for transactions.
  </Step>

  <Step title="Pre-approve assets reception (recommended)">
    The Canton network has two ways of receiving funds:

    1. **Transfer offers** — the sender creates an offer, and the recipient explicitly accepts or rejects it via the [Accept Offer](/api-reference/wallets/accept-offer) / [Reject Offer](/api-reference/wallets/reject-offer) endpoints or the Dashboard. See [Managing offers](#managing-offers) below.
    2. **Auto-approved transfers** — pre-approve an asset so incoming transfers of that asset are accepted automatically, with no manual action needed.

    For Canton Coin, we recommend pre-approving the asset so you can receive transfers without having to accept each one individually.

    <Note>
      Unaccepted transfer offers expire after 24 hours. The funds remain locked until the recipient rejects or the sender withdraws the offer.
    </Note>

    Pre-approve receiving assets into your Canton Wallet from the Dashboard Wallet page.

    Click "<Icon icon="circle-check" /> Approve Assets" button on the dashboard, then "<Icon icon="circle-check" /> Approve" for the assets needed.

    <Columns cols={2}>
      <Frame>
        <img src="https://mintcdn.com/dfns-6d8c7466/aH8Z4RyoX4Vg4edY/images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FFBbR5KPuqQbbB5QLwybO_2Fimage.png?fit=max&auto=format&n=aH8Z4RyoX4Vg4edY&q=85&s=b6a2958594b9a0a551e185d4af1441e2" alt="" width="1888" height="2060" data-path="images/spaces_2FtnSPOZGQ2hBmgoVWX5H6_2Fuploads_2FFBbR5KPuqQbbB5QLwybO_2Fimage.png" />
      </Frame>

      <Frame>
        <img src="https://mintcdn.com/dfns-6d8c7466/64_dHRT-DMQca0jy/images/imageapprove.png?fit=max&auto=format&n=64_dHRT-DMQca0jy&q=85&s=9b435b15b1ed5a9ec9e1db5ffd34ec55" alt="" width="1046" height="1246" data-path="images/imageapprove.png" />
      </Frame>
    </Columns>
  </Step>
</Steps>

## Transfers

Use the [Transfer Asset](/api-reference/wallets/transfer-asset) endpoint for Canton transfers:

* **Native Canton Coin**: Use `kind: Native`
* **CIP-56 tokens**: Use `kind: Cip56` with `offer: true` (see below)

### CIP-56 tokens (transfer offers)

CIP-56 tokens (utility tokens on Canton) work differently from most blockchains. **Direct transfers are not supported** for utility tokens - you must create a transfer offer that the recipient accepts.

<Note>
  The only exception is transferring to yourself, which does not require an offer.
</Note>

The recipient must accept the offer via the Dashboard (see "Approve Assets" above) or via the [Accept Offer](/api-reference/wallets/accept-offer) endpoint.

### Managing offers

| Endpoint                                            | Description                               |
| --------------------------------------------------- | ----------------------------------------- |
| [List offers](/api-reference/wallets/list-offers)   | View pending transfer offers for a wallet |
| [Get offer](/api-reference/wallets/get-offer)       | Get details of a specific offer           |
| [Accept offer](/api-reference/wallets/accept-offer) | Accept an incoming transfer offer         |
| [Reject offer](/api-reference/wallets/reject-offer) | Reject an incoming transfer offer         |

### Expired offers

Transfer offers expire after 24 hours by default. However, **expired offers do not automatically transition to Failed** - the funds remain locked until either party takes action to unlock them (recipient rejects, or sender withdraws).

## Canton limitations

| Limitation                 | Value    |
| -------------------------- | -------- |
| Maximum UTXOs per wallet   | 200      |
| Offer expiration (default) | 24 hours |

<Tip>
  Canton wallets do not appear on block explorers until they receive their first transaction.
</Tip>
