Parties, participants, domains and privacy

I deployed a Canton network locally with 2 domain and 5 participants (A,B,C,D,E) so that participants A,B and E are connected to domain 1, and participant C, D and E are connected to domain 2.

I connect to participant A ledger api port and create 3 parties Alice, Bob and Charlie.

From the console I run the following commands:

participantA.parties.list()
participantB.parties.list()

Both lists have Alice, Bob and Charlie.

Is that normal? does this mean that parties could connect to either participant and have access to their private data?

Yes, that is normal.

I think of party ids (e.g., alice::abcd1234...) in the same way I think of email addresses. If you want to send an email to someone, you need their email address. If you want to include someone as an observer on a contract, you need their party id. Having someone’s email address does not mean you can send email as them or view all their email. Similarly, having a party id does not give you the rights to act as or read as that party. Is that analogy helpful?

The “topology manager” is the Canton component that maintains a list of parties. That list is distributed to the participants that connect to a sequencer.

When you see a list of the parties known to a participant, the list will often include whether or not each party is a local party or not.

Could then Alice, bob and Charlie connect to any participant (A, B or E) to check their respective balances and carry out operations?

No. In your example the Alice, Bob, and Charlie parties are local to Participant A. Any queries or commands sent to Participant B or E that require reading-as or acting-as one of those parties will not succeed. Queries and commands that require reading-as and acting-as Alice, Bob, or Charlie will only succeed through Participant A in your example.

Hi @WallaceKelly , I am part of Alberto’s team, thanks for your responses.
A follow up question: If a transaction happens in participant A (e.g. some tokens minted to Alice): does participant B have access to that transaction? (e.g. participant B knows the balance of Alice)
Thanks in advance!

No. Transaction data is distributed on a strict need-to-know basis and privacy is enforced at a subtransaction level. Participant B will only be informed of a transaction (or a part of the transaction aka subtransaction) if there are any informee parties of the transaction or subtransaction hosted on B. In your example, if any stakeholder parties on the tokens minted to Alice are hosted on B, then B will receive the subtransaction that creates the token contracts. But if B does not host any parties involved in the transaction, then B will not even be informed that the transaction took place. For full details, see Privacy — Daml SDK 2.10.0 documentation

2 Likes