Skip to content

canton v3.5.13

Latest

Choose a tag to compare

@canton-machine canton-machine released this 13 Aug 13:33
eaa9e7a

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-submissions to the participant's traffic enforcement configuration.
    Multi-party submissions normally bypass traffic enforcement, since TEA accounts are bound to a
    single party. Setting this to true rejects them instead. Disabled by default.

    canton.participants.participant1.traffic-enforcement {
      enabled = true
      reject-multi-party-submissions = true
    }
    
  • Added allow-submissions-on-degradation to 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) and account-lookup-timeout (default 20
    seconds) to the internal traffic enforcement server's configuration, bounding the database read
    behind GetAccount and 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 authenticationServiceChannel to 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. A UnsupportedContractId interpretation error is now returned instead.
  • Preserve traceparent information for traces with tracestate information.
    When serializing a trace in W3C format, the traceparent information was not
    preserved which has been fixed. However, a limitation still exists whereby
    CantonBFT discards the tracestate information, 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)