Available when Canton Coin launches on Stargate and the Value Transfer API.Canton Coin on BSC, HyperEVM, and Solana is bridged CC: an OFT that LayerZero Labs deployed and administers. It is minted when native CC is locked on Canton through the LayerZero CC adapter. On HyperCore,
LZCC is a spot token linked to the HyperEVM OFT through the Hyperliquid asset bridge. The Global Synchronizer Foundation, Digital Asset, and the Canton Network did not deploy bridged CC and do not administer its contracts. See Canton Coin Across Chains.Package Vetting
The LayerZero Canton packages are private DAR files. To get access, contact the LayerZero team with the GitHub handles of your operators. Upload and vet the full set in LayerZero Packages on each participant node that hosts your users’ parties. If a party is hosted on more than one node, vet the packages on every co-host. If a hosting node has not vettedlayerzero-ioapp (send) or layerzero-iregistry (registration), the Value Transfer API returns the CantonPackagesNotVetted error (see Errors). The API does not check the other packages. If one of them is missing, the transaction fails when it is submitted.
Package Upgrades
The Value Transfer API picks the package version when it builds a transaction: the version that both LayerZero’s node and the user’s node have vetted. It puts that package ID in the command. When LayerZero releases a new version, upload and vet it on every node that hosts your users. Do not unvet an older version while transactions built against it may still be signed.Signing (CIP-0103)
For each transfer or registration, the Value Transfer API returns a CIP-0103prepareExecute request. Your wallet must:
- Accept a request with one command that exercises a LayerZero choice (
OApp_LzSendorSetPartyId). - Pass through the command,
disclosedContracts,actAs, andreadAsfields unchanged. - Use the
commandIdin the request if it has one. Stargate sets one and matches completion events on it. If the request has none, set your own uniquecommandId. Keep the samecommandIdif you resubmit the same send.synchronizerIdis optional: set it to the Global Synchronizer ID, or leave it unset and the node picks a synchronizer that it is connected to. - Show the transaction to the user. For
OApp_LzSend, show the amount, the destination chain, the receiver, and the CC fee. ForSetPartyId, show “Register for LayerZero transfers into Canton” and the fee. - Sign the transaction and execute it on the user’s validator.
Connect to Stargate
Stargate connects Canton wallet extensions through CIP-0103 extension discovery (@canton-network/dapp-sdk), and Loop through Loop’s own SDK. WalletConnect is not supported at launch. Your wallet must:
- Announce itself as a CIP-0103 extension.
- Report the network as
mainnet(mainandcanton:mainnetare also accepted). Other networks fail with “wallet does not support chain”. - Answer
ledgerApicalls forGET /v2/state/ledger-endandPOST /v2/state/active-contractsfor the connected party. Stargate reads holdings and balances this way. - Emit
txChangedfor the request’scommandId, withstatus: executedandpayload.updateId, or withstatus: failed. Stargate waits 120 seconds, including the time the user takes to approve.
Registration
A party must register once in the CC adapter’s registry before anyone can bridge CC into Canton for it. Registration is a Canton transaction: the party signsSetPartyId in its own Canton wallet and pays the fee in CC from its own holdings on Canton. The Value Transfer API prepares this transaction through POST /v1/register-canton-party. Through Stargate, Stargate prepares the registration, and your wallet only signs it. To offer registration inside your wallet, call POST /v1/register-canton-party with your own Value Transfer API key. Neither Stargate nor the Value Transfer API can register a party from BSC, HyperEVM, or Solana, and no flow registers a party automatically from another chain.
- Prompt the user to register on Canton before the first transfer into Canton.
- Make sure the user holds enough CC on Canton for the registration fee. A user whose CC is only on BSC, HyperEVM, or Solana must first get CC into their Canton wallet.
- Partners that send CC to your users from other chains with their own tooling must check every item in the pre-send checklist first.
One-step Transfers (Preapproval)
Inbound CC arrives in one of two ways:
If the user rejects the instruction or lets it expire, the CC goes back to the LayerZero CC adapter. LayerZero does not resend an expired instruction automatically. To have the tokens delivered again, contact the LayerZero team. The same applies to a rejected instruction. Show the sender as LayerZero, and warn the user before a reject.
Create a Splice
TransferPreapproval for each user. A preapproval costs CC and expires, so renew it before expiry, as Loop does with its One-step Transfers setting.
Holdings
A send from Canton pays the amount and the fee from different holdings, so a user needs at least two. One or more holdings pay the fee, and the holdings that are left must cover the amount. The Value Transfer API picks the fee holdings first: one holding, then a pair, then larger groups. It does not try every combination, so in rare cases it returns theCantonHoldingsNotSplit error although a split exists. If a user’s CC is all in one holding that covers the amount and the fee, the API returns the CantonHoldingsNotSplit error (see Errors). If that holding does not cover both, it returns HTTP 400 insufficient balance.
If your users are wallet users on a Splice validator, the Splice wallet automatically merges their Amulet holdings into one about every 30 seconds. A split made by a self-transfer does not last, and a merge between build and submit archives the holdings in the built transaction. Host bridging users as external parties, or as parties that the Splice wallet automation does not manage. For those parties, a transfer to yourself leaves the amount plus a separate change holding. Build and submit immediately after you read the holdings.
The Value Transfer API does not look up your users’ holdings. Your wallet passes them, at most 200 per request. A send can use at most 100 holdings, so merge many small holdings.
Bridged CC Balances
If your wallet also shows BSC, Solana, HyperEVM, or HyperCore balances, label CC there as bridged CC administered by LayerZero Labs. Check the address against the token table, and keep it separate from the native CC balance.Support Your Users
For transfers that do not arrive, see Canton Coin Troubleshooting. Before you contact LayerZero, collect the user’s Canton party ID, the Canton update ID or the source transaction hash, thequoteId if you used the API, and the time of the transfer.