Release of Canton 3.5.13
Canton 3.5.13 has been released on August 13, 2026.
Summary
This is a maintenance release with a number of improvements in particular for
CantonBFT and traffic enforcement app, as well as minor improvements in various
areas.
What’s New
Traffic Enforcement App Improvements
-
Added
reject-multi-party-submissionsto the participant's traffic enforcement configuration.
Multi-party submissions normally bypass traffic enforcement, since TEA accounts are bound to a
single party. Setting this totruerejects them instead. Disabled by default.canton.participants.participant1.traffic-enforcement { enabled = true reject-multi-party-submissions = true } -
Added
allow-submissions-on-degradationto the participant's traffic enforcement
configuration. When the balance can't be determined, for example during a database outage, this
lets the submission proceed unchecked instead of failing it, logged at WARN. The submission is
still charged, so an account without enough traffic ends up with a negative balance until it is
topped up. Does not apply when the traffic service itself refuses the request. Disabled by
default. -
Added
database-query-timeout(default 1 second) andaccount-lookup-timeout(default 20
seconds) to the internal traffic enforcement server's configuration, bounding the database read
behindGetAccountand the overall call respectively. The former must be at least one
millisecond and the latter must be strictly larger so a timed-out query still leaves room for a retry.canton.participants.participant1.traffic-enforcement { enabled = true allow-submissions-on-degradation = true traffic-enforcement-server { database-query-timeout = "1s" account-lookup-timeout = "20s" } }
CantonBFT Improvements
- CantonBFT now deletes unnecessary messages from previous views to prevent excessive memory usage during view changes.
- CantonBFT limits standalone mode to non-standard config enabled
- Fixed relative segment latency metric
- CantonBFT now logs more information about the view change process, including the reason for the view change and the new leader.
- Logs about backpressure and P2P that didn't provide useful information for operators have been removed
or have seen their threshold lowered to DEBUG; other log messages have been improved. - The current epoch graph in the "BFT ordering" dashboard is now a time series rather than a mere stat.
- Batch fetching: a node that is contributing to consensus but doesn't receive a batch will try to fetch it
from other nodes, but previously it would only consider nodes that signed an acknowledgement for the batch.
Now it will also consider nodes that didn't, as they could have retrieved the batch from other nodes earlier
and be able to provide it.
This improves dissemination success chances, and thus overall ordering latency, for nodes that experience connectivity
issues. - Fixed a deserialization issue with retransmission request
- Remove a deprecated gRPC header previously used internally for P2P authentication
- Start fetching batches earlier, before consensus starts on the block.
- Add metric for which node we are missing batches and need to fetch
- Retrieval of batches will be attempted by multiple nodes in parallel, by default 3 (configurable)
- CantonBFT's P2P server-side now has configurable keepalive settings and defaults have been made more robust
against network infrastructure that may drop idle connections, leaving them in a zombie state. - Fixed a view change nested timeout cancellation issue when receiving a commit certificate
during a view change.
Improved Sequencer Logging
On the sequencer, the log line mentioning all events in a block now also can contain the outcome of the event.
By setting canton.sequencers.sequencer.parameters.enable-async-sequencer-logging = true, the logging will be
moved to the end of the block processing, but will include the outcome of the events in the block. The default
remains false to preserve the current behavior.
Note that as part of this change, the sequencer-id of the traffic control metrics and of the block event processor
metrics dropped the superfluous leading "SEQ::" string.
Detailed Participant to Sequencer Connect Logging
More debug logging has been added to the participant connecting to a sequencer in order to debug a race condition
in which connecting appears to hang at times.
Minor Improvements
- Fixed deserialization failure in AcsCommitmentCatchUpConfig
- Fixed an issue with
authenticationServiceChannelto ensure it closes properly during shutdown. - gRPC servers can now configure manual gRPC flow control window size; also, both gRPC servers and clients can
now configure automatic gRPC flow control initial window size.
The default is unchanged, i.e., for servers neither is set unless configured, so that the implementation default
applies, and for clients manual flow control is enabled by default with a window size of 1 MB.
Only CantonBFT's default has changed: implementation defaults are used also on the client side. - LSU: On participant nodes, only expose LSU status of recent LSUs (instead of old past LSUs).
Bugfixes
- Improved engine handing of
UnsupportedContractIdVersion: disclosure from a future version of Canton could cause the engine to crash
and fail submissions with an internal error. AUnsupportedContractIdinterpretation error is now returned instead. - Preserve
traceparentinformation for traces withtracestateinformation.
When serializing a trace in W3C format, thetraceparentinformation was not
preserved which has been fixed. However, a limitation still exists whereby
CantonBFT discards thetracestateinformation, which will be fixed in a
future release.
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), PostgreSQL 18.4 (Debian 18.4-1.pgdg13+1) |