Note
This page is a work in progress. It may contain incomplete or incorrect information.
Important
This page describes operations that can be performed by a participant operator to manage external parties hosted (or to be hosted) on their node.
To onboard and manage external parties from the application side, refer to this tutorial.
Managing hosting relationships
Authorizing hosting of a new pending party
An essential part of the party hosting process is the participant node’s approval to host the party.
This can be performed through the Ledger API with appropriate rights.
It can also be done through the node’s console.
Assuming we’re connected to participant2’s console, list the pending parties awaiting hosting authorization from participant2:
@ val pendingProposals = participant2.topology.party_to_participant_mappings.list_hosting_proposals(
synchronizerId,
participant2,
)
pendingProposals : Seq[com.digitalasset.canton.admin.api.client.data.topology.ListMultiHostingProposal] = Vector(
ListMultiHostingProposal(
txHash = SHA-256:eb8dbee0e17a...,
party = alice::12201ff69b1d...,
permission = Confirmation$,
others = PAR::participant1::12201ff69b1d... -> Confirmation$,
threshold = 1
)
)
We can see that Alice is to be hosted on participant1 and participant2.
To authorize Alice’s hosting on participant2:
@ participant2.topology.transactions.authorize(synchronizerId, pendingProposals.head.txHash)
res2: SignedTopologyTransaction[TopologyChangeOp, TopologyMapping] = SignedTopologyTransaction(
TopologyTransaction(
PartyToParticipant(
partyId = alice::12201ff69b1d...,
participants = Map(
PAR::participant1::12201ff69b1d... -> Confirmation,
PAR::participant2::1220a4d7463b... -> Confirmation
)
),
serial = 1,
operation = Replace,
hash = SHA-256:eb8dbee0e17a...
),
signatures = Seq(12201ff69b1d..., 1220a4d7463b...),
proposal
)
If both Alice and participant1 already approved the hosting, we can now verify that Alice is onboarded:
@ participant2.topology.party_to_participant_mappings.list(filterParty = partyId.toProtoPrimitive, synchronizerId = synchronizerId)
res3: Seq[com.digitalasset.canton.admin.api.client.data.topology.ListPartyToParticipantResult] = Vector()
Important
This procedure is UNSAFE if performed for an existing party. To replicate an existing party, follow the party replication procedure.