Skip to main content

Documentation Index

Fetch the complete documentation index at: https://cantonfoundation-issue-365-details-history.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

The Splice Wallet is built into every validator node. It provides payment APIs for applications to build upon (“pay with CC”), a UI for managing Canton Coin (CC) holdings and reward collection, and support for peer-to-peer transfers between parties.

What the wallet provides

  • Payment APIs — Applications can integrate CC payments through the wallet’s API layer
  • CC management — View balances, collect minted rewards, and merge coin contracts
  • Peer-to-peer transfers — Send CC to other parties on the network
  • Reward collection — Background automation mints activity records into CC each round
  • Minting delegations — Manage delegated minting for external parties through the Delegations tab

Transfer types

The Splice Wallet UI supports three types of manual CC transfers:

Legacy transfer (Amulet transfer)

A two-step transfer where the receiver must accept the transfer offer, then automation on the sender’s side completes it. The sender is assigned to the ValidatorRewardCoupon user field. These transfers are never featured. Since CIP-0078 was implemented, no fees are charged and no activity records are created.

CN token standard transfer (two-step)

A two-step, CN-token-standard-based transfer offer first locks the desired CC amount; on acceptance, it is unlocked and the transfer is completed. This does not rely on automation and works well for external parties. The two steps appear in the wallet:
  1. The first step locks the CC as part of creating the transfer offer.
  2. When the receiver accepts the transfer, the CC is unlocked and the amount is transferred to the receiver.
Since CIP-0078, these steps neither charge fees nor generate activity records.

One-step transfer (via TransferPreapproval)

A direct transfer to a receiver that has set up a TransferPreapproval contract. No acceptance step is required from the receiver. The wallet UI automatically defaults to this method when the receiver has a preapproval in place. The transfer is featured if the provider party on the TransferPreapproval is a featured application provider. When featured, an AppRewardCoupon is created for the provider. No fees are charged for any transfer type.

TransferPreapproval mechanism

Contrary to other assets like Eth or Bitcoin, Canton Coin requires a party to explicitly agree to hold Canton Coin. This includes explicitly agreeing to any incoming transfers. Parties that are ok with accepting incoming Canton Coin transfers from any sender, can setup a TransferPreapproval. This allows any party to send Canton Coin to the party that setup the TransferPreapproval. A preapproval has two parties:
  • Receiver — The party that approves incoming transfers
  • Provider — The party responsible for paying the preapproval fee and renewing it before expiry. The provider earns app rewards on all incoming transfers that use this preapproval.
Whether a receiver has a preapproval in place can be checked through the Scan API — it is a public, free query that any party can make. Preapprovals have a limited lifetime to prevent Super Validators from storing contracts for inactive or malicious parties. A fee proportional to the lifetime must be burned when creating the preapproval. The fee is controlled by the transferPreapprovalFee parameter (currently defaults to $1/year).

Setting up a preapproval

For local parties, create the preapproval through the Splice Wallet UI using the button next to the logout button. For external parties, the most common approach is for the validator operator to create an ExternalPartySetupProposal contract. The external party then signs a transaction exercising ExternalPartySetupProposal_Accept, which creates both the ValidatorRight contract (required for validator reward minting) and the TransferPreapproval with the provider set to the validator operator party. The validator exposes these endpoints:
  • /v0/admin/external-party/setup-proposal — Create the proposal
  • /v0/admin/external-party/setup-proposal/prepare-accept — Prepare the signed acceptance
  • /v0/admin/external-party/setup-proposal/submit-accept — Submit the signed acceptance
The validator APIs always create a preapproval with an expiry date of 90 days in the future.

Expiry and renewal

Preapprovals with the validator operator party as the provider are automatically renewed for another 90 days when expiry is less than 30 days away. If you have set up a preapproval with a different party as the provider, you need to build your own renewal automation that periodically exercises the TransferPreapproval_Renew choice.

Cancellation

Both the receiver and the provider can revoke a preapproval through the TransferPreapproval_Cancel choice. For preapprovals with the validator operator as the provider, a DELETE request to /v0/admin/transfer-preapprovals/by-party/{receiver-party} is available.

Transferring through a preapproval

The wallet UI defaults to using a preapproval when the receiver has one. For complex transactions that involve a CC transfer as part of a larger workflow, the wallet does not automatically use preapprovals — the application code must explicitly choose the transfer method through the Token Standard APIs. See CIP-0056 and the token standard reference CLI for examples.

Operator responsibilities

As a validator operator running the Splice Wallet:
  • Traffic management — Ensure your validator has enough CC to purchase traffic for wallet operations (reward collection, transfers, coin merging)
  • Auto-top-up — Configure automatic traffic purchases to avoid running out
  • Party limits — Be aware that Splice wallet parties, including minting delegations, count towards the max 200 parties limit
  • Preapproval renewal — If you act as the provider on preapprovals, the validator app handles renewal automatically. Monitor that renewals succeed.
  • External party setup — When onboarding external parties, create the ExternalPartySetupProposal and guide the party through the acceptance process