Is it possible to connect Single Participant node to Multiple Sync domain

Hi,
I have two sync domain with below config and I have two participant node,
I am trying to connect participant1 to both sync domain’s but I was able to connect to one domain successfully, but failing with second one with below error

INFO  c.d.c.c.d.g.SequencerInfoLoader:participant=participant1 tid:061ddc881144cbe2600ebe0730bef64e - Version handshake with sequencer Sequencer 'DefaultSequencer' and domain using protocol version 5 succeeded.
DEBUG c.d.c.c.d.g.GrpcSequencerConnectClient:participant=participant1 tid:061ddc881144cbe2600ebe0730bef64e - Sending request get domain parameters to mydomain1.
DEBUG c.d.c.c.d.g.GrpcSequencerConnectClient:participant=participant1 tid:061ddc881144cbe2600ebe0730bef64e - Request get domain parameters has succeeded for mydomain1.
DEBUG c.d.c.c.d.g.GrpcSequencerConnectClient:participant=participant1 tid:061ddc881144cbe2600ebe0730bef64e - Sending request getting service agreement from remote domain to mydomain1::12204fb68c20....
DEBUG c.d.c.c.d.g.GrpcSequencerConnectClient:participant=participant1 tid:061ddc881144cbe2600ebe0730bef64e - Request getting service agreement from remote domain has succeeded for mydomain1::12204fb68c20....
com.digitalasset.canton.console.CommandFailure: Command execution failed.

Are you sure the above error message is related to the participant connecting to the domain? It says that a “Command execution failed.” I wonder if you have a bootstrap script that is submitting a command that fails?

I am just using the below command

participant1.domains.connect("mydomain1","http://<domain-ip>:5032")

this is the error

ERROR c.d.c.e.CommunityConsoleEnvironment - Request failed for participant1.
  GrpcRequestRefusedByServer: FAILED_PRECONDITION/INCOMPATIBLE_UNIQUE_CONTRACT_KEYS_MODE(9,48725efa): Cannot connect to domain mydomain1 as the participant has UCK semantics enabled and has already been connected to other domains: mydomain::1220d2e83e40...
  Request: ConnectDomain(Domain 'mydomain1',false)
  CorrelationId: 48725efa17d2a5956e8ccd1a5f46aecf
  Context: Map(domain -> mydomain1, participant -> participant1, tid -> 48725efa17d2a5956e8ccd1a5f46aecf)
  Command ParticipantAdministration$domains$.connect invoked from cmd2.sc:1
com.digitalasset.canton.console.CommandFailure: Command execution failed.

do I need to make this false manually, and what exactly it does if it is false?

 init.parameters.unique-contract-keys = false

Thank you for the extended error message. That clarifies that it is indeed related to connecting a participant to a different domain.

I’m guessing you are using Canton 2.7 Community Edition?

My understanding is that Canton 2.x will not support connecting to multiple domains. That will be a 3.x feature.

EDIT: See Bernhard’s more complete response below.

Hi @WallaceKelly, Thanks for clarifying. Yes I am using the Canton 2.7.9 version

Also bit confused here that below architecture shows that participant connecting to multiple domain, and I don’t see Canton 3.x is not yet available.

@Bhas
You should be able to connect Canton 2.7 participant to multiple domains. The error you got is indeed due to the participant running in unique contract keys mode, which is the default in Canton 2.x. Since the uniqueness of contract keys cannot be guaranteed across multiple domains, a participant running in UCK mode cannot connect to more than one synchronizer. To connect a participant to multiple domains, the participant and the domains need to be configured in non-unique contract keys mode. For details including the config settings and the difference in behavior in UCK mode vs. non-UCK mode see Contract Keys in Canton — Daml SDK 2.10.0 documentation

Connecting to multiple sync domains in Daml 2 is an alpha feature. Daml 3 is now at a point where I would recommend against using the feature in Daml 2 at all. If you wan to use multiple sync domains, go with Daml 3.

1 Like

@bernhard can you point me to the link for Daml 3

Hi, @Bhasas of today…

You can get started by grabbing a 3.x snapshot from the open source releases page. Those releases have JAR files. You can use them directly or build Docker images for them.

The development of 3.x is focused on the Global Synchronizer. You can read docs for that at Global Synchronizer for the Canton Network — Splice documentation

Additionally, the recent 2.10 LTS release notes mentions that there is more to come:

For early adopters of v3.x, there is documentation available today in preview and for the accelerators being built for the Global Synchronizer. Please ask your representative for more information. A new external site is being developed for v3.x to be published at GA. The documentation for new v3.x features will be incrementally added and updated and shared with all customers as soon as it is publicly available.