Daml.Script
Daml.Script
The Daml Script testing library.
Typeclasses
class IsSubmitOptions options where
Defines a type that can be transformed into a SubmitOptions
toSubmitOptions: options -> SubmitOptions
class Applicative script => ScriptSubmit script where
Defines an applicative that can run transaction submissions. Usually this is simply
liftSubmissionScript.: HasCallStack => ConcurrentSubmits a -> script a
Data Types
data InvalidUserId
Thrown if text for a user identifier does not conform to the format restriction.
Field
Type
Description
m
data User
data UserAlreadyExists
Thrown if a user to be created already exists.
Field
Type
Description
userId
data UserId
data UserNotFound
Thrown if a user cannot be located for a given user identifier.
Field
Type
Description
userId
data UserRight
data ConcurrentSubmits a
Applicative that allows for multiple concurrent transaction submissions See
concurrentlyfor usage of this type.
Field
Type
Description
submits
[Submission]
continue
[Either SubmitError ([CommandResult], TransactionTree)] -> a
data PackageId
data SubmitOptions
Options to detemine the stakeholders of a transaction, as well as disclosures. Intended to be specified using the
actAs,readAsanddisclosebuilders, combined using the Semigroup concat(<>)operator.actAs alice <> readAs [alice, bob] <> disclose myContractNote that actAs and readAs follows the same party derivation rules as
signatory, see their docs for examples. All submissions must specify at least oneactAsparty, else a runtime error will be thrown. A minimum submission may look likeactAs alice `submit` createCmd MyContract with party = aliceFor backwards compatibility, a single or set of parties can be provided in place of the
SubmitOptionstosubmit, which will represent theactAsfield. The above example could be reduced toalice `submit` createCmd MyContract with party = alice
data CryptoErrorType
Daml Crypto (Secp256k1) related submission errors
Field
Type
Description
value
Field
Type
Description
keyValue
Field
Type
Description
signatureValue
data SubmitError
Errors that can be thrown by a command submission via
trySubmitContract with given contract ID could not be found, and has never existed on this participant When run on Canton, there may be more than one contract ID, and additionalDebuggingInfo is always None On the other hand, when run on IDELedger, there is only ever one contract ID, and additionalDebuggingInfo is always Some
Field
Type
Description
unknownContractIds
Provided as text, as we do not know the template ID of a contract if the lookup fails
additionalDebuggingInfo
should always be None in Canton’s case, see https://github.com/digital-asset/daml/issues/17154
Contract with given contract key could not be found
Field
Type
Description
contractKey
No vetted package with given package name could be found
Field
Type
Description
packageName
Generic authorization failure, included missing party authority, invalid signatories, etc.
Field
Type
Description
authorizationErrorMessage
Failed to hash a contract
Field
Type
Description
contractId
dstTemplateId
createArg
errorMessage
DisclosedContractKeyHashingError
Given disclosed contract key does not match the contract key of the contract on ledger.
Field
Type
Description
contractId
expectedKey
givenKeyHash
Attempted to create a contract with a contract key that already exists
Field
Type
Description
duplicateContractKey
Canton will often not provide this key, IDELedger will
Contract key lookup yielded different results
Field
Type
Description
contractKey
Unhandled user thrown exception
Field
Type
Description
exc
Errors more complex than simple records cannot currently be encoded over the grpc status. Such errors will be missing here.
Transaction failure due to abort/assert calls pre-exceptions
Field
Type
Description
userErrorMessage
Failure due to false result from
ensure, strictly pre-exception. According to docs, not throwable with LF >= 1.14. On LF >= 1.14, a failedensurewill result in aPreconditionFailedexception wrapped inUnhandledException.CreateEmptyContractKeyMaintainers
Attempted to create a contract with empty contract key maintainers
Field
Type
Description
invalidTemplate
FetchEmptyContractKeyMaintainers
Attempted to fetch a contract with empty contract key maintainers
Field
Type
Description
failedTemplateKey
Attempted to exercise/fetch a contract with the wrong template type
Field
Type
Description
contractId
Any contract Id of the actual contract
expectedTemplateId
actualTemplateId
ContractDoesNotImplementInterface
Attempted to use a contract as an interface that it does not implement
Field
Type
Description
contractId
templateId
interfaceId
ContractDoesNotImplementRequiringInterface
Attempted to use a contract as a required interface that it does not implement
Field
Type
Description
contractId
templateId
requiredInterfaceId
requiringInterfaceId
Attempted to compare values that are not comparable
Illegal Contract ID found in Contract Key
(no fields)
Attempted to compare incomparable contract IDs. You’re doing something very wrong. Two contract IDs with the same prefix are incomparable if one of them is local and the other non-local or if one is relative and the other relative or absolute with a different suffix.
Field
Type
Description
globalExistingContractId
We do not know the template ID at time of comparison.
A value has been nested beyond a given depth limit
Field
Type
Description
limit
Nesting limit that was exceeded
The transaction refers to locked contracts which are in the process of being created, transferred, or archived by another transaction. If the other transaction fails, this transaction could be successfully retried.
Field
Type
Description
localVerdictLockedContracts
Locked contract ids
The transaction refers to locked keys which are in the process of being modified by another transaction.
Field
Type
Description
localVerdictLockedKeys
Locked contract keys
Upgrade exception
Field
Type
Description
errorType
errorMessage
Exception resulting from call to
failWithStatus
Field
Type
Description
failureStatus
Crypto exceptions
Field
Type
Description
cryptoErrorType
cryptoErrorMessage
Rollback exceptions
Field
Type
Description
effectfulRollbackErrorMsg
Development feature exceptions
Field
Type
Description
devErrorType
DevErrorType
devErrorMessage
Generic catch-all for missing errors.
Field
Type
Description
unknownErrorMessage
data UpgradeErrorType
SCU related submission errors
Field
Type
Description
coid
srcTemplateId
dstTemplateId
srcPackageName
dstPackageName
originalSignatories
[Party]
originalObservers
[Party]
originalKeyOpt
Optional (AnyContractKey, [Party])
recomputedSignatories
[Party]
recomputedObservers
[Party]
recomputedKeyOpt
Optional (AnyContractKey, [Party])
Field
Type
Description
mCoid
srcTemplateId
dstTemplateId
createArg
Field
Type
Description
coid
srcTemplateId
dstTemplateId
createArg
data Created
Field
Type
Description
contractId
argument
data CreatedIndexPayload t
Field
Type
Description
templateId
offset
data Exercised
Field
Type
Description
contractId
choice
argument
childEvents
data ExercisedIndexPayload t
Field
Type
Description
templateId
choice
offset
child
data TransactionTree
Field
Type
Description
rootEvents
data TreeEvent
data TreeIndex t
data AnyContractId
Field
Type
Description
templateId
contractId
ContractId ()
data ParticipantName
Participant name for multi-participant script runs to address a specific participant
Field
Type
Description
participantName
data PartyDetails
The party details returned by the party management service.
data PartyIdHint
type PrivateKeyHexA hint to the backing participant what party id to allocate. Must be a valid PartyIdString (as described in @value.proto@).
Field
Type
Description
partyIdHint
= BytesHex
A DER formatted private key to be used for ECDSA message signing
data Secp256k1KeyPair
Secp256k1 key pair generated by
secp256k1generatekeypairfor testing.
Field
Type
Description
privateKey
publicKey
data AnyContractKey
Existential contract key type that can wrap an arbitrary contract key.
data Commands a
This is used to build up the commands sent as part of
submit. If you enable theApplicativeDoextension 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 adoblock must be of the formreturn exprorpure expr.
Field
Type
Description
commands
[CommandWithMeta]
continue
[CommandResult] -> a
data Disclosure
Contract disclosures which can be acquired via
queryDisclosure
Field
Type
Description
templateId
contractId
ContractId ()
blob
data Script a
This is the type of A Daml script.
Scriptis an instance ofAction, so you can usedonotation.
Field
Type
Description
runScript
() -> Free ScriptF (a, ())
HIDE We use an inlined StateT () to separate evaluation of something of type Script from execution and to ensure proper sequencing of evaluation. This is mainly so that
debugdoes something slightly more sensible.dummy
()
HIDE Dummy field to make sure damlc does not consider this an old-style typeclass.
Functions
userIdToTextExtract 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.
listAllUsersList 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.
setTime: HasCallStack => Time -> Script ()
Set the time via the time service.
This is only supported in Daml Studio and dpm 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.
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.
passTimeAdvance ledger time by the given interval.
This is only supported in Daml Studio and dpm 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.
actAs: IsParties parties => parties -> SubmitOptions
Builds a SubmitOptions with given actAs parties.
Any given submission must include at least one actAs party.
Note that the parties type is constrainted by IsParties, allowing for specifying parties as any of the following:
Party
[Party]
NonEmpty Party
Set Party
Optional Party
: IsParties parties => parties -> SubmitOptions
Builds a SubmitOptions with given readAs parties.
A given submission may omit any readAs parties and still be valid.
Note that the parties type is constrainted by IsParties, allowing for specifying parties as any of the following:
Party
[Party]
NonEmpty Party
Set Party
Optional Party
: [Disclosure] -> SubmitOptions
Provides many Explicit Disclosures to the transaction.
disclose: Disclosure -> SubmitOptions
Provides an Explicit Disclosure to the transaction.
packagePreference: [PackageId] -> SubmitOptions
Provide a package id selection preference for upgrades for a submission
prefetchKeys: [AnyContractKey] -> SubmitOptions
Provide a list of contract keys to prefetch for a submission
concurrently: HasCallStack => ConcurrentSubmits a -> Script a
Allows for concurrent submission of transactions, using an applicative, similar to Commands.
Concurrently takes a computation in ConcurrentSubmits, which supports all the existing submit functions
that Script supports. It however does not implement Action, and thus does not support true binding and computation interdependence
NOTE: The submission order of transactions within concurrently is deterministic, this function is not intended to test contention.
It is only intended to allow faster submission of many unrelated transactions, by not waiting for completion for each transaction before
sending the next.
Example:
exerciseResult <- concurrently $ do
alice `submit` createCmd ...
res <- alice `submit` exerciseCmd ...
bob `submit` createCmd ...
pure res
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script (a, TransactionTree)
Equivalent to submit but returns the result and the full transaction tree.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script (Either SubmitError (a, TransactionTree))
Equivalent to trySubmit but returns the result and the full transaction tree.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script SubmitError
Equivalent to submitMustFail but returns the error thrown.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script a
submit p cmds submits the commands cmds as a single transaction
from party p and returns the value returned by cmds.
The options field can either be any "Parties" like type (See IsParties) or SubmitOptions
which allows for finer control over parameters of the submission.
If the transaction fails, submit also fails.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script a
Warning
DEPRECATED:
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script TransactionTree
Equivalent to submit but returns the full transaction tree.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script (Either SubmitError a)
Submit a transaction and recieve back either the result, or a SubmitError.
In the majority of failures, this will not crash at runtime.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script (Either SubmitError TransactionTree)
Equivalent to trySubmit but returns the full transaction tree.
: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script ()
submitMustFail p cmds submits the commands cmds as a single transaction
from party p.
See submitWithOptions for details on the options field
It only succeeds if the submitting the transaction fails.
submitMustFailWithOptions: (HasCallStack, ScriptSubmit script, IsSubmitOptions options) => options -> Commands a -> script ()
Warning
DEPRECATED:
: (HasCallStack, ScriptSubmit script) => [Party] -> [Party] -> Commands a -> script a
Warning
DEPRECATED:
submit, actAs and readAs separatelysubmitMulti actAs readAs cmds submits cmds as a single transaction
authorized by actAs. Fetched contracts must be visible to at least
one party in the union of actAs and readAs.
Note: This behaviour can be achieved using submit (actAs actors <> readAs readers) cmds
and is only provided for backwards compatibility.
: (HasCallStack, ScriptSubmit script) => [Party] -> [Party] -> Commands a -> script ()
Warning
DEPRECATED:
submitMustFail, actAs and readAs separatelysubmitMultiMustFail actAs readAs cmds behaves like submitMulti actAs readAs cmds
but fails when submitMulti succeeds and the other way around.
Note: This behaviour can be achieved using submitMustFail (actAs actors <> readAs readers) cmds
and is only provided for backwards compatibility.
: (HasCallStack, ScriptSubmit script) => [Party] -> [Party] -> Commands a -> script TransactionTree
Warning
DEPRECATED:
submitTree, actAs and readAs separatelyEquivalent to submitMulti but returns the full transaction tree.
Note: This behaviour can be achieved using submitTree (actAs actors <> readAs readers) cmds
and is only provided for backwards compatibility.
: (HasCallStack, ScriptSubmit script) => [Party] -> [Party] -> Commands a -> script (Either SubmitError a)
Warning
DEPRECATED:
trySubmit, actAs and readAs separatelyAlternate version of trySubmit that allows specifying the actAs and readAs parties.
Note: This behaviour can be achieved using trySubmit (actAs actors <> readAs readers) cmds
and is only provided for backwards compatibility.
: HasCallStack => Party -> [Commands a] -> Script [Either SubmitError a]
Warning
DEPRECATED:
concurrent and trySubmit separately: HasCallStack => Party -> [Disclosure] -> Commands a -> Script a
Warning
DEPRECATED:
trySubmit and disclosures separately: HasCallStack => Party -> [Disclosure] -> Commands a -> Script ()
Warning
DEPRECATED:
submitMustFail and disclosures separately: Template t => TransactionTree -> TreeIndex t -> ContractId t
Finds the contract id of an event within a tree given a tree index
Tree indices are created using the created(N) and exercised(N) builders
which allow building "paths" within a transaction to a create node
For example, exercisedN @MyTemplate1 "MyChoice" 2 $ createdN @MyTemplate2 1
would find the ContractId MyTemplate2 of the second (0 index) create event under
the 3rd exercise event of MyChoice from MyTemplate1
: HasTemplateTypeRep t => TreeIndex t
Index for the first create event of a given template
e.g. created @MyTemplate
: HasTemplateTypeRep t => Int -> TreeIndex t
Index for the Nth create event of a given template
e.g. createdN 2 @MyTemplate
created = createdN 0
: HasTemplateTypeRep t => Text -> TreeIndex t’ -> TreeIndex t’
Index for the first exercise of a given choice on a given template
e.g. exercised @MyTemplate "MyChoice"
: HasTemplateTypeRep t => Text -> Int -> TreeIndex t’ -> TreeIndex t’
Index for the Nth exercise of a given choice on a given template
e.g. exercisedN @MyTemplate "MyChoice" 2
exercised c = exercisedN c 0
: Template t => AnyContractId -> Optional (ContractId t)
query: (Template t, HasEnsure 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, HasEnsure 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, HasEnsure 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 backend this performs a linear search over all contracts of the same type, 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.
: (Template t, IsParties p, HasCallStack) => p -> ContractId t -> Script (Optional Disclosure)
Queries a Disclosure for a given ContractId. Same performance caveats apply as to queryContractId.
: (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 be None.
: (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 backend this performs a linear search over all contracts of the same type, 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.
: (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 backend this performs a linear search over all contracts of the same type, 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.
: (HasCallStack, TemplateKey t k, IsParties p) => p -> Int -> k -> Script [(ContractId t, t)]
Returns N contracts matching a key, returns empty list if the key is inactive Only available in LF 2.3+
WARNING: Over the gRPC backend this performs a linear search over all contracts of the same type, 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.
: (HasCallStack, TemplateKey t k, IsParties p) => p -> k -> Script [(ContractId t, t)]
Returns all contracts matching a key, returns empty list if the key is inactive Only available in LF 2.3+
WARNING: Over the gRPC backend this performs a linear search over all contracts of the same type, 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.
: HasCallStack => Text -> Script Party
Allocate a party with the given display name using the party management service.
allocatePartyWithHint: HasCallStack => Text -> PartyIdHint -> Script Party
Warning
DEPRECATED:
: HasCallStack => PartyIdHint -> Script Party
Allocate a party with the given 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
Warning
DEPRECATED:
: PartyIdHint -> ParticipantName -> Script Party
Allocate a party with the given 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.
tryToEither: (() -> Script t) -> Script (Either AnyException t)
Named version of the try catch behaviour of Daml-Script.
Note that this is no more powerful than try catch in daml-script, and will not catch exceptions in submissions.
(Use trySubmit for this)
Input computation is deferred to catch pure exceptions
: Script a -> Script (Either FailureStatus a)
Runs a script for a result. If it fails either by Daml Exceptions or failWithStatus, returns the
FailureStatus that a Canton Ledger would return.
: HasCallStack => PrivateKeyHex -> BytesHex -> Script BytesHex
Using a DER formatted private key (encoded as a hex string) use Secp256k1 to sign a hex encoded string message.
Note that this implementation uses a random source with a fixed PRNG and seed, ensuring it behaves deterministically during testing.
For example, CCTP attestation services may be mocked in daml-script code.
secp256k1sign: HasCallStack => PrivateKeyHex -> BytesHex -> Script BytesHex
Using a DER formatted private key (encoded as a hex string) use Secp256k1 to sign a SHA256 digest of a hex encoded string message.
Note that this implementation uses a random source with a fixed PRNG and seed, ensuring it behaves deterministically during testing.
For example, CCTP attestation services may be mocked in daml-script code.
secp256k1generatekeypair: HasCallStack => Script Secp256k1KeyPair
Generate DER formatted Secp256k1 public/private key pairs.
toAnyContractKey: (HasTemplateTypeRep t, TemplateKey t k) => k -> AnyContractKey
Wrap a contract key in AnyContractKey.
You must pass the template type t using an explicit type application.
For example toAnyContractKey @Proposal k.
: (HasTemplateTypeRep t, TemplateKey t k) => AnyContractKey -> Optional k
Extract the underlying key from AnyContractKey if the template and
choice types match, or return None.
You must pass the template type t using an explicit type application.
For example fromAnyContractKey @Proposal k.
: (Template t, HasEnsure 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.
createAndExerciseWithCidCmd: (Template t, Choice t c r, HasEnsure t) => t -> c -> Commands (ContractId t, r)
Create a contract and exercise a choice on it in the same transaction, returns the created ContractId, and the choice result.
createAndExerciseCmd: (Template t, Choice t c r, HasEnsure t) => t -> c -> Commands r
Create a contract and exercise a choice on it in the same transaction, returns only the choice result.
createExactCmd: (Template t, HasEnsure t) => t -> Commands (ContractId t)
Create a contract of the given template, using the exact package ID of the template given - upgrades are disabled.
exerciseExactCmd: Choice t c r => ContractId t -> c -> Commands r
Exercise a choice on the given contract, using the exact package ID of the template given - upgrades are disabled.
exerciseByKeyExactCmd: (TemplateKey t k, Choice t c r) => k -> c -> Commands r
Exercise a choice on the contract with the given key, using the exact package ID of the template given - upgrades are disabled.
createAndExerciseWithCidExactCmd: (Template t, Choice t c r, HasEnsure t) => t -> c -> Commands (ContractId t, r)
Create a contract and exercise a choice on it in the same transaction, returns the created ContractId, and the choice result. Uses the exact package ID of the template given - upgrades are disabled.
createAndExerciseExactCmd: (Template t, Choice t c r, HasEnsure t) => t -> c -> Commands r
Create a contract and exercise a choice on it in the same transaction, returns only the choice result.
archiveCmd: Choice t Archive () => ContractId t -> Commands ()
Archive the given contract.
archiveCmd cid is equivalent to exerciseCmd cid Archive.
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 using script or not.