Canton on Avalanche

Institutional DvP settlement across permissioned Avalanche L1s. Standard Solidity. Contracts in the genesis block. Ships today.

The problem

Canton Network processes $9T+/month with DTCC, JPMorgan, Goldman Sachs, and Visa. Their comparison page groups Avalanche under "Full replication model," claiming no sovereignty, no composability with privacy, and no privacy without security tradeoffs.

This is wrong. Avalanche L1s are sovereign chains with their own validators. ICM provides native cross-chain messaging. Protocol-level allowlists restrict who can even submit a transaction.

What this demo proves

Canton needed $135M and a separate company (Zenith, still in test) to add EVM. Below are two live Avalanche L1s with contracts predeployed in genesis, cross-chain DvP via ICM, and a stablecoin bridge via ICTT. Every button sends a real transaction.

Standard Foundry + Solidity. No vendor lock-in. build.avax.network

C-Chain Fuji
offline
block
--
admin balance
chain 43113open access
L1-Institutional
offline
block
--
admin balance
chain 200002txAllowListdeployerAllowList
L1-Private
offline
block
--
admin balance
chain 200003validatorOnlytxAllowList

Prove it's private

L1-Private runs with validatorOnly: true. Anyone can sync C-Chain or L1-Institutional. Nobody can sync L1-Private unless they're a validator.

These work

Sync Fuji C-Chain (public):

docker run --rm avaplatform/avalanchego:v1.14.2 \
  --network-id=fuji

Sync L1-Institutional (permissioned txs, but open sync):

docker run --rm avaplatform/avalanchego:v1.14.2 \
  --network-id=fuji \
  --track-subnets=2BJEeSX76ftRwicQ7196SZtoCV2srRLGnXJkgTAvVjheNeT2wP \
  --partial-sync-primary-network=true

This fails

Try to sync L1-Private:

docker run --rm avaplatform/avalanchego:v1.14.2 \
  --network-id=fuji \
  --track-subnets=2SX9zJYSCoDksFru5G7mX9BGAxcfDrQRKQwGpQbB4WM5JFZrEq \
  --partial-sync-primary-network=true

Your node discovers the subnet but can't peer with the validators. No blocks, no state, no data. You're not in the allowed set.

Prove it's permissioned

Generate a random wallet. Try to transact on L1-Institutional. Get rejected at the protocol level. Then KYC it and try again.

1

Generate a wallet

Creates a random wallet and funds it with gas on L1-Institutional.

2

Try to transact

This wallet has gas but is not on the txAllowList. The VM will reject it at the protocol level.

3

KYC + Retry

Submit KYC info to add the wallet to the allowlist, then retry the exact same transaction.

The Trade

Delivery-vs-Payment settlement across two permissioned Avalanche L1s. A seller issues tokenized US Treasury bonds on the private chain. A buyer funds with stablecoins from C-Chain. The DvP coordinator on the institutional chain ensures both legs settle atomically, or neither does.

This is Canton's "Global Synchronizer" use case — built in ~150 lines of Solidity + ICM. View the settlement contract on the institutional block explorer.

1. Mint sUSD

Public stablecoin on C-Chain

2. Issue Securities

USTB26 on private chain

3. Create DvP Trade

Terms: 1,000 USTB26 for 100,000 sUSD

4. Lock Securities

Escrow USTB26, send ICM to coordinator

5. Deposit Cash

Both legs present triggers atomic settlement.

On-chain privacy

Permissioned validators keep outsiders from seeing the chain. But what about privacy between participants?

EncryptedERC20 via Zama FHE

Balances and transfer amounts stored as FHE ciphertexts. Computation on encrypted values. Only authorized parties decrypt. Even validators can't see plaintext amounts. Docs

Canton: proprietary Daml, compile-time visibility, no EVM. Avalanche: standard ERC20 interface, runtime encryption, full EVM.

Contracts

C-ChainsUSD
SettlementStablecoin
0x2ff27ba4C464387bD9A2aa1C188B10e98F39fe35
C-ChainICTT bridge
ERC20TokenHome
0xb0E6e3E0b4f550865adDB10d6324E0F152fE688c
InstitutionalGenesis
InstitutionalAllowlist
0xC0DE000000000000000000000000000000000001
InstitutionalGenesis
CrossChainDvP
0xC0DE000000000000000000000000000000000003
InstitutionalsUSD bridge
ERC20TokenRemote
0xa4DfF80B4a1D748BF28BC4A271eD834689Ea3407
PrivateGenesis
SecuritiesToken
0xC0DE000000000000000000000000000000000004
PrivateDvP lock
SecuritiesEscrow
0xA4cD3b0Eb6E5Ab5d8CE4065BcCD70040ADAB1F00
L1-Institutional Blockscout // C-Chain Snowtrace // L1-Private: no public explorer (by design)

Still missing Daml?

We built a Daml-compatible VM that runs on Avalanche L1s. Same language, better infrastructure.

See the Daml VM Demo
Avalanche DevRelbuild.avax.network