Skip to main content
Dfns supports the Canton network, including self-hosted validators. For more information, you can read our announcement on our blog.
The Canton Network is a speciality chain that requires a dedicated activation by Dfns teams.Please raise a support request indicating your organization id so we can activate it for you.

1/ Setup a Canton validator

Dfns offers two options for interacting with the Canton Network:
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 for the related endpoint to call.Via the Dashboard: head to the dashboard: Settings > Developers > Canton validators (direct link) 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!
Check out the video tutorial on our Youtube Channel:
If you are running your own validator, then you can connect it to Dfns over API (see details here ) 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.
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.
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. The calls will be originating from our IP addresses (see dfns-environments)
  • The validator’s OAuth2 authentication parameters: this is how we will authenticate into your validator. You should have setup authentication already (see details here), you can reuse the same Application details. For convenience you can find some examples with some common providers on the API page
    • 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 and call endpoints such as /v2/state/ledger-end, /v2/state/active-contracts, /v2/parties/participant-id, /v2/interactive-submission/prepare, /v2/interactive-submission/execute, /v2/commands/completions. See the underlying details here. The calls will be originating from our IP addresses (see Dfns Environments)
  • 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.
Once you have gathered these information, you can start setting up the custom validator on Dfns.Via API: see details here for the related endpoint to call.Via the Dashboard: head to the dashboard: Settings > Developers > Canton validators (direct link) 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!
Canton validators support a limited number of wallets. You can connect several validators to your Dfns account.

2/ Setup a Canton Wallet

1

Create a Canton Wallet

Once setup using the shared or your own validator, you can create wallets via the dashboard Wallets page or via the Wallets API. You will be requested to select the validator you want to leverage.Should you need help to create a wallet, you can watch the video above, or follow the tutorial: using-the-dashboard-create-your-first-wallet or use our dedicated API doc: create-wallet
2

Pre-approve assets reception

The Canton networks has two ways of transferring funds: offers that need to be explicitly accepted, or automated transfers.Dfns does not yet support responding to transfer offers (it’s coming soon!).You need to pre-approve receiving Canton Coins to make it automated before issuing a transfer to your wallet. After that receiving Canton Coins will automatically be accepted.Note: if you sent an offer before approving assets, then it will automatically expire within 24hrs.
Pre-approve receiving assets into your Canton Wallet from the Dashboard Wallet page.Click ” Approve Assets” button on the dashboard, then ” Approve” for the assets needed.

Transfers

Use the 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.
The only exception is transferring to yourself, which does not require an offer.
The recipient must accept the offer via the Dashboard (see “Approve Assets” above) or via the Accept Offer endpoint.

Managing offers

EndpointDescription
List offersView pending transfer offers for a wallet
Get offerGet details of a specific offer
Accept offerAccept an incoming transfer offer
Reject offerReject 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

LimitationValue
Maximum UTXOs per wallet200
Wallets per validatorLimited (contact support for details)
Offer expiration (default)24 hours
Canton wallets do not appear on block explorers until they receive their first transaction.