Release of Canton 3.5.7
Canton 3.5.7 has been released on July 01, 2026.
Summary
This release provides a new Ledger API endpoint to obtain command completions and fixes a number of minor issues.
What’s New
New GetCompletions endpoint on the command completion service
Background
The command completion service only offered CompletionStream, which always filters by a single user and a non-empty set of parties. There was no way to stream completions across all parties.
Specific Changes
A new completion streaming endpoint is introduced: GetCompletions (gRPC) or /commands/command-completions (JSON API). This endpoint offers more flexible filtering semantics compared to the existing CompletionStream, /commands/completions endpoint. It filters by parties only; there is no user filtering:
- A non-empty
partiesfilters to those parties and requiresReadAs(orActAs) for each. - An empty
partiesreturns completions for all parties and requiresReadAsAnyParty(orActAsAnyParty).
In all other respects it behaves like CompletionStream, which becomes deprecated.
Impact and Migration
This is an additive change. CompletionStream is unchanged, so no migration is required.
Participant Local Traffic Accounting
Note: This is a beta feature.
Background
Participants must pay for traffic on the synchronizer for every message they send, including confirmation requests for daml transactions.
This cost is largely triggered by submissions from the Ledger API and currently cannot be easily attributed to the submitting parties.
Specific Changes
This release introduces a feature tracking the traffic spent by the participant on behalf of submitting parties for the execution of daml transactions.
An account is implicitly tied to each submitting party and is debited for the traffic cost of their submissions.
The cost deducted on the account is the one already available on the completion response.
Note that only submissions with a single actAs party are accounted for. This includes local parties.
When the traffic accounting feature is enabled, a new service is available on the Ledger API to
- query the current account balance for a given party (requires ExecuteAs rights on the party)
- add traffic to an account (requires Admin rights on the participant)
This feature is disabled by default and can be enabled by setting the canton.participants.<participant_name>.traffic-enforcement.enabled = true configuration option to true.
When disabled, the TrafficService will not be exposed to the Ledger API, no accounting will be performed and no enforcement will be done on submissions.
When the feature is enabled, accounting is performed but enforcement is disabled by default.
To enable traffic enforcement, set canton.participants.<participant_name>.traffic-enforcement.enforce-cost-on-submissions = true.
When enforcement is enabled, on submission, the participant will check if the submitting account has enough traffic to pay for the submission. If not, the submission will be rejected.
Note that it is possible for account balance to be negative, even with enforcement enabled, if concurrent submissions are made from the same submitting party.
Impact and Migration
This change requires a database migration. The migration is additive only, but will be performed regardless of whether the feature is enabled or not.
Minor Improvements
- Added latency metrics for KMS signing and decryption operations.
- Fixed a BFT ordering sequencer crash-recovery issue affecting freshly onboarded nodes which could leave them stuck.
- LSU: improved handshake between a sequencer and its successor: the physical synchronizer id and sequencer id are now validated.
- The JSON Ledger API now rejects malformed identifiers (e.g. template-id) provided in requests (one that does not follow the
<package>:<moduleName>:<entityName>format) with a descriptive400 Bad Requesterror that names the expected format, instead of surfacing it as an internal error.
Compatibility
The following Canton protocol versions are supported:
| Dependency | Version |
|---|---|
| Canton protocol versions | 34, 35 |
Canton has been tested against the following versions of its dependencies:
| Dependency | Version |
|---|---|
| Java Runtime | OpenJDK 64-Bit Server VM (build 21.0.12+2-nixos, mixed mode, sharing) |
| Postgres | Recommended: PostgreSQL 17.10 (Debian 17.10-1.pgdg13+1) – Also tested: PostgreSQL 14.23 (Debian 14.23-1.pgdg13+1), PostgreSQL 15.18 (Debian 15.18-1.pgdg13+1), PostgreSQL 16.14 (Debian 16.14-1.pgdg13+1) |