Skip to content
Discussions/App Development/Storage impact of multiple stakeholders of a contract allocated on a single participant node (Canton)Forum ↗

Storage impact of multiple stakeholders of a contract allocated on a single participant node (Canton)

App Development5 posts268 views1 likesLast activity Feb 2023
MR
Mr_MannorothOP
Feb 2023
  1. For a contract with N stakeholders, where all N parties are allocated on the same participant node (Canton), will there be N instances of the contract on the participant node storage, or a single instance only?

  2. Does the answer above change based on whether the stakeholders are signatories, controllers or observers?

ST
stefanobaghino-da
Feb 2023

There is some duplication but it needs to be addressed within the context of transactions (rather then individual contracts), since Canton might need to create multiple views of it depending on what party is supposed to see what part of each transaction. You can read more on the topic here on the documentation.

MR
Mr_Mannoroth
Feb 2023

Thanks @stefanobaghino-da

In that case, let’s say I have 2 parties A & B both allocated on the same participant node, and both stakeholders to a contract. Let’s also say I have a user U which can read/act as both these parties.

  1. My understanding is you cannot read contracts via the transaction stream as a user - you always need to pass in the requesting parties. Is this correct or is there a way to read the transaction stream as a user?

  2. In the above transaction stream, would I get 1 or 2 copies of the same contract (1 each for A & B)?

ST
stefanobaghino-da
Feb 2023
Mr_Mannoroth:

My understanding is you cannot read contracts via the transaction stream as a user - you always need to pass in the requesting parties. Is this correct or is there a way to read the transaction stream as a user?

Your understanding is correct. To be more specific, the concept of a user is that of an entity which has certain access privileges to participant, not an entity within the Daml ledger model. A user can act as or read as a party, but this mapping stops at the authorization level. You can present a token saying that you are U and asking to perform some interaction with the Ledger API, but in your interaction you need to specify the party on behalf of you you want to perform such action.

Mr_Mannoroth:
  1. In the above transaction stream, would I get 1 or 2 copies of the same contract (1 each for A & B)?

When you ask for data for multiple parties, you get back a single event even if it’s visible to more than one party. You can use the witness_parties field in each event to understand to which parties that specific event was visible to. You can read more about it in the Ledger API Reference — Daml SDK 2.7.6 documentation.

MR
Mr_Mannoroth
Feb 2023

Perfect, thank you so much for the detailed explanation @stefanobaghino-da

← Back to Discussions