Use this file to discover all available pages before exploring further.
Privacy is the most significant architectural difference between Canton and Ethereum. This page explains the differences in depth and provides guidance for adapting your thinking.
On Canton, data is visible only to entitled parties:
Transaction content is encrypted during submission
Views are delivered only to relevant validators
State is stored only on validators hosting stakeholders
Contract data is visible only to signatories and observers
Third parties see nothing unless explicitly declared
-- Daml: Visibility is explicittemplate TrulyPrivate with owner : Party secretValue : Decimal where signatory owner -- No observers: only owner sees this contract
Approach: Prove validity without revealing data.Canton does not use zero-knowledge proofs. Instead, privacy is achieved through selective data distribution—parties only receive the transaction views they’re entitled to see. This provides a simpler programming model without ZK circuit complexity or proof generation overhead.
// Anyone can query any dataconst totalSupply = await token.totalSupply();const aliceBalance = await token.balanceOf(alice);const bobBalance = await token.balanceOf(bob);
Canton approach:
// You can only query your own dataconst myContracts = await ledgerApi.getActiveContracts({ templateId: "Token", party: myParty // Only your party});// Can't query Bob's balance unless you're an observer
Canton’s trust model differs fundamentally from traditional blockchains:What you trust the synchronizer for:
Ordering transactions fairly (not reordering to favor certain parties)
Delivering messages to all entitled participants
Availability (being online when you need to transact)
What you don’t need to trust the synchronizer for:
Your data privacy—it only sees encrypted blobs
Transaction validation—your validator does this
Correct execution—the protocol enforces this cryptographically
What you trust your validator for:
Storing your contract data securely
Executing transactions correctly on your behalf
Not revealing your data to unauthorized parties
Your hosting validator sees all your party’s data. Choose your validator carefully—this is a trust relationship similar to choosing a bank or custodian.
Ethereum
Canton
Trust all validators not to censor
Trust synchronizer not to censor
All validators see everything
Synchronizer sees only encrypted views
MEV is possible (validators see pending txs)
MEV is significantly harder (transactions encrypted)
Who are signatories? They must authorize and always see.
Who are observers? They can see but not act.
Who can exercise choices? Controllers for each choice.
What gets divulged? Fetching contracts in transactions reveals them.
template DesignedForPrivacy with primaryParty : Party counterparty : Party auditor : Party -- Only if audit is required details : SensitiveData where signatory primaryParty observer counterparty -- Needs to see, but not auditor -- Add auditor only when they need to see choice AddAuditObserver : ContractId DesignedForPrivacy with newAuditor : Party controller primaryParty do create this with auditor = newAuditor