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?
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?
@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.
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.
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.