Module 0 · Lesson 1 · ~25 min read

What Canton Is (and Isn't)

Before we touch any Go, let's answer the real question: what is Canton, what does it do that existing systems don't, and where would you — a Go contributor — actually plug in?

The one-sentence version

Canton is a privacy-preserving distributed ledger where every workflow is a Daml smart contract, and any two parties to a contract can transact through a shared synchronizer without revealing anything to anyone else.

Now the unpacking.

What it actually solves

Take a scenario your old-world employer probably lived with: two banks want to settle a derivatives trade. Both sides run their own systems of record. They reconcile nightly. Breaks happen — field mismatches, out-of-sequence updates, timing windows. Someone (an ops team, usually) stays late fixing them.

The blockchain-shaped answer to this is: "put the trade on a shared ledger, problem solved." Except:

Canton's answer: the ledger isn't a global chain. It's a virtual shared ledger, where each party sees only the contracts they're a stakeholder in. Two banks trading a derivative see the trade. Nobody else — not other banks, not the synchronizer operator, nobody — sees its contents. They see only that something happened between someone.

Mental model

A classical blockchain is a shared database everyone queries. Canton is a messaging protocol where each party maintains their own private database and the protocol guarantees those databases stay consistent wherever they overlap.

The moving parts

Four nouns carry most of the meaning. Memorize these — everything in Canton's docs and codebase assumes you know them.

Party
A logical identity that owns and interacts with contracts. Alice, Bank A, "the bond issuer." A party is not a node — a party is hosted on one or more participant nodes.
Participant node
A server run by an organization. It hosts one or more parties, holds the subset of the ledger those parties can see, and talks to synchronizers on their behalf. This is the component you interact with via the Ledger API (gRPC). This is where most integration code — including the Go client you'll build in the capstone — connects.
Synchronizer
Canton's name for the thing that coordinates multi-party transactions. Formerly called a "domain" (you'll still see that in older code and docs). Internally it's several services — a sequencer (orders messages), a mediator (arbitrates transaction confirmation), and topology management. A synchronizer never sees contract contents; it only orders and confirms encrypted traffic.
Daml
The language every contract is written in. A pure functional language. Contracts define the data (like a row in a DB) and the choices (the operations that advance the ledger state). We'll cover Daml properly in the next lesson.

Topology — what connects to what

The picture below is the minimum viable Canton deployment: three participants and one synchronizer. Each participant runs its own node, holds its own parties and its own subset of contracts. The synchronizer coordinates messages between them.

Synchronizer (sequencer + mediator) never sees contents Participant A Alice, BankA-ops Alice BankA-ops Participant B Bob Bob Participant C Carol, Regulator Carol Reg. ↑ Ledger API (gRPC) Go CLI / integration Web app (TS/JS SDK) Java backend (Java SDK)

Three participants, one synchronizer. Dashed edges carry encrypted message traffic. Each participant has its own Ledger API — that's the gRPC endpoint your Go code talks to.

What a transaction actually looks like

Say Alice wants to transfer a bond to Bob.

  1. Alice's client (running on participant A) submits a command over the Ledger API: "exercise the Transfer choice on bond contract #42, new owner = Bob."
  2. Participant A interprets the command against the Daml model, producing a proposed transaction (a tree of commits and archives of contracts).
  3. Participant A routes the transaction to the synchronizer, encrypted such that only the informees (Alice, Bob) can see their respective views. The synchronizer itself can't.
  4. The synchronizer orders the message globally and forwards views to each informee participant.
  5. Each informee confirms it accepts its view. The mediator aggregates confirmations.
  6. On unanimous confirmation, the synchronizer emits a "commit" signal and each participant updates its local ledger.
  7. Alice sees her Transaction Stream event ("bond #42 archived, new bond issued to Bob"). Bob sees the same. Carol, who wasn't involved, sees nothing. The synchronizer operator sees ordered encrypted blobs.
Why this matters for Go tooling

Steps 1 and 7 are where most integration code lives. You submit commands (step 1); you stream transactions back (step 7). Both are gRPC calls against a participant's Ledger API. That's the interface you'll spend most of your time against — and it's why Module 5 (gRPC) exists in this course.

Canton vs the other systems you might compare it to

Property Bitcoin / Ethereum L1 Fabric private channels Canton
Privacy model Everything public Per-channel visibility Per-contract, per-stakeholder
Consensus Global (PoW / PoS) Per-channel (orderer) Per-synchronizer ordering; no global consensus needed
Contract language Solidity, etc. Go, Java "chaincode" Daml — pure functional, privacy-aware
Throughput ceiling Tens of TPS (L1) Hundreds–thousands TPS Scales with synchronizer tier; workflows are parallelizable per disjoint party set
Who runs it Anyone — permissionless Permissioned Permissioned; parties choose their own synchronizer(s)
Regulator access Inherent (everything is public) Awkward — add them to every channel Make them an observer on the contracts they need

Where Go fits in this world

Canton's core — the protocol, the synchronizer services, the participant node runtime — is Scala. Daml is its own compiler. Those aren't where you're aiming. Where Go is genuinely useful:

You already know how to build these categories of software. What you need is Go fluency plus knowing the Ledger API shape. That's the plan for the rest of the course.

Common misunderstandings, up front

Correction

"Canton is a blockchain." Not in the Bitcoin sense. There's no global chain, no mining, no global consensus. It's a ledger protocol that uses cryptography for integrity and a synchronizer for ordering — the word "blockchain" will mislead you.

Correction

"Parties are nodes." Parties are identities. Nodes are the servers hosting them. One node hosts many parties; one party can be replicated across nodes. Keep these separate in your head or the topology docs will not make sense.

Correction

"The synchronizer is a trusted party." The synchronizer is trusted for liveness (if it goes down, transactions stall) and for ordering. It is not trusted for confidentiality — it cannot see contract contents. It is not trusted for correctness — stakeholders independently validate transactions. Getting this distinction right is half the point of Canton.

Correction

"Daml is just another Solidity." Daml is a purely functional, privacy-aware contract language that compiles to a DAML-LF intermediate form. It has no mutable state, no concept of "gas," no global broadcast. The model is closer to a well-typed database migration than a Solidity contract.

Where to read more

Takeaways

Before the next lesson, make sure these four sentences feel obvious: