Packages

package protocol

Provides shorthands for general purpose types.

Most notably, it provides a facade for Daml-LF transactions and nodes. By default, code should access Daml-LF transaction and nodes types through this facade.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. protocol
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Package Members

  1. package messages

    This package contains data structures used in the transaction protocol.

    This package contains data structures used in the transaction protocol. However, generic data structures, e.g. com.digitalasset.canton.data.MerkleTree etc. are kept in com.digitalasset.canton.data package.

  2. package v0
  3. package version

Type Members

  1. trait AlarmStreamer extends AnyRef

    AlarmStreamer is responsible for streaming alarms, which are events that signal abnormal system operation as described in: https://engineering.da-int.net/docs/platform-architecture-handbook/arch/ledger-sync/api.html?highlight=alarm#alarms-stream

  2. sealed trait ConfirmationPolicy extends Product with Serializable with PrettyPrinting
  3. case class ContractMetadata extends HasVersionedWrapper[VersionedContractMetadata] with HasProtoV0[Metadata] with PrettyPrinting with Product with Serializable

    Metadata for a contract.

    Metadata for a contract.

    Exceptions thrown

    ContractMetadata.InvalidContractMetadata if some maintainers are not signatories or some signatories are not stakeholders.

  4. final case class ContractSalt(unwrap: Salt) extends AnyVal with Product with Serializable

    A blinded cryptographic hash of the information that ensures uniqueness of Unicums in Canton.

    A blinded cryptographic hash of the information that ensures uniqueness of Unicums in Canton. The hash can be used to unblind the Unicum's cryptographic commitment to the contract data.

    See also

    UnicumGenerator for the construction details

  5. case class CreatedContract extends HasProtoV0[protocol.v0.ViewParticipantData.CreatedContract] with NoCopy with PrettyPrinting with Product with Serializable
  6. final case class DynamicDomainParameters(participantResponseTimeout: NonNegativeFiniteDuration, mediatorReactionTimeout: NonNegativeFiniteDuration, transferExclusivityTimeout: NonNegativeFiniteDuration, topologyChangeDelay: NonNegativeFiniteDuration, ledgerTimeRecordTimeTolerance: NonNegativeFiniteDuration) extends HasVersionedWrapper[VersionedDynamicDomainParameters] with HasProtoV0[protocol.v0.DynamicDomainParameters] with Product with Serializable

    participantResponseTimeout

    the amount of time (w.r.t. the sequencer clock) that a participant may take to validate a command and send a response. Once the timeout has elapsed for a request, the mediator will discard all responses for that request. Choose a lower value to reduce the time to reject a command in case one of the involved participants has high load / operational problems. Choose a higher value to reduce the likelihood of commands being rejected due to timeouts.

    mediatorReactionTimeout

    the maximum amount of time (w.r.t. the sequencer clock) that the mediator may take to validate the responses for a request and broadcast the result message. The mediator reaction timeout starts when the confirmation response timeout has elapsed. If the mediator does not send a result message within that timeout, participants must rollback the transaction underlying the request. Chooses a lower value to reduce the time to learn whether a command has been accepted. Choose a higher value to reduce the likelihood of commands being rejected due to timeouts.

    transferExclusivityTimeout

    this timeout affects who can initiate a transfer-in. Before the timeout, only the submitter of the transfer-out can initiate the corresponding transfer-in. After the timeout, every stakeholder of the contract can initiate a transfer-in, if it has not yet happened. Moreover, if this timeout is zero, no automatic transfer-ins will occur. Choose a low value, if you want to lower the time that contracts can be inactive due to ongoing transfers. TODO(andreas): Choosing a high value currently has no practical benefit, but will have benefits in a future version.

    topologyChangeDelay

    determines the offset applied to the topology transactions before they become active, in order to support parallel transaction processing

    ledgerTimeRecordTimeTolerance

    the maximum absolute difference between the ledger time and the record time of a command. If the absolute difference would be larger for a command, then the command must be rejected.

  7. case class InputContract(contract: SerializableContract, consumed: Boolean) extends HasProtoV0[protocol.v0.ViewParticipantData.InputContract] with PrettyPrinting with Product with Serializable
  8. type LedgerTransactionNodeStatistics = TransactionNodeStatistics
  9. type LfActionNode = Action

    Shorthand for Daml-LF "action" nodes (all node types besides "rollback" nodes)

  10. type LfChoiceName = Name
  11. type LfCommittedTransaction = T
  12. type LfContractId = daml.lf.value.Value.ContractId

    Shorthand for Daml-LF contract ids

  13. type LfContractIdString = ContractIdString

    Shorthand for Daml-LF contract id strings that Daml-LF contract ids are based on

  14. type LfContractInst = Versioned[ContractInstance]

    Shorthand for contract instances.

  15. type LfGlobalKey = GlobalKey

    Shorthand for global contract keys (with template_id).

  16. type LfGlobalKeyWithMaintainers = GlobalKeyWithMaintainers
  17. type LfHash = Hash
  18. type LfKeyWithMaintainers = KeyWithMaintainers

    Shorthand for contract keys ("local" within an lf transaction node).

  19. type LfLeafOnlyActionNode = LeafOnlyAction

    Shorthand for leaf only action nodes.

  20. type LfNode = Node

    Shorthand for Daml-LF nodes.

    Shorthand for Daml-LF nodes. Nodes include NodeIds of their children. Children need to be looked up in the underlying transaction.

  21. type LfNodeCreate = Create

    Shorthand for create nodes.

  22. type LfNodeExercises = Exercise

    Shorthand for exercise nodes.

    Shorthand for exercise nodes. Nodes include NodeIds of their children. Children need to be looked up in the underlying transaction.

  23. type LfNodeFetch = Fetch

    Shorthand for fetch nodes.

  24. type LfNodeId = NodeId
  25. type LfNodeLookupByKey = LookupByKey

    Shorthand for lookup by key nodes.

  26. type LfNodeRollback = Rollback

    Shorthand for rollback nodes.

  27. type LfSubmittedTransaction = T
  28. type LfTemplateId = Identifier
  29. type LfTransaction = Transaction

    Shorthand for Daml-LF transaction wrapped in versioned transaction in turn wrapped in committed or submitted transaction

  30. type LfTransactionVersion = TransactionVersion
  31. type LfVersionedTransaction = VersionedTransaction
  32. class LoggingAlarmStreamer extends AlarmStreamer
  33. case class MalformedContractId(id: String, message: String) extends Product with Serializable
  34. case class PackageDescription(packageId: LfPackageId, sourceDescription: String256M) extends Product with Serializable

    packageId

    the unique identifier for the package

    sourceDescription

    an informal human readable description of what the package contains

  35. trait PackageInfoService extends AnyRef
  36. trait Phase37Processor[RequestBatch] extends AnyRef
  37. final case class RequestAndRootHashMessage[RequestEnvelope](requestEnvelopes: NonEmptyList[RequestEnvelope], rootHashMessage: RootHashMessage[SerializedRootHashMessagePayload], mediatorId: MediatorId) extends Product with Serializable

    Request messages, along with the root hash message and the mediator ID that received the root hash message

  38. case class RequestId(ts: CantonTimestamp) extends PrettyPrinting with Product with Serializable

    A confirmation request is identified by the sequencer timestamp.

  39. type RequestProcessor[VT <: ViewType] = Phase37Processor[RequestAndRootHashMessage[OpenEnvelope[EncryptedViewMessage[VT]]]]
  40. case class ResolvedKey(key: LfGlobalKey, resolution: KeyResolution) extends HasProtoV0[protocol.v0.ViewParticipantData.ResolvedKey] with Product with Serializable
  41. case class RollbackContext extends HasProtoV0[protocol.v0.ViewParticipantData.RollbackContext] with NoCopy with PrettyPrinting with Product with Serializable

    RollbackContext tracks the location of lf transaction nodes or canton participant views within a hierarchy of LfNodeRollback suitable for maintaining the local position within the hierarchy of rollback nodes when iterating over a transaction.

  42. case class RootHash(hash: Hash) extends PrettyPrinting with HasCryptographicEvidence with Product with Serializable

    The root hash of a Merkle tree used as an identifier for requests.

    The root hash of a Merkle tree used as an identifier for requests.

    Extends com.digitalasset.canton.serialization.HasCryptographicEvidence so that RootHash's serialization can be used to compute the hash of an inner Merkle node from its children using RootHash.getCryptographicEvidence. Serialization to Protobuf fields can be done with RootHash.toProtoPrimitive

  43. case class SerializableContract(contractId: LfContractId, rawContractInstance: SerializableRawContractInstance, metadata: ContractMetadata, ledgerCreateTime: CantonTimestamp) extends HasVersionedWrapper[VersionedSerializableContract] with HasProtoV0[protocol.v0.SerializableContract] with PrettyPrinting with Product with Serializable

    Represents a serializable contract.

    Represents a serializable contract.

    contractId

    The ID of the contract.

    rawContractInstance

    The raw instance of the contract.

    metadata

    The metadata with stakeholders and signatories; can be computed from contract instance

    ledgerCreateTime

    The ledger time of the transaction creating the contract

  44. case class SerializableContractWithWitnesses(contract: SerializableContract, witnesses: Set[PartyId]) extends Product with Serializable

    Serializable contract with witnesses for contract add/import used in admin repairs.

    Serializable contract with witnesses for contract add/import used in admin repairs.

    contract

    serializable contract

    witnesses

    optional witnesses that observe the creation of the contract

  45. case class SerializableDeduplicationPeriod(deduplicationPeriod: DeduplicationPeriod) extends HasProtoV0[DeduplicationPeriod] with Product with Serializable
  46. case class SerializableRawContractInstance extends MemoizedEvidenceWithFailure[EncodeError] with Product with Serializable

    Represents a serializable contract instance and memoizes the serialization.

  47. final case class StaticDomainParameters(reconciliationInterval: PositiveSeconds, maxRatePerParticipant: NonNegativeInt, maxInboundMessageSize: NonNegativeInt, uniqueContractKeys: Boolean, requiredSigningKeySchemes: NonEmptySet[SigningKeyScheme], requiredEncryptionKeySchemes: NonEmptySet[EncryptionKeyScheme], requiredSymmetricKeySchemes: NonEmptySet[SymmetricKeyScheme], requiredHashAlgorithms: NonEmptySet[HashAlgorithm], requiredCryptoKeyFormats: NonEmptySet[CryptoKeyFormat], protocolVersion: ProtocolVersion) extends HasVersionedWrapper[VersionedStaticDomainParameters] with HasProtoV0[protocol.v0.StaticDomainParameters] with Product with Serializable
  48. case class StoredParties(parties: SortedSet[LfPartyId]) extends HasProtoV0[protocol.v0.StoredParties] with HasVersionedWrapper[VersionedStoredParties] with Product with Serializable
  49. case class TransactionId(hash: Hash) extends HasCryptographicEvidence with Product with Serializable

    A hash-based transaction id.

  50. case class TransactionMetadata(ledgerTime: CantonTimestamp, submissionTime: CantonTimestamp, seeds: Map[LfNodeId, LfHash]) extends Product with Serializable

    Collects the metadata of a LF transaction to the extent that is needed in Canton

    Collects the metadata of a LF transaction to the extent that is needed in Canton

    ledgerTime

    The ledger time of the transaction

    submissionTime

    The submission time of the transaction

    seeds

    The node seeds by node ID

  51. case class TransferId(originDomain: DomainId, requestTimestamp: CantonTimestamp) extends PrettyPrinting with HasProtoV0[protocol.v0.TransferId] with Product with Serializable

    A transfer is identified by the origin domain and the sequencer timestamp on the transfer-out request.

  52. final case class Unicum(unwrap: Hash) extends AnyVal with Product with Serializable

    A hash-based identifier for contracts.

    A hash-based identifier for contracts. Must be paired with a discriminator to obtain a complete contract ID.

  53. class UnicumGenerator extends AnyRef

    Generates Unicums for contract IDs such that the Unicum is a cryptographic commitment to the following:

    Generates Unicums for contract IDs such that the Unicum is a cryptographic commitment to the following:

    The commitment is implemented as a blinded hash with the view action salt as the blinding factor.

    The above data is split into two groups:

    The Unicum is then the cryptographic hash of the ContractSalt and the second group.

    The ContractSalt contains all the information that ensures uniqueness of contract IDs in Canton. The second group contains the information that is relevant for using the contract in transactions. The commitment to the information in the second group can be opened by revealing the ContractSalt. Since the ContractSalt is a blinded hash, such an opening does not reveal information about the data in the first group.

    Properties

    • If a transaction is added to the virtual domain ledger for a given domain, then the [[Unicum]] is globally unique unless a hash collision occurs.
      Contracts with the same Unicum must run over the same domain, have the same transaction UUID, and are handled by the same mediator. The definition of the virtual domain ledger ensures that transaction UUIDs are unique within the com.daml.api.util.LedgerEffectiveTimeTolerance and within the mediator handling the request, and that the sequencing time deviates from the ledger time by at most this tolerance. So two contracts with the same Unicum must be generated by the same transaction. However, the com.digitalasset.canton.data.ViewPosition and the create index uniquely identify the node in the transaction that creates the contract.

    We include both the com.digitalasset.canton.topology.DomainId and the com.digitalasset.canton.topology.MediatorId in the ContractSalt because we cannot exclude that mediators on different domains happen to have the same identifier and there may be mupltiple mediators on a domain.

    • If the submitter is honest and chooses a random transaction seed, the [[Unicum]] does not leak information about template arguments.
      The transaction seed's randomness propagates to the action seed through the seed derivation scheme. Since the honest submitter does not leak the transaction seed and shows the action seed only to the witnesses of the view, the ContractSalt looks random to non-witnesses of the view. Accordingly, the ContractSalt blinds the template arguments.
    • The [[Unicum]] authenticates the contract details (ledger time and template arguments) if the hash function is preimage resistant.
      By checking the hash of the ContractSalt and the contract details against the Unicum, everyone can verify that they fit together. As the hash function is preimage resistant, it is therefore computationally infeasible for a participant to find a different ContractSalt such that different contract details lead to the same hash.
    • Participants learning about the contract only through divulgence or disclosure do not learn in which transaction the contract was created unless the submitter or witnesses of the creation leak this information.
      By the honesty assumption, the action seed is a random value to those participants. Accordingly, since the ContractSalt contains all the information that ties the contract to a particular transaction, the participants cannot say which transaction with the same ledger time created the contract.
    • The [[Unicum]] does not leak the contract details when a contract ID is shown to a third party if the submitter and all witnesses and divulgees are honest.
      By the honesty assumption, the action seed is a random value to the third party, and so is the ContractSalt. This entropy hides the contract details to the third party.
  54. case class ViewHash(hash: Hash) extends PrettyPrinting with Product with Serializable

    A hash-based transaction view id

    A hash-based transaction view id

    Views from different requests may have the same view hash.

  55. case class WellFormedTransaction[+S <: State] extends NoCopy with Product with Serializable

    Used to mark a transaction to be well-formed.

    Used to mark a transaction to be well-formed. That means:

    • tx is well-formed according to the Daml-LF definition, i.e., a root node is not child of another node and every non-root node has exactly one parent and is reachable from a root node. (No cycles, no sharing, no orphaned node).
    • All node Ids are non-negative.
    • The type parameter S determines whether all create nodes have suffixed IDs or none.
    • Create nodes have unique contract ids of shape com.daml.lf.value.Value.ContractId.V1. The contract id of a create node is not referenced before the node. The contract id of a rolled back create node is not referenced outside its rollback scope.
    • The discriminators of create nodes without suffixed contract ids are unique among all discriminators that appear in the transaction.
    • Every action node has at least one signatory.
    • Every signatory is also a stakeholder.
    • Fetch actors are defined.
    • All created contract instances and choice arguments in the transaction can be serialized.
    • All nodes in the transaction have the optLocation field set to None.
    • metadata contains seeds exactly for those node IDs from tx that should have a seed (creates and exercises).
    • Keys of transaction nodes don't contain contract IDs.
    • The maintainers of keys are non-empty.
    • ByKey nodes have a key.
    • All parties referenced by the transaction can be converted to com.digitalasset.canton.topology.PartyId
    • The transaction has the optUsedPackages set to scala.None$
    • Every rollback node has at least one child and no rollback node appears at the root unless the transaction has been merged by Canton.
  56. case class WithContractHash[+A](x: A, contractHash: LfHash) extends Product with Serializable
  57. case class WithContractMetadata[+A](x: A, metadata: ContractMetadata) extends Product with Serializable
  58. case class WithRollbackScope[T](rbScope: RollbackScope, unwrap: T) extends Product with Serializable
  59. case class WithTransactionId[+A](x: A, transactionId: TransactionId) extends Product with Serializable

Value Members

  1. val LedgerTransactionNodeStatistics: TransactionNodeStatistics.type
  2. val LfChoiceName: ChoiceName.type
  3. val LfCommittedTransaction: CommittedTransaction.type
  4. val LfContractId: daml.lf.value.Value.ContractId.type
  5. val LfContractIdString: ContractIdString.type
  6. val LfContractInst: VersionedContractInstance.type
  7. val LfGlobalKey: GlobalKey.type
  8. val LfGlobalKeyWithMaintainers: GlobalKeyWithMaintainers.type
  9. val LfHash: Hash.type
  10. val LfKeyWithMaintainers: KeyWithMaintainers.type
  11. val LfNodeCreate: Create.type
  12. val LfNodeExercises: Exercise.type
  13. val LfNodeFetch: Fetch.type
  14. val LfNodeId: NodeId.type
  15. val LfNodeLookupByKey: LookupByKey.type
  16. val LfNodeRollback: Rollback.type
  17. val LfSubmittedTransaction: SubmittedTransaction.type
  18. val LfTemplateId: TypeConName.type
  19. val LfTransaction: daml.lf.CantonOnly.LfTransaction.type
  20. val LfTransactionVersion: TransactionVersion.type
  21. val LfVersionedTransaction: VersionedTransaction.type
  22. object ConfirmationPolicy extends Serializable
  23. object ContractId
  24. object ContractIdSyntax
  25. object ContractMetadata extends HasVersionedWrapperCompanion[VersionedContractMetadata, ContractMetadata] with Serializable
  26. object ContractSalt extends Serializable
  27. object CreatedContract extends Serializable
  28. object DynamicDomainParameters extends HasVersionedWrapperCompanion[VersionedDynamicDomainParameters, DynamicDomainParameters] with Serializable
  29. object GlobalKeySerialization
  30. object InputContract extends Serializable
  31. object LfHashSyntax
  32. object PackageDescription extends Serializable
  33. object RequestId extends Serializable
  34. object ResolvedKey extends Serializable
  35. object RollbackContext extends Serializable
  36. object RootHash extends Serializable
  37. object SerializableContract extends HasVersionedWrapperCompanion[VersionedSerializableContract, SerializableContract] with Serializable
  38. object SerializableDeduplicationPeriod extends Serializable
  39. object SerializableRawContractInstance extends Serializable
  40. object StaticDomainParameters extends HasVersionedWrapperCompanion[VersionedStaticDomainParameters, StaticDomainParameters] with Serializable
  41. object StoredParties extends HasVersionedWrapperCompanion[VersionedStoredParties, StoredParties] with Serializable
  42. object TransactionId extends Serializable
  43. object TransactionMetadata extends Serializable
  44. object TransferId extends Serializable
  45. object ViewHash extends Serializable
  46. object WellFormedTransaction extends Serializable
  47. object WithContractHash extends Serializable
  48. object WithContractMetadata extends Serializable
  49. object WithTransactionId extends Serializable

Inherited from AnyRef

Inherited from Any

Ungrouped