Daml.Script¶
Data Types¶
data Commands a
This is used to build up the commands send as part of
submit
. If you enable theApplicativeDo
extension by adding{-# LANGUAGE ApplicativeDo #-}
at the top of your file, you can usedo
-notation but the individual commands must not depend on each other and the last statement in ado
block must be of the formreturn expr
orpure expr
.instance HasSubmit Script Commands
instance Applicative Commands
instance HasField "commands" (SubmitCmd a) (Commands a)
instance HasField "commands" (SubmitMustFailCmd a) (Commands a)
instance HasField "commands" (SubmitTreePayload a) (Commands ())
data Disclosure
instance Eq Disclosure
instance Ord Disclosure
instance HasField "blob" Disclosure Text
instance HasField "contractId" Disclosure (ContractId ())
instance HasField "disclosures" (SubmitCmd a) [Disclosure]
instance HasField "disclosures" (SubmitMustFailCmd a) [Disclosure]
instance HasField "disclosures" (SubmitTreePayload a) [Disclosure]
instance HasField "templateId" Disclosure TemplateTypeRep
data InvalidUserId
Thrown if text for a user identifier does not conform to the format restriction.
Field Type Description m Text instance Eq InvalidUserId
instance Show InvalidUserId
instance HasFromAnyException InvalidUserId
instance HasMessage InvalidUserId
instance HasThrow InvalidUserId
instance HasToAnyException InvalidUserId
instance HasField "m" InvalidUserId Text
data ParticipantName
Field Type Description participantName Text instance HasField "participantName" ParticipantName Text
data PartyDetails
The party details returned by the party management service.
instance Eq PartyDetails
instance Ord PartyDetails
instance Show PartyDetails
instance HasField "continue" (ListKnownPartiesPayload a) ([PartyDetails] -> a)
instance HasField "displayName" PartyDetails (Optional Text)
instance HasField "isLocal" PartyDetails Bool
instance HasField "party" PartyDetails Party
data PartyIdHint
A hint to the backing participant what party id to allocate. Must be a valid PartyIdString (as described in @value.proto@).
Field Type Description partyIdHint Text instance HasField "partyIdHint" PartyIdHint Text
data Script a
This is the type of A Daml script.
Script
is an instance ofAction
, so you can usedo
notation.instance ActionCatch Script
instance ActionThrow Script
instance HasSubmit Script Commands
instance ActionFail Script
instance Applicative Script
instance HasField "dummy" (Script a) ()
instance HasField "runScript" (Script a) (() -> Free ScriptF (a, ()))
data User
User-info record for a user in the user management service.
instance HasField "continue" (GetUserPayload a) (Optional User -> a)
instance HasField "continue" (ListAllUsersPayload a) ([User] -> a)
instance HasField "primaryParty" User (Optional Party)
data UserAlreadyExists
Thrown if a user to be created already exists.
Field Type Description userId UserId instance Eq UserAlreadyExists
instance Show UserAlreadyExists
instance HasFromAnyException UserAlreadyExists
instance HasMessage UserAlreadyExists
instance HasThrow UserAlreadyExists
instance HasToAnyException UserAlreadyExists
instance HasField "userId" UserAlreadyExists UserId
data UserId
Identifier for a user in the user management service.
instance HasField "userId" (DeleteUserPayload a) UserId
instance HasField "userId" (GetUserPayload a) UserId
instance HasField "userId" (GrantUserRightsPayload a) UserId
instance HasField "userId" (ListUserRightsPayload a) UserId
instance HasField "userId" (RevokeUserRightsPayload a) UserId
instance HasField "userId" User UserId
instance HasField "userId" UserAlreadyExists UserId
instance HasField "userId" UserNotFound UserId
data UserNotFound
Thrown if a user cannot be located for a given user identifier.
Field Type Description userId UserId instance Eq UserNotFound
instance Show UserNotFound
instance HasFromAnyException UserNotFound
instance HasMessage UserNotFound
instance HasThrow UserNotFound
instance HasToAnyException UserNotFound
instance HasField "userId" UserNotFound UserId
data UserRight
The rights of a user.
instance HasField "continue" (GrantUserRightsPayload a) (Optional [UserRight] -> a)
instance HasField "continue" (ListUserRightsPayload a) (Optional [UserRight] -> a)
instance HasField "continue" (RevokeUserRightsPayload a) (Optional [UserRight] -> a)
instance HasField "rights" (CreateUserPayload a) [UserRight]
instance HasField "rights" (GrantUserRightsPayload a) [UserRight]
instance HasField "rights" (RevokeUserRightsPayload a) [UserRight]
Functions¶
- query
: (Template t, HasAgreement t, IsParties p) => p -> Script [(ContractId t, t)]
Query the set of active contracts of the template that are visible to the given party.
- queryFilter
: (Template c, HasAgreement c, IsParties p) => p -> (c -> Bool) -> Script [(ContractId c, c)]
Query the set of active contracts of the template that are visible to the given party and match the given predicate.
- queryContractId
: (Template t, HasAgreement t, IsParties p, HasCallStack) => p -> ContractId t -> Script (Optional t)
Query for the contract with the given contract id.
Returns
None
if there is no active contract the party is a stakeholder on.WARNING: Over the gRPC and with the JSON API in-memory backend this performs a linear search so only use this if the number of active contracts is small.
This is semantically equivalent to calling
query
and filtering on the client side.
- queryInterface
: (Template i, HasInterfaceView i v, IsParties p) => p -> Script [(ContractId i, Optional v)]
Query the set of active contract views for an interface that are visible to the given party. If the view function fails for a given contract id, The
Optional v
will beNone
.WARNING: Information about instances with failed-views is not currently returned over the JSON API: the
Optional v
will beSome _
for every element in the returned list.
- queryInterfaceContractId
: (Template i, HasInterfaceView i v, IsParties p, HasCallStack) => p -> ContractId i -> Script (Optional v)
Query for the contract view with the given contract id.
Returns
None
if there is no active contract the party is a stakeholder on.Returns
None
if the view function fails for the given contract id.WARNING: Over the gRPC and with the JSON API in-memory backend this performs a linear search so only use this if the number of active contracts is small.
This is semantically equivalent to calling
queryInterface
and filtering on the client side.
- queryDisclosure
: (Template t, HasAgreement t, IsParties p, HasCallStack) => p -> ContractId t -> Script (Optional Disclosure)
like by queryContractId but return the contract as a explicit disclosure blob
WARNING: Over the gRPC this performs a linear search so only use this if the number of active contracts is small. Not supported by JSON API
- queryContractKey
: (HasCallStack, TemplateKey t k, IsParties p) => p -> k -> Script (Optional (ContractId t, t))
Returns
None
if there is no active contract with the given key that the party is a stakeholder on.WARNING: Over the gRPC and with the JSON API in-memory backend this performs a linear search so only use this if the number of active contracts is small.
This is semantically equivalent to calling
query
and filtering on the client side.
- setTime
: HasCallStack => Time -> Script ()
Set the time via the time service.
This is only supported in Daml Studio and
daml test
as well as when running over the gRPC API against a ledger in static time mode.Note that the ledger time service does not support going backwards in time. However, you can go back in time in Daml Studio.
- passTime
-
Advance ledger time by the given interval.
This is only supported in Daml Studio and
daml test
as well as when running over the gRPC API against a ledger in static time mode. Note that this is not an atomic operation over the gRPC API so no other clients should try to change time while this is running.Note that the ledger time service does not support going backwards in time. However, you can go back in time in Daml Studio.
- allocateParty
: HasCallStack => Text -> Script Party
Allocate a party with the given display name using the party management service.
- allocatePartyWithHint
: HasCallStack => Text -> PartyIdHint -> Script Party
Allocate a party with the given display name and id hint using the party management service.
- allocatePartyOn
: Text -> ParticipantName -> Script Party
Allocate a party with the given display name on the specified participant using the party management service.
- allocatePartyWithHintOn
: Text -> PartyIdHint -> ParticipantName -> Script Party
Allocate a party with the given display name and id hint on the specified participant using the party management service.
- listKnownParties
: HasCallStack => Script [PartyDetails]
List the parties known to the default participant.
- listKnownPartiesOn
: HasCallStack => ParticipantName -> Script [PartyDetails]
List the parties known to the given participant.
- sleep
: HasCallStack => RelTime -> Script ()
Sleep for the given duration.
This is primarily useful in tests where you repeatedly call
query
until a certain state is reached.Note that this will sleep for the same duration in both wall clock and static time mode.
- submitWithDisclosures
: HasCallStack => Party -> [Disclosure] -> Commands a -> Script a
submitWithDisclosures p disc cmds
submits the commandscmds
as a single transaction from partyp
with the explicit disclosuresdisc
and returns the value returned bycmds
. If the transaction fails,submit
also fails.
- submitWithDisclosuresMustFail
: HasCallStack => Party -> [Disclosure] -> Commands a -> Script ()
submitWithDisclosures p disc cmds
submits the commandscmds
as a single transaction from partyp
with the explicit disclosuresdisc
It only succeeds if the submitting the transaction fails.
- submitMulti
: HasCallStack => [Party] -> [Party] -> Commands a -> Script a
submitMulti actAs readAs cmds
submitscmds
as a single transaction authorized byactAs
. Fetched contracts must be visible to at least one party in the union of actAs and readAs.
- submitMultiMustFail
: HasCallStack => [Party] -> [Party] -> Commands a -> Script ()
submitMultiMustFail actAs readAs cmds
behaves likesubmitMulti actAs readAs cmds
but fails whensubmitMulti
succeeds and the other way around.
- submitMultiWithDisclosures
: HasCallStack => [Party] -> [Party] -> [Disclosure] -> Commands a -> Script a
submitMultiWithDisclosures actAs readAs disc cmds
submitscmds
as a single transaction authorized byactAs
with explicit disclosuresdisc
. Fetched contracts, except explicit disclosed ones, must be visible to at least one party in the union of actAs and readAs.
- submitMultiWithDisclosuresMustFail
: HasCallStack => [Party] -> [Party] -> [Disclosure] -> Commands a -> Script ()
submitMultiWithDisclosuresMustFail actAs readAs disc cmds
behaves likesubmitMultiWithDisclosures actAs readAs disc cmds
but fails whensubmitMulti
succeeds and the other way around.
- createCmd
: (Template t, HasAgreement t) => t -> Commands (ContractId t)
Create a contract of the given template.
- exerciseCmd
: Choice t c r => ContractId t -> c -> Commands r
Exercise a choice on the given contract.
- exerciseByKeyCmd
: (TemplateKey t k, Choice t c r) => k -> c -> Commands r
Exercise a choice on the contract with the given key.
- createAndExerciseCmd
: (Template t, Choice t c r, HasAgreement t) => t -> c -> Commands r
Create a contract and exercise a choice on it in the same transaction.
- archiveCmd
: Choice t Archive () => ContractId t -> Commands ()
Archive the given contract.
archiveCmd cid
is equivalent toexerciseCmd cid Archive
.
- script
-
Convenience helper to declare you are writing a Script.
This is only useful for readability and to improve type inference. Any expression of type
Script a
is a valid script regardless of whether it is implemented usingscript
or not.
- userIdToText
-
Extract the name-text from a user identitifer.
- validateUserId
: HasCallStack => Text -> Script UserId
Construct a user identifer from text. May throw InvalidUserId.
- createUser
: HasCallStack => User -> [UserRight] -> Script ()
Create a user with the given rights. May throw UserAlreadyExists.
- createUserOn
: HasCallStack => User -> [UserRight] -> ParticipantName -> Script ()
Create a user with the given rights on the given participant. May throw UserAlreadyExists.
- getUser
: HasCallStack => UserId -> Script User
Fetch a user record by user id. May throw UserNotFound.
- getUserOn
: HasCallStack => UserId -> ParticipantName -> Script User
Fetch a user record by user id from the given participant. May throw UserNotFound.
- listAllUsers
-
List all users. This function may make multiple calls to underlying paginated ledger API.
- listAllUsersOn
: ParticipantName -> Script [User]
List all users on the given participant. This function may make multiple calls to underlying paginated ledger API.
- grantUserRights
: HasCallStack => UserId -> [UserRight] -> Script [UserRight]
Grant rights to a user. Returns the rights that have been newly granted. May throw UserNotFound.
- grantUserRightsOn
: HasCallStack => UserId -> [UserRight] -> ParticipantName -> Script [UserRight]
Grant rights to a user on the given participant. Returns the rights that have been newly granted. May throw UserNotFound.
- revokeUserRights
: HasCallStack => UserId -> [UserRight] -> Script [UserRight]
Revoke rights for a user. Returns the revoked rights. May throw UserNotFound.
- revokeUserRightsOn
: HasCallStack => UserId -> [UserRight] -> ParticipantName -> Script [UserRight]
Revoke rights for a user on the given participant. Returns the revoked rights. May throw UserNotFound.
- deleteUser
: HasCallStack => UserId -> Script ()
Delete a user. May throw UserNotFound.
- deleteUserOn
: HasCallStack => UserId -> ParticipantName -> Script ()
Delete a user on the given participant. May throw UserNotFound.
- listUserRights
: HasCallStack => UserId -> Script [UserRight]
List the rights of a user. May throw UserNotFound.
- listUserRightsOn
: HasCallStack => UserId -> ParticipantName -> Script [UserRight]
List the rights of a user on the given participant. May throw UserNotFound.
- submitUser
: HasCallStack => UserId -> Commands a -> Script a
Submit the commands with the actAs and readAs claims granted to a user. May throw UserNotFound.
- submitUserOn
: HasCallStack => UserId -> ParticipantName -> Commands a -> Script a
Submit the commands with the actAs and readAs claims granted to the user on the given participant. May throw UserNotFound.