Canton 2.3.0
We've released a new protocol version that fixes an issue where invalid transaction structures were created, leading to failures during development. We also reworked the participant on-boarding process, in particular…
- A newer release in the 2.3 line: Canton 2.3.20
- Newest Canton: Canton 3.6.4
Canton 2.3.0 has been released on July 15, 2022. 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
We've released a new protocol version that fixes an issue where invalid transaction structures were created, leading to failures during development. We also reworked the participant on-boarding process, in particular, we've added allow-listing as an ability to control access to permissioned domains.
What’s New
New Protocol Version Released
Background
Due to an issue that is causing invalid transaction structures being built in certain rare cases, we had to change some message payload that is sent between the participants. This causes a protocol upgrade, as participants on older versions can not interpret the payload created by the new protocol available to new participants.
Specific Changes
This release includes the Canton protocol version 3 and makes it the default protocol version. Please refer to our versioning guide to understand the differences between release and protocol version.
Impact and Migration
While the releases 2.3 and beyond will still be capable to run with protocol 2, we advise production systems to start with protocol 3 directly, and migrate their older systems. The detailed migration guide explains how to upgrade a network by first deploying a domain with a new protocol version, updating the participant binaries and finally migrating the contracts in a synchronized upgrade process using the repair.migrate_domain command on all participants.
Access Control for Permissioned Domains
Enterprise Only: We've improved how to control access of participants to domains. Generally, Canton can run in two modes now, open or permissioned. This can be configured using a new boolean flag
canton.domains.mydomain.topology.open = true (default) | false
An open domain will let anyone with access to the sequencer join a domain as a participant. A permissioned domain will reject the on-boarding of a participant unless that particular participant has been actively enabled by the domain manager operator using the domain.participants.set_state command.
Please also check the more detailed guide on how to manage permissioned domains.
The previous option "auto-approve" is now represented by "open" domains. The "reject" mode is the normal behavior for any participant not on the allow-list of a permissioned domain. The preview feature "queue" mode has been entirely removed due to the better user experience of using allow-lists.
The open source domain only supports open domains.
Sequencer Connection Management
Enterprise Only: There are several UX enhancements for commands related to sequencer connections.
While the participant nodes support adjusting sequencer connections after initialisation, we've also added this to the mediator and domain manager nodes: they can now dynamically change sequencer connections after bootstrapping by using the new node.sequencer_connection.set command. To see the current connections use the command node.sequencer_connection.get. Also, modifying the mediator's and domain manager's sequencer connection can be done using the command node.sequencer_connection.modify(_.addConnection(conn)). Please check the reference manual for more details.
Minor Improvements
- Mac users can rejoice because the Canton demo now runs on Apple silicon (M1). The demo will auto-detect M1 systems on start-up. If, for some reason, the demo detects that it cannot run then it will print out a message to use a JDK with native FX support.
- Added command
myParticipant.ledger_api.completions.subscribeto subscribe to the command completion stream (for testing purposes). - Expert mode: Config key
ledger-api.postgres-data-source-config.synchronous-commitchanged toledger-api.postgres-data-source.synchronous-commit
Security and Bugfixes
- Fixed the exception thrown by
myParticipant.domains.active(domainReference), if the given domain is not yet initialized. Improved documentation. - Fixed a bug in the Besu driver where the same random Ethereum account was generated for multiple sequencers defined in the same configuration file.
- Fixed a bug in
Sequencer.solwhere the preview authorization feature wasn't functioning as intended. This introduced a new Ethereum contract version 1.0.1. The new release will by default deploy the Ethereum contract version 1.0.1, but for compatibility with old releases, it is possible to explicitly deploy Ethereum contract version 1.0.0 by passing version 1.0.0 to theethereum.deploy_sequencer_contractconsole command. To use a domain backed by the new Sequencer.sol contract, a new domain needs to be created. To migrate contracts from an old domain, please refer to the detailed migration guide.
Compatibility
| Dependency | Version |
|---|---|
| Java Runtime | OpenJDK 64-Bit Server VM 18.9 (build 11.0.15+10, mixed mode, sharing) |
| Daml | 2.3.0 |
| Canton protocol versions | 2, 3 |
| Postgres | postgres (PostgreSQL) 14.2 (Debian 14.2-1.pgdg110+1) |
| Oracle | 19.15.0 |
| Besu | besu/v21.10.9/linux-x86_64/openjdk-java-11 |
| Ethereum contract versions | 1.0.0, 1.0.1 |
| Fabric | 2.2.2 |
| Scala | 2.13 |
What's Coming
We are currently working on
- ongoing security hardening of the Canton protocol and application.
- HSM / KSM support.
- providing higher levels of topology management privacy and scalability.
- production ready support of multiple domains per participant.
- improving our documentation with many explicit operational procedures.