REPL-only functions
begin-tx
Use begin-tx
to begin a new transaction with an optional name.
This function is used to create tests that you want to execute using the Pact REPL.
In most cases, you include this function in .repl
files that test specific application features and failure scenarios.
Within the context of a transaction, you can set environment data, load modules, and execute functions.
To complete the transaction, use the commit-tx
function. The commit-tx
function signals the end of a transaction block and can be followed by additional begin-tx
and commit-tx
blocks.
Basic syntax
To begin a transaction without a name, use the following syntax:
(begin-tx)
(begin-tx)
To begin a transaction with a specific name, use the following syntax:
(begin-tx name)
(begin-tx name)
Arguments
Use the following argument to specify an optional name for the transaction when using the begin-tx
Pact function.
Argument | Type | Description |
---|---|---|
name | string | Specifies the name of the transaction (optional). |
Return value
The begin-tx
function returns a string indicating the transaction identifier and the optional name (if provided).
Examples
The following example demonstrates how to use the begin-tx
function to begin a new transaction without a name:
pact> (begin-tx)"Begin Tx 0"
pact> (begin-tx)"Begin Tx 0"
The following example demonstrates how to use the begin-tx
function to begin a new transaction with a specific name:
pact> (begin-tx "load module")"Begin Tx 0: load module"
pact> (begin-tx "load module")"Begin Tx 0: load module"
You can write an empty transaction as a placeholder for the logic to test specific function or failure scenarios. For example, to create a placeholder for the logic that defines a namespace:
(begin-tx "Define a namespace called 'election") (commit-tx)
(begin-tx "Define a namespace called 'election") (commit-tx)
commit-tx
Use commit-tx
to commit the current transaction.
In most cases, you include this function in .repl
files that test specific application features and failure scenarios.
Within the context of a transaction started using the begin-tx
function, you can set environment data, load modules, and execute functions.
You use the commit-tx
function to signal the end of a transaction block and can be followed by additional begin-tx
and commit-tx
blocks.
Basic syntax
To commit a transaction, use the following syntax:
(commit-tx)
(commit-tx)
Arguments
The commit-tx
function does not take any arguments.
Return value
The commit-tx
function returns a string indicating the transaction identifier that has been committed.
Examples
The following example demonstrates how to use the commit-tx
function within a Pact REPL:
pact> (begin-tx "load module")"Begin Tx 0: load module"pact> (commit-tx)"Commit Tx 0: load module"
pact> (begin-tx "load module")"Begin Tx 0: load module"pact> (commit-tx)"Commit Tx 0: load module"
In this example, a new transaction—Tx0—is started using (begin-tx)
, and then (commit-tx)
is called to commit the transaction.
The function returns a string indicating that "Tx 0" has been committed.
Note that you should only call the commit-tx
function after performing the necessary operations within a transaction.
The commit-tx
function finalizes the transaction, and any changes made during the transaction are persisted.
It's important that you always call the commit-tx
function after begin-tx
and after any other transaction-related operations to properly commit the transaction.
If commit-tx
is not called, the transaction remains open and may lead to unexpected behavior or inconsistencies in the system.
continue-pact
Use continue-pact
to continue a previously-initiated multi-step transaction defined using a defpact
declaration.
You must specify the step
at which to continue.
You can also specify optional parameters for rollback, pact ID, and yielded value.
Basic syntax
To continue a pact with the specified step, use the following syntax:
(continue-pact step)
(continue-pact step)
To continue a pact with the specified step and rollback option, use the following syntax:
(continue-pact step rollback)
(continue-pact step rollback)
To continue a pact with the specified step, rollback option, and pact ID, use the following syntax:
(continue-pact step rollback pact-id)
(continue-pact step rollback pact-id)
To continue a pact with the specified step, rollback option, pact ID, and yielded value, use the following syntax:
(continue-pact step rollback pact-id yielded)
(continue-pact step rollback pact-id yielded)
Arguments
Use the following arguments to customize the behavior of the continue-pact
Pact function.
Argument | Type | Description |
---|---|---|
step | integer | Specifies the step of the pact to continue. |
rollback | bool | Specifies whether to perform a rollback (optional). The default is false . |
pact-id | string | Specifies the identifier of the pact to continue (optional). The default is the pact identifier initiated in the current transaction, if one is present. |
yielded | object | Specifies the yielded value to be read with the resume function (optional). If not specified, the function uses the yield from the most recent pact execution, if any. The schema of the yielded object is object:<{y}> . |
Return value
The continue-pact
function returns a string indicating the result of continuing the pact.
Examples
The following example demonstrates how to use the continue-pact
function to continue a pact with step 1:
(continue-pact 1)
(continue-pact 1)
The following example demonstrates how to use the continue-pact
function to continue a pact with step 1 and perform a rollback:
(continue-pact 1 true)
(continue-pact 1 true)
The following example demonstrates how to use the continue-pact
function to continue a pact with step 1, without rollback, and specify the pact ID:
(continue-pact 1 false "[pact-id-hash]")
(continue-pact 1 false "[pact-id-hash]")
The following example demonstrates how to use the continue-pact
function to continue a pact with step 2, without rollback, specify the pact ID, and provide a yielded value:
(continue-pact 2 false "[pact-id-hash]" { "rate": 0.9 })
(continue-pact 2 false "[pact-id-hash]" { "rate": 0.9 })
describe-module
Use describe-module
to get metadata for a specified module
.
This function returns an object with fields including name
, hash
, blessed
, code
, and keyset
.
Basic syntax
To get metadata for a module
, use the following syntax:
(describe-module module)
(describe-module module)
Arguments
Use the following argument to specify the module
for the describe-module
Pact function.
Argument | Type | Description |
---|---|---|
module | string | Specifies the name of the module to describe. |
Return values
The describe-module
function returns an object with metadata for the specified module
.
Examples
The following example demonstrates how to use describe-module
function to describe a loaded module:
pact> (module election-gas-station GOVERNANCE (defcap GOVERNANCE () true))"Loaded module election-gas-station, hash S6Dtzd7TzbRkYV6_5G5JRhjtF9Ztvaw7LuUEHEeRivQ" pact> (describe-module "election-gas-station"){ "blessed": [] ,"code": "(module election-gas-station GOVERNANCE (defcap GOVERNANCE () true))" ,"hash": "S6Dtzd7TzbRkYV6_5G5JRhjtF9Ztvaw7LuUEHEeRivQ" ,"interfaces": [] ,"keyset": "Governance {_gGovernance = Right (Def {_dDefName = DefName {_unDefName = "GOVERNANCE"}, _dModule = ModuleName {_mnName = "election-gas-station", _mnNamespace = Nothing}, _dDefType = Defcap, _dFunType = FunType {_ftArgs = [], _ftReturn = TyVar {_tyVar = TypeVar {_tvName = "a", _tvConstraint = []}}}, _dDefBody = Scope (TList {_tList = [TLiteral {_tLiteral = LBool {_lBool = True}, _tInfo = true}], _tListType = TyAny, _tInfo = (defcap GOVERNANCE () true)}), _dMeta = Meta {_mDocs = Nothing, _mModel = []}, _dDefMeta = Nothing, _dInfo = (defcap GOVERNANCE () true)})}" ,"name": "election-gas-station"}
pact> (module election-gas-station GOVERNANCE (defcap GOVERNANCE () true))"Loaded module election-gas-station, hash S6Dtzd7TzbRkYV6_5G5JRhjtF9Ztvaw7LuUEHEeRivQ" pact> (describe-module "election-gas-station"){ "blessed": [] ,"code": "(module election-gas-station GOVERNANCE (defcap GOVERNANCE () true))" ,"hash": "S6Dtzd7TzbRkYV6_5G5JRhjtF9Ztvaw7LuUEHEeRivQ" ,"interfaces": [] ,"keyset": "Governance {_gGovernance = Right (Def {_dDefName = DefName {_unDefName = "GOVERNANCE"}, _dModule = ModuleName {_mnName = "election-gas-station", _mnNamespace = Nothing}, _dDefType = Defcap, _dFunType = FunType {_ftArgs = [], _ftReturn = TyVar {_tyVar = TypeVar {_tvName = "a", _tvConstraint = []}}}, _dDefBody = Scope (TList {_tList = [TLiteral {_tLiteral = LBool {_lBool = True}, _tInfo = true}], _tListType = TyAny, _tInfo = (defcap GOVERNANCE () true)}), _dMeta = Meta {_mDocs = Nothing, _mModel = []}, _dDefMeta = Nothing, _dInfo = (defcap GOVERNANCE () true)})}" ,"name": "election-gas-station"}
In this example, (describe-module 'm)
is used to get metadata for the module named 'm'. The function returns an object providing detailed information about the module.
env-chain-data
Use env-chain-data
to define chain information for transactions in your testing environment.
You can this function to create an object with one or more of the following fields:
chain-id
: The chain identifier (0-19) for the blockchain where the transaction is executed.block-height
: The height of the block that includes the transaction.block-time
: The timestamp of the block that includes the transaction.prev-block-hash
: The hash of the previous block.sender
: The sender of the transaction.gas-limit
: The gas limit for the transaction.gas-price
: The gas price for the transaction.gas-fee
: The gas fee for the transaction.
Basic syntax
To set one or more chain data fields, use the following syntax:
(env-chain-data {object})
(env-chain-data {object})
Arguments
Use the following argument to specify the chain data you want to set using the env-chain-data
Pact function.
Argument | Type | Description |
---|---|---|
object | object | Specifies the chain data you want to be set for the transaction. |
Return value
The env-chain-data
function returns an object with the chain data you specify.
Examples
The following example demonstrates how to use the env-chain-data
function to set a chain identifier and block time for a transaction:
(begin-tx "create-token") (env-chain-data {"chain-id":"3","block-time": (time "2023-07-20T11:26:35Z")})(commit-tx)
(begin-tx "create-token") (env-chain-data {"chain-id":"3","block-time": (time "2023-07-20T11:26:35Z")})(commit-tx)
env-data
Use env-data
to set transaction data for your testing environment either as an encoded string or as Pact types coerced to JSON format.
Basic syntax
To set transaction data, use the following syntax:
(env-data json)
(env-data json)
Arguments
Use the following argument to specify the JSON data when using the env-data
Pact function.
Argument | Type | Description |
---|---|---|
json | object | Specifies the JSON data to be set for the transaction. The data can be provided as an encoded string or as Pact types that will be coerced to JSON. |
Return value
The env-data
function returns a string indicating that the transaction data is being set.
Examples
The following example demonstrates the usage of the env-data
function within a Pact REPL:
pact> (env-data { "keyset": { "keys": ["my-key" "admin-key"], "pred": "keys-any" } })"Setting transaction data"
pact> (env-data { "keyset": { "keys": ["my-key" "admin-key"], "pred": "keys-any" } })"Setting transaction data"
In the following example, the env-data
function is used to set up a mock token identifier and account information for testing Marmalade functions:
(env-data { "token-id": "t:YV6-cQBhE_EoIXAuNV08aGXLfcucBEGy0Gb1Pj6w_Oo" ,"account": "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" ,"account-guard": { "keys": ["e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3"], "pred": "keys-all" } })
(env-data { "token-id": "t:YV6-cQBhE_EoIXAuNV08aGXLfcucBEGy0Gb1Pj6w_Oo" ,"account": "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" ,"account-guard": { "keys": ["e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3"], "pred": "keys-all" } })
env-enable-repl-natives
Use env-enable-repl-natives
to control whether REPL native functions are allowed in module code.
If you set this function to true
to enable REPL native functions in module code, other environment configuration functions like env-sigs
are allowed in module code, and you can use these functions in your module definitions.
If you set this function to false
to disable REPL native functions in module code, other environment configuration functions are not allowed in module code, and attempting to use them will result in an error.
Basic syntax
To allow REPL native functions to be used in module code, use the following syntax:
(env-enable-repl-natives enable)
(env-enable-repl-natives enable)
Arguments
Use the following argument to specify whether to enable or disable REPL native functions in module code.
Argument | Type | Description |
---|---|---|
enable | bool | Specifies whether to enable or disable REPL native functions in module code. Note that this argument is required. Set it to true to enable REPL native function calls. Set it to false to prevent REPL native functions from being called. |
Return value
The env-enable-repl-natives
function returns a string indicating the status of REPL natives.
Examples
The following example demonstrates how to enable REPL native functions:
(env-enable-repl-natives true)"Repl natives enabled"
(env-enable-repl-natives true)"Repl natives enabled"
After enabling REPL natives, you can use environment configuration functions like env-sigs
in your module code.
It's important to note that you should only enable REPL native functions in module code—that is, executable .pact
files—if absolutely necessary.
Most REPL native functions are intended to be used exclusively in the REPL environment.
If you enable access to the REPL native functions in module code, ensure that access to the functions is properly controlled and validated.
The following example demonstrates how to disable access to REPL native functions:
(env-enable-repl-natives false)"Repl natives disabled"
(env-enable-repl-natives false)"Repl natives disabled"
env-events
Use env-events
to retrieve any accumulated events and optionally clear the event state.
Basic syntax
To retrieve events and clear the event state, use the following syntax:
(env-events clear)
(env-events clear)
Arguments
Use the following argument to specify whether to clear the event state after retrieving the events.
Argument | Type | Description |
---|---|---|
clear | bool | Specifies whether to clear the event state after retrieving the events. Note that this argument is required. Set it to true to retrieve events, then clear the event state. Set it to false retrieve events and keep the event state. |
Return value
The env-events
function returns an array of objects representing the accumulated events.
Each object in the array has the following fields:
name
: The fully-qualified name of the event.params
: The parameters associated with the event.module-hash
: The hash of the module that emitted the event.
Examples
The following example demonstrates how to retrieve events, then clear the event state:
(env-events true)[]
(env-events true)[]
In this example, there were no events to retrieve, so an empty list is returned.
The following example retrieves three events—TOKEN, MINT, and ACCOUNT-GUARD—without clearing the event state:
(env-events false)[{"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.TOKEN","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" 0 [marmalade-v2.non-fungible-policy-v1 marmalade-v2.non-updatable-uri-policy-v1] "uri" KeySet {keys: [e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3],pred: keys-all}]} {"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.MINT","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" 1.0]} {"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.ACCOUNT_GUARD","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" KeySet {keys: [e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3],pred: keys-all}]}] In this example, the formatting is modified for readability. ## env-exec-config (DEPRECATED) Use `env-exec-config` to query or set execution configuration information for executing transactions in your testing environment.You can use this function to set one or more of the following configuration flags: - "AllowReadInLocal"- "DisableHistoryInTransactionalMode"- "DisableInlineMemCheck"- "DisableModuleInstall"- "DisableNewTrans"- "DisablePact40"- "DisablePact410"- "DisablePact42"- "DisablePact43"- "DisablePact431"- "DisablePact44"- "DisablePact45"- "DisablePact46"- "DisablePact47"- "DisablePact48"- "DisablePact49"- "DisablePactEvents"- "DisableRuntimeReturnTypeChecking"- "EnforceKeyFormats"- "OldReadOnlyBehavior"- "PreserveModuleIfacesBug"- "PreserveModuleNameBug"- "PreserveNsModuleInstallBug"- "PreserveShowDefs" ### Basic syntax To look up the current configuration settings, use the following syntax: ```pact(env-exec-config)
(env-events false)[{"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.TOKEN","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" 0 [marmalade-v2.non-fungible-policy-v1 marmalade-v2.non-updatable-uri-policy-v1] "uri" KeySet {keys: [e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3],pred: keys-all}]} {"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.MINT","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" 1.0]} {"module-hash": "DmPuO814Zw0C6RL9ubXTGeyNl0I2-svVHgZp-XqRsOs","name": "marmalade-v2.ledger.ACCOUNT_GUARD","params": ["t:U50F3xof5EnLQFPd0v2vt8PR3GJTAt8DJ2oWFj7eOgA" "k:e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3" KeySet {keys: [e4c6807d79d8bf4695e10e5678ebf72862f59b71f971d39dd3349f4beeacd6e3],pred: keys-all}]}] In this example, the formatting is modified for readability. ## env-exec-config (DEPRECATED) Use `env-exec-config` to query or set execution configuration information for executing transactions in your testing environment.You can use this function to set one or more of the following configuration flags: - "AllowReadInLocal"- "DisableHistoryInTransactionalMode"- "DisableInlineMemCheck"- "DisableModuleInstall"- "DisableNewTrans"- "DisablePact40"- "DisablePact410"- "DisablePact42"- "DisablePact43"- "DisablePact431"- "DisablePact44"- "DisablePact45"- "DisablePact46"- "DisablePact47"- "DisablePact48"- "DisablePact49"- "DisablePactEvents"- "DisableRuntimeReturnTypeChecking"- "EnforceKeyFormats"- "OldReadOnlyBehavior"- "PreserveModuleIfacesBug"- "PreserveModuleNameBug"- "PreserveNsModuleInstallBug"- "PreserveShowDefs" ### Basic syntax To look up the current configuration settings, use the following syntax: ```pact(env-exec-config)
To set one or more configuration flags, use the following syntax:
(env-exec-config [flags])
(env-exec-config [flags])
Arguments
Use the following argument to specify the configuration data you want to set using the env-exec-config
Pact function.
Argument | Type | Description |
---|---|---|
flags | [string] | Specifies the configuration flags you want to be set for the execution environment. |
Return value
The env-exec-config
function returns the list of configuration flags that have been set for the execution environment.
Examples
The following example demonstrates how to use the env-exec-config
function to enforce key formats and disable Pact events:
(env-exec-config ["EnforceKeyFormats" "DisablePactEvents"])["DisablePactEvents" "EnforceKeyFormats"]
(env-exec-config ["EnforceKeyFormats" "DisablePactEvents"])["DisablePactEvents" "EnforceKeyFormats"]
The following example demonstrates how to unset previously-set configuration flags using the env-exec-config
function:
(env-exec-config [])[]
(env-exec-config [])[]
The following example demonstrates how to check the current configuration settings:
(env-exec-config)[]
(env-exec-config)[]
env-gas
Use env-gas
to query the current gas state or set it to a specific value.
Basic syntax
To query the current gas state, use the following syntax:
(env-gas)
(env-gas)
To set the gas state to a specific value, use the following syntax:
(env-gas gas)
(env-gas gas)
Arguments
Use the following argument to set the gas state when using the env-gas
Pact function.
Argument | Type | Description |
---|---|---|
gas | integer | Specifies the value to set the gas state to (optional). |
Return value
When called without arguments, the env-gas
function returns an integer representing the current gas state.
When called with the gas
argument, the env-gas
function returns a string indicating that the gas state has been set to the specified value.
Examples
The following example demonstrates how to use the env-gas
function to query the current gas state:
pact> (env-gas)7
pact> (env-gas)7
In the following example, the env-gas
function resets the current gas state to zero:
pact> (env-gasmodel "table") (env-gaslimit 10) (env-gas 0) (map (+ 1) [1 2 3])"Set gas model to table-based cost model""Set gas limit to 10""Set gas to 0"[2 3 4]
pact> (env-gasmodel "table") (env-gaslimit 10) (env-gas 0) (map (+ 1) [1 2 3])"Set gas model to table-based cost model""Set gas limit to 10""Set gas to 0"[2 3 4]
env-gaslimit
Use env-gaslimit
to set the environment gas limit to a specific value.
Basic syntax
To set the environment gas limit to a specific value, use the following syntax:
(env-gaslimit limit)
(env-gaslimit limit)
Arguments
Use the following argument to set the gas limit when using the env-gaslimit
Pact function.
Argument | Type | Description |
---|---|---|
limit | integer | Specifies the gas limit to set for the environment. |
Return value
The env-gaslimit
function returns a string indicating that the gas limit has been set to the specified value.
Examples
The following example demonstrates how to use the env-gaslimit
function to set a gas limit for the environment:
pact> (env-gaslimit 10)"Set gas limit to 10"
pact> (env-gaslimit 10)"Set gas limit to 10"
env-gaslog
Use env-gaslog
to enable gas logging for a block of code.
You can use this function to check the gas required to execute a specific block of code.
Basic syntax
To enable gas logging for a specific block of code
, use the following syntax:
(env-gaslog) code (env-gaslog)
(env-gaslog) code (env-gaslog)
Arguments
The env-gaslog
function does not take any arguments.
Return value
The env-gaslog
function returns the log messages in strings that describe the gas consumed by each operation in the code block.
Examples
The following example demonstrates how to use the env-gaslog
function to report the gas consumed for the specified map
function:
(env-gasmodel "table") (env-gaslimit 10) (env-gaslog) (map (+ 1) [1 2 3]) (env-gaslog)"Set gas model to table-based cost model""Set gas limit to 10"["TOTAL: 0"][2 3 4]["TOTAL: 7""map:GUnreduced:currTotalGas=4: 4""+:GUnreduced:currTotalGas=5: 1"":GIntegerOpCost:(1, ):(1, ):Pact48IntThreshold:currTotalGas=5: 0""+:GUnreduced:currTotalGas=6: 1"":GIntegerOpCost:(1, ):(2, ):Pact48IntThreshold:currTotalGas=6: 0""+:GUnreduced:currTotalGas=7: 1"":GIntegerOpCost:(1, ):(3, ):Pact48IntThreshold:currTotalGas=7: 0"]
(env-gasmodel "table") (env-gaslimit 10) (env-gaslog) (map (+ 1) [1 2 3]) (env-gaslog)"Set gas model to table-based cost model""Set gas limit to 10"["TOTAL: 0"][2 3 4]["TOTAL: 7""map:GUnreduced:currTotalGas=4: 4""+:GUnreduced:currTotalGas=5: 1"":GIntegerOpCost:(1, ):(1, ):Pact48IntThreshold:currTotalGas=5: 0""+:GUnreduced:currTotalGas=6: 1"":GIntegerOpCost:(1, ):(2, ):Pact48IntThreshold:currTotalGas=6: 0""+:GUnreduced:currTotalGas=7: 1"":GIntegerOpCost:(1, ):(3, ):Pact48IntThreshold:currTotalGas=7: 0"]
In this example, the ["TOTAL: 0"]
message signals the beginning of gas logging for the map
function.
The messages after "TOTAL: 7"
provide details about how the gas was calculated.
env-gasmodel
Use env-gasmodel
to query or update the current gas model.
Basic syntax
To query the current gas model, use the following syntax:
(env-gasmodel)
(env-gasmodel)
To update the gas model to a table-based cost model, use the following syntax:
(env-gasmodel model)
(env-gasmodel model)
To update the gas model to a fixed-rate model with a specific rate, use the following syntax:
(env-gasmodel model rate)
(env-gasmodel model rate)
Arguments
Use the following arguments when using the env-gasmodel
Pact function.
Argument | Type | Description |
---|---|---|
model | string | Specifies the gas model to set. The supported gas models are table to use a table-based gas model and fixed to use a fixed rate gas model. |
rate | integer | Specifies the fixed rate or every operation. This argument is required if you set the model argument to use the fixed gas model. |
Return value
When called with the model
argument, env-gasmodel
returns a string indicating the updated gas model.
When called without arguments, env-gasmodel
returns a string describing the current gas model.
Examples
The following example demonstrates how to use the env-gasmodel
function to query the current gas model:
pact> (env-gasmodel)"Current gas model is 'fixed 1': constant rate gas model with fixed rate 1"
pact> (env-gasmodel)"Current gas model is 'fixed 1': constant rate gas model with fixed rate 1"
The following example demonstrates how to use the env-gasmodel
function to update the current gas model to use a table-based cost model:
pact> (env-gasmodel "table")"Set gas model to table-based cost model"
pact> (env-gasmodel "table")"Set gas model to table-based cost model"
In the following example, the env-gasmodel function updates the gas model to use a fixed rate of two:
pact> (env-gasmodel "fixed" 2)"Set gas model to constant rate gas model with fixed rate 2"
pact> (env-gasmodel "fixed" 2)"Set gas model to constant rate gas model with fixed rate 2"
env-hash
Use env-hash
to set the current transaction hash.
Basic syntax
To set the current transaction hash, use the following syntax:
(env-hash hash)
(env-hash hash)
Arguments
Use the following argument when using the env-hash
Pact function.
Argument | Type | Description |
---|---|---|
hash | string | Specifies the hash value to set as the current transaction hash. The hash must be an unpadded base64-url encoded BLAKE2b 256-bit hash. |
Return value
The env-hash
function returns a string indicating that the transaction hash has been set to the specified value.
Example
The following example demonstrates how to use the env-hash
function to set the transaction hash using the base64-url encoded string for the hello
string:
pact> (env-hash (hash "hello"))"Set tx hash to Mk3PAn3UowqTLEQfNlol6GsXPe-kuOWJSCU0cbgbcs8"
pact> (env-hash (hash "hello"))"Set tx hash to Mk3PAn3UowqTLEQfNlol6GsXPe-kuOWJSCU0cbgbcs8"
The following example illustrates using the env-hash
function to create a transaction hash for the test transaction that creates a token:
(env-hash (hash "create-tokens"))
(env-hash (hash "create-tokens"))
env-keys (DEPRECATED)
Use env-keys
to set the transaction signer keys in older version of the Pact REPL.
The env-keys
function is deprecated in favor of env-sigs
.
You should use env-sigs
for setting transaction signer keys with associated capabilities.
Basic syntax
To set transaction signer keys in older version of the Pact REPL, use the following syntax:
(env-keys keys)
(env-keys keys)
Arguments
Use the following argument when using the env-keys
Pact function.
Argument | Type | Description |
---|---|---|
keys | [string] | Specifies the list of keys to set as transaction signer keys. |
Return value
The env-keys
function returns a string indicating that the transaction keys have been set.
Example
The following example demonstrates how to use the env-keys
function to set "my-key" and "admin-key" as the current transaction signing keys in a Pact REPL:
pact> (env-keys ["my-key" "admin-key"])"Setting transaction keys"
pact> (env-keys ["my-key" "admin-key"])"Setting transaction keys"
env-namespace-policy
Use env-namespace-policy
to install a managed namespace policy.
Basic syntax
To install a managed namespace policy, use the following syntax:
(env-namespace-policy allow-root ns-policy-func)
(env-namespace-policy allow-root ns-policy-func)
Arguments
Use the following arguments when using the env-namespace-policy
Pact function.
Argument | Type | Description |
---|---|---|
allow-root | bool | Specifies whether to allow root-level namespace creation. If set to true , root-level namespaces can be created. If set to false , root-level namespace creation is restricted. |
ns-policy-func | function | Specifies the namespace policy function. This function takes two arguments: the namespace string (ns ) and the namespace admin guard (ns-admin ), and returns a boolean value indicating whether the namespace is allowed based on the policy. The function should return true if the namespace is allowed, and false if it is not. |
Return value
The env-namespace-policy
function returns a string indicating that the namespace policy has been installed.
Example
The following example demonstrates how to use the env-namespace-policy
function to install a namespace policy in a Pact REPL:
(env-namespace-policy true (my-ns-policy-func))
(env-namespace-policy true (my-ns-policy-func))
env-sigs
Use env-sigs
to set signature keys for signing transactions and granting capabilities.
Basic syntax
To set the signature keys to use for signing transactionL and granting capabilities, use the following syntax:
(env-sigs sigs)
(env-sigs sigs)
Arguments
Use the following argument when using the env-sigs
Pact function.
Argument | Type | Description |
---|---|---|
sigs | [object] | Specifies the list of signature objects. Each object represents a signer key and its associated caps capabilities. |
Return value
The env-sigs
function returns a string indicating that the transaction signature keys and capabilities have been set.
Examples
The following example demonstrates how to use the env-sigs
function to set two transaction signature keys—"my-key" and "admin-key"—and capabilities:
(env-sigs [ {'key: "my-key", 'caps: [(accounts.USER_GUARD "my-account")] }, {'key: "admin-key", 'caps: []} ])
(env-sigs [ {'key: "my-key", 'caps: [(accounts.USER_GUARD "my-account")] }, {'key: "admin-key", 'caps: []} ])
The following example illustrates using the env-sigs
function to grant "any" key the MINT capability:
(env-sigs [ { 'key: 'any ,'caps: [(MINT (read-msg "token-id") (read-string 'account) 1.0)]} ])
expect-failure
Use expect-failure
to evaluate an expression and succeed only if the expressions results in an error.
This function enables you to verify that use cases that should failbehave as expected.
Basic syntax
To expect a failure without specifying the error message, use the following syntax:
(expect-failure doc exp)
(expect-failure doc exp)
To expect a failure with a specific error message, use the following syntax:
(expect-failure doc err exp)
(expect-failure doc err exp)
Arguments
Use the following arguments when using the expect-failure
Pact function.
Argument | Type | Description |
---|---|---|
doc | string | Specifies the documentation string describing the expected failure. |
err | string | Specifies the expected error message (optional). |
exp | any | Specifies the expression to evaluate. The expression can be of any Pact type. |
Return value
The expect-failure
function returns a string indicating the success or failure of the expected failure.
- If the expression
exp
throws an error, the function returns a string indicating the success of the expected failure, for example,"Expect failure: success: Enforce fails on false"
. - If the expression
exp
does not throw an error, the function itself throws an error, indicating that the expected failure did not occur.
Examples
The following example demonstrates how to use the expect-failure
function without specifying the expected error message:
pact> (expect-failure "Enforce fails on false" (enforce false "Expected error"))"Expect failure: success: Enforce fails on false"
pact> (expect-failure "Enforce fails on false" (enforce false "Expected error"))"Expect failure: success: Enforce fails on false"
The following example illustrates using the expect-failure
function with a specific expected error message:
(expect-failure "mint fails without MINT capability in scope" "Managed capability not installed: (marmalade-v2.ledger.MINT" (mint (read-msg 'token-id) (read-msg 'account) (read-keyset 'account-guard) 1.0)))
(expect-failure "mint fails without MINT capability in scope" "Managed capability not installed: (marmalade-v2.ledger.MINT" (mint (read-msg 'token-id) (read-msg 'account) (read-keyset 'account-guard) 1.0)))
In this example, the doc
argument describes the test being performed.
The err
argument specifies the error message that is returned when the expression is evaluated.
expect-that
Use expect-that
to evaluate an expression and succeed if the resulting value passes a predicate function.
You can use any data type for the exp
argument as long as the pred
function can take that same data type and return the resulting boolean value .
By convention, the data type <a>
is used to represent type-bound parameters that serve as input for functions and expressions or for generic arguments.
Basic syntax
To evaluate an expression that returns a predicate function, use the following syntax:
(expect-that doc pred exp)
(expect-that doc pred exp)
Arguments
Use the following arguments when using the expect-that
Pact function.
Argument | Type | Description |
---|---|---|
doc | string | Specifies the documentation string describing the expectation. |
pred | value: <a> -> bool | Specifies the predicate function that takes the result of exp and returns a boolean. |
exp | <a> | Specifies the expression to evaluate. The expression can be of any Pact type. |
Return value
The expect-that
function returns a string indicating the success or failure of the expectation.
Examples
The following example demonstrates how to use the expect-that
function to evaluate an expression that returns the expected result:
pact> (expect-that "addition" (< 2) (+ 1 2))"Expect-that: success: addition"
pact> (expect-that "addition" (< 2) (+ 1 2))"Expect-that: success: addition"
The following example demonstrates how to use the expect-that
function to evaluate an expression that returns fails to return the expected result:
pact> (expect-that "addition" (> 2) (+ 1 2))"FAILURE: addition: did not satisfy (> 2) : 3:integer"
pact> (expect-that "addition" (> 2) (+ 1 2))"FAILURE: addition: did not satisfy (> 2) : 3:integer"
expect
Use expect
to evaluate an expression and verify that the result equals an expected value.
Basic syntax
To evaluate an expression that returns an expected result, use the following syntax:
(expect doc expected actual)
(expect doc expected actual)
Arguments
Use the following arguments when using the expect
Pact function.
Argument | Type | Description |
---|---|---|
doc | string | Specifies the documentation string describing the expectation. |
expected | any | Specifies the expected value to compare against the result of actual . |
actual | any | Specifies the expression to evaluate. The expression can be of any Pact type. |
Return value
The expect
function returns a string indicating the success or failure of the expectation.
Examples
The following example demonstrates how to use the function expect
to evaluate an expression that returns an expected result in a Pact REPL:
pact> (expect "Sanity prevails." 4 (+ 2 2))"Expect: success: Sanity prevails."
pact> (expect "Sanity prevails." 4 (+ 2 2))"Expect: success: Sanity prevails."
The following example illustrates using the expect
function to verify that the information expected to be inserted into a table is the same as the result of the get-token-info
function:
(expect "Token info is inserted into table" { "id": "t:YV6-cQBhE_EoIXAuNV08aGXLfcucBEGy0Gb1Pj6w_Oo" ,"supply": 0.0 ,"precision": 0 ,"uri": "test-uri" ,"policies": [] } (get-token-info "t:YV6-cQBhE_EoIXAuNV08aGXLfcucBEGy0Gb1Pj6w_Oo") )