Core Concept Mapping
The following table maps familiar Ethereum concepts to their Canton equivalents.The Mental Model Shift
On Ethereum: You write code that mutates global state. Everyone sees everything. Your contract sits at an address anyone can call. On Canton: You write templates that define what data exists and what actions are possible. Contracts are created and archived (never mutated). Only relevant parties see the data. Authorization is built into the model, not bolted on.Smart Contract Paradigm: Templates vs Solidity
In Solidity, you define contracts with mutable state and functions that modify that state:Key Differences
These are the fundamental differences between Solidity and Daml programming models.
The
Transfer choice in Daml doesn’t mutate the existing contract. It archives the current contract and creates a new one with the new owner. This immutability is fundamental to Canton’s privacy and integrity guarantees.
Privacy Model Differences
Ethereum default: Everything public. Canton default: Everything private. Visibility requires explicit declaration.Reading Data: No Global RPC
On Ethereum, any node can answer queries about any state. On Canton, you must connect to the validator that hosts the party whose data you want.There is no single, all-encompassing blockchain RPC endpoint you can call to retrieve all data. Instead, you use your validator’s Ledger API for your parties’ data, and potentially an application provider’s API for their data.
Authorization Model
Authorization works fundamentally differently in Canton compared to Ethereum.
Canton’s authorization model uses three key roles:
- Signatory: The party or parties that must authorize contract creation. Signatories always see the contract and can exercise choices if also declared as controller.
- Observer: A party permitted to see the contract but cannot exercise choices unless also declared as controller.
- Controller: The party permitted to execute a particular choice on a contract. Controllers see the contract when exercising.
Authorization Example
issuermust sign to create the contract (signatory)ownerandauditorcan see the contract (observers)- Only
ownercan exercise theTransferchoice (controller)
controller declarations are per-choice. A template can have multiple choices with different controllers:
Developer Tooling Comparison
Canton has equivalent tooling for most Ethereum development workflows.Multi-Party Workflows
Canton treats multi-party coordination as a first-class concern. Where Ethereum requires manual coordination patterns, Canton builds them into the language.Ethereum Approach: Manual Multi-Sig
Canton Approach: Built-in Multi-Party
Execute without both parties.
Multi-party authorization in Canton requires collecting signatures from parties that may be hosted on different validators. This typically involves workflow patterns where one party proposes an action and others accept it. See the developer modules for detailed patterns on implementing multi-party workflows.
What You’ll Need to Unlearn
Coming from Ethereum, these habits will need to change.The Four Mental Shifts
- No global state queries: You can’t query “all tokens” across the network
- Immutable contracts: State changes create new contracts; old ones are archived
- Explicit authorization: Every action requires explicit signatory/controller declarations
- Privacy by default: You must opt-in to visibility, not opt-out
Common Gotchas
Next Steps
- Architecture Overview - Deep dive into Canton’s component model
- Privacy Model Explained - Understand sub-transaction privacy
- Developer Track Module 3: Daml Development - Start writing Daml code