Skip to content
CCPEDIAby Unity Nodes
ReleasesCanton 2.10.4

Canton 2.10.4

This maintenance release updates internal dependencies to address security vulnerabilities, fixes a race condition and performance limitations in hard domain migration, and improves the system under faulty network…

Canton 2.10.4 has been released on March 26, 2026. You can download the Daml Open Source edition from the Daml Connect Github Release Section. The Enterprise edition is available on Artifactory. Please also consult the full documentation of this release.

Summary

This maintenance release updates internal dependencies to address security vulnerabilities, fixes a race condition and performance limitations in hard domain migration, and improves the system under faulty network conditions.

We recommend upgrading during your next scheduled maintenance window.

What’s New

Domain Migration Performance Improvement

This implementation significantly reducing memory consumption while improving throughput for massive datasets.

The following configuration options allow for fine-tuning, throttling, and concurrency. Particular values are load and environment specific, and require thorough testing.

This is an example for 38 million active contracts:

canton.participants.par {
  storage {
    config.queueSize = 10000
    parameters.max-connections = 20
  }

  parameters {
    batching {
      migration-read-batch-size = 25000
      migration-write-batch-size = 250000
      migration-max-nb-contracts-per-rc = 10000
      repair-internal-batch-size = 2500
      repair-store-parallelism = 10

      acs-commitment-processor-replay-batch-size = 20000
    }
  }
}

Minor Improvements

  • Set aggressive TCP keepalive settings on Postgres connections to enable a quick HA failover when a DB connection is stuck. The system-level default of 2h on Linux to trigger a TCP keep-alive results in a failing HA failover for 2h. The new TCP keep-alive setting of 10 seconds to initiate a TCP keep-alive enables quick failover.
  • Calls to SequencerAuthenticationService.Challenge will now timeout if incomplete after parameters.timeouts.processing.network (defaults to 2 mins). This will cause the existing retry mechanism kick in.

Update dependencies

logback: 1.14.4 -> 1.5.24 jackson: 2.14.3 -> 2.15.4 commons-io: 2.11.0 -> 2.14.0 commons-lang3: 3.12.0 -> 3.18.0 log4j-core: 2.17.0 -> 2.25.3 bouncycastle: 1.70 -> 1.83

This addresses:

  • CVE-2024-12798
  • CVE-2025-11226
  • CVE-2025-52999
  • CVE-2023-3894
  • CVE-2024-47554
  • CVE-2025-48924
  • CVE-2021-44832
  • CVE-2025-68161
  • CVE-2024-29857
  • CVE-2024-34447

Bugfixes

(26-001, Major): Race condition during hard domain migration initialization

Issue Description

The command migrateDomain does not properly synchronize the topology state. As a result, hard migration may fail during migration with BROKEN_DOMAIN_MIGRATION, or it may silently corrupt the contract keys state.

Affected Deployments

Participant nodes

Affected Versions

< 2.10.4

Impact

Hard migration may either fail during the operational procedure, or the contract key state may become corrupt.

Symptom

The migrateDomain may fail either with BROKEN_DOMAIN_MIGRATION.

If the migration succeeded, subsequent updates to contracts with the given keys would fail with "Unknown keys are to be reassigned".

Workaround

A potential, not validated workaround would be to add another topology transaction to the source domain before attempting the migration.

Likeliness

Race condition that is only present in 1% of the cases, if the participant nodes topology state prior to migration is exactly a multiple of 100.

Recommendation

Upgrade to 2.10.4 before attempting a domain migration.

Compatibility

The following Canton protocol versions are supported:

DependencyVersion
Canton protocol versions5, 7

Canton has been tested against the following versions of its dependencies:

DependencyVersion
Java RuntimeOpenJDK 64-Bit Server VM Zulu11.72+19-CA (build 11.0.23+9-LTS, mixed mode)
PostgresRecommended: PostgreSQL 12.22 (Debian 12.22-1.pgdg120+1) – Also tested: PostgreSQL 11.16 (Debian 11.16-1.pgdg90+1), PostgreSQL 13.23 (Debian 13.23-1.pgdg13+1), PostgreSQL 14.22 (Debian 14.22-1.pgdg13+1), PostgreSQL 15.17 (Debian 15.17-1.pgdg13+1)
Oracle19.20.0