Version: 0.48.1

Test

Important: The Test module is only available inside the ligo run test command. See also Testing LIGO.

type michelson_program

A type for code that is compiled to Michelson.

type michelson_contract

A type for Michelson compiled contracts.

type test_exec_error_balance_too_low = { contract_too_low : address , contract_balance : tez , spend_request : tez }
type test_exec_error = ["Rejected", michelson_program, address] | ["Balance_too_low", test_exec_error_balance_too_low] | ["Other", string]

A test error:

  • The Rejected case means the called contract or its transitive callees (identified by the address in the second constructor argument) failed with some data (first constructor argument)
  • The Balance_too_low case means a contract tried to push an operation but did not have enough balance. contract_too_low is the address of the contract, contract_balance is the actual balance of the contract and spend_request is the amount of tez that was required for the operation
  • The Other case wraps all the other possible reasons. Its argument is a string representation of the tezos_client error
type test_exec_result = ["Success", nat] | ["Fail", test_exec_error]

A test execution result:

  • The Success case means the transaction went through without an issue. Its argument represent the total amount of gas consumed by the transaction
  • The "Fail reason" case means something went wrong. Its argument encode the causes of the failure (see type test_exec_error)
type test_baker_policy = ["By_round", int] | ["By_account", address] | ["Excluding", list<address>]

A test baking policy as used by the underlying testing helpers. The case By_account is the standard one, as used by Test.set_baker. Policies to select the next baker (taken from test helpers documentation):

  • By_round r selects the baker at round r
  • By_account pkh selects the first slot for baker pkh
  • Excluding pkhs selects the first baker that doesn't belong to pkhs
type typed_address <'param, 's>

A type for an address of a contract with parameter 'param and storage 'storage.

type unforged_ticket <s> = { ticketer : address , value : s , amount : nat }

A type for decompile tickets.

let to_contract = (account: typed_address <'param, 'storage>) => contract <'param>

Get the contract corresponding to the default entrypoint of a typed address: the contract parameter in the result will be the type of the default entrypoint (generally 'param, but this might differ if 'param includes a "default" entrypoint).

let to_entrypoint = (entrypoint: string, account: typed_address <'param, 'storage>) => contract <'e>

Get the contract corresponding to an entrypoint of a typed address: the contract parameter in the result will be the type of the entrypoint, it needs to be annotated, entrypoint string should omit the prefix "%", but if passed a string starting with "%", it will be removed (and a warning emitted).

let originate_from_file = (filepath: string, entrypoint: string, views: list<string>, init: michelson_program, balance: tez) => [address, michelson_contract, int]

Originate a contract with a path to the contract file, an entrypoint, and a list of views, together with an initial storage and an initial balance.

let [addr, contract, size] = Test.originate_from_file(testme_test, "main", (list([]) : list<string>), init_storage, 0 as tez);
let compile_contract_from_file = (filepath: string, entrypoint: string, views: list<string>) => michelson_contract

Compiles a contract with a path to the contract file, an entrypoint, and a list of views.

let originate = (contract: ('param, 'storage) => (list <operation>, 'storage), init: 'storage, balance: tez) => [typed_address <'param, 'storage>, michelson_contract, int]

Originate a contract with an entrypoint function, initial storage and initial balance.

let compile_contract = (contract: ('param, 'storage) => (list <operation>, 'storage)) => michelson_contract

Compiles a contract from an entrypoint function.

let read_contract_from_file = (filepath: string) => michelson_contract

Reads a contract from a .tz file.

let originate_contract = (contract: michelson_contract, init: michelson_program, balance: tez) => address

Originate a contract with initial storage and initial balance.

let size = (contract: michelson_contract) => int

Measure the size of a contract.

let set_source = (source: address) => unit
Set the source for `Test.transfer` and `Test.originate`.
let set_baker_policy = (policy: test_baker_policy) => unit
Force the baking policy for `Test.transfer` and `Test.originate`. By default, the first bootstrapped account.
let set_baker = (source: address) => unit
Force the baker for `Test.transfer` and `Test.originate`, implemented using `Test.set_baker_policy` with `By_account`. By default, the first bootstrapped account.
let transfer = (addr: address, param: michelson_program, amount: tez) => test_exec_result
Bake a transaction by sending an amount of tez with a parameter from the current source to another account. Returns the amount of gas consumed by the execution of the contract.
let transfer_exn = (addr: address, parameter: michelson_program, amount: tez) => nat
Similar as `Test.transfer`, but fails when anything goes wrong.
let transfer_to_contract = (addr: contract<'p>, param: 'p, amount: tez) => test_exec_result
Bake a transaction by sending an amount of tez with a parameter from the current source to a contract. Returns the amount of gas consumed by the execution of the contract.
let transfer_to_contract_exn = (addr: contract<'p>, parameter: 'p, amount: tez) => nat
Similar as `Test.transfer_to_contract`, but fails when anything goes wrong.
let get_storage_of_address = (account: address) => michelson_program
Get the storage of an account in `michelson_program`.
let get_storage = (account: typed_address <'p, 's>) => 's
Get the storage of a typed account.
let get_balance = (account: address) => tez
Get the balance of an account in tez.
let get_voting_power = (kh: key_hash) => nat
Return the voting power of a given contract. This voting power coincides with the weight of the contract in the voting listings (i.e., the rolls count) which is calculated at the beginning of every voting period.
let get_total_voting_power = nat
Return the total voting power of all contracts. The total voting power coincides with the sum of the rolls count of every contract in the voting listings. The voting listings is calculated at the beginning of every voting period.
let michelson_equal = (a: michelson_program, b: michelson_program) => bool
Compare two Michelson values.
let log = (a: 'a) => unit
Log a value.
let to_string = (a: 'a) => string
Convert a value to a string (same conversion as used by `log`).
let print = (s: string) => unit
Prints an string to stdout.
let println = (s: string) => unit
Prints an string to stdout, ended with a newline.
let eprint = (s: string) => unit
Prints an string to stderr.
let nl : string
String consisting of only a newline.
let chr = (c: nat) => option<string>
String consisting of the character represented by a `nat` in the interval [0, 255].
let reset_state = (no_of_accounts: nat, amount: list<tez>) => unit
Generate a number of random bootstrapped accounts with a default amount of 4000000 tez. The passed list can be used to overwrite the amount. By default, the state only has two bootstrapped accounts.

Notice that since Ithaca, a percentage of an account's balance is frozen (5% in testing mode) in case the account can be taken to be a validator (see here), and thus Test.get_balance can show a different amount to the one being set with Test.reset_state.

let reset_state_at = (initial_timestamp : timestamp, no_of_accounts: nat, amount: list<tez>) => unit

Same as reset_state but accepts a timestamp which is set as the initial timestamp of the genesis block.

let baker_account = ([string, key], amount : option<tez>) => unit
Adds an account `(sk, pk)` as a baker. The change is only effective after `Test.reset_state`.
let register_delegate = (account : key_hash) => unit
Registers a `key_hash` corresponding to an account as a delegate.
let register_constant = (constant : michelson_program) => string
Registers a global constant `constant`, returns its hash as a string.

See the documentation for global constants for an example of usage.

let constant_to_michelson_program = (constant : string) => michelson_program
Turn a constant (as a string) into a `michelson_program`. To be used together with `Test.register_constant`.
let register_file_constants = (filepath : string) => list<string>
Registers the global constants listed in a JSON file. It takes a string (file path) and returns a list of strings corresponding to the hashes of the registered constants.
let bake_until_n_cycle_end = (cycles : nat) => unit
It bakes until a number of cycles pass, so that an account registered as delegate can effectively act as a baker.
let new_account = (_: unit) => (string, key)
Creates and returns secret key & public key of a new account.
let add_account = (sk: string, pk: key) => unit
Adds an account specfied by secret key & public key to the test context
let nth_bootstrap_account = (nth: int) => address
Returns the address of the nth bootstrapped account.
let nth_bootstrap_contract = (nth: nat) => address
Returns the address corresponding to the nth bootstrapped contract.
let bootstrap_contract = (balance: tez, contract: ('param, 'storage) => (list <operation>, 'storage), init: 'storage) => unit

Setup a bootstrap contract with an entrypoint function, initial storage and initial balance. Bootstrap contracts will be loaded in order, and they will be available only after reset.

let nth_bootstrap_typed_address = (nth: int) => typed_address <'p, 's>
Returns the typed address corresponding to the nth bootstrapped contract currently loaded. The types are inferred from those contracts loaded with `Test.bootstrap_contract` (before reset).
let get_bootstrap_account = (nth: nat) => [address, key, string]
Returns the address, key and secret key of the nth bootstrapped account.
let last_originations = (_: unit) => map<address , address list>
Returns addresses of orginated accounts in the last transfer. It is given in the form of a map binding the address of the source of the origination operation to the addresses of newly originated accounts.
let compile_value = (value: 'a) => michelson_program
Compile a LIGO value to Michelson.
let eval = (value: 'a) => michelson_program
Compile a LIGO value to Michelson. Currently it is a renaming of `compile_value`.
let run = (func: ('a => 'b), value: 'a) => michelson_program

Run a function on an input, all in Michelson. More concretely: a) compiles the function argument to Michelson f_mich; b) compiles the value argument (which was evaluated already) to Michelson v_mich; c) runs the Michelson interpreter on the code f_mich with starting stack [ v_mich ].

type some_r = [@layout:comb] { one : int , two : nat , three : string , four : bytes , five : unit };
let f = (x:some_r) : int => x.one;
let test_example =
Test.run (((x : [int, nat, string, bytes, unit]) => f ({ one : x[0] , two : x[1] , three : x[2] , four : x[3] , five : x[4] })),
[1 + 3 + 2, ((1 as nat) + (2 as nat)), ("a" + "b"), 0xFF00, unit]);
let decompile = (value: michelson_program) => 'a
Decompile a Michelson value to LIGO, following the (mandatory) type annotation. Note: this operation can fail at run-time, in case that the `michelson_program` given cannot be decompiled to something compatible with the annotated type.
let mutate_value : (index: nat, value: 'a) => option <['a, mutation]>

Mutates a value using a natural number as an index for the available mutations, returns an option for indicating whether mutation was successful or not.

let mutation_test : (value: 'a, tester: ('a -> 'b)) => option <['b, mutation]>

Given a value to mutate (first argument), it will try all the mutations available of it, passing each one to the function (second argument). On the first case of non failure when running the function on a mutation, the value and mutation involved will be returned.

let mutation_test_all : (value: 'a, tester: ('a -> 'b)) => list <['b, mutation]>

Given a value to mutate (first argument), it will try all the mutations of it, passing each one to the function (second argument). In case no failure arises when running the function on a mutation, the failure and mutation involved will be added to the list to be returned.

let save_mutation : (path: string, mutation: mutation) => option <string>

This function reconstructs a file from a mutation (second argument), and saves it to a file in the directory path (first argument). It returns an optional string indicating the filename where the mutation was saved, or None if there was an error.

let random : (u: unit) => 'a

This function creates a random value for a chosen type.

let cast_address : (addr: adress) => typed_address <'param, 'storage>

This function casts an address to a typed address. You will need to annotate the result with the type you expect.

let set_big_map: (id: 'int, big_map: big_map<'key, 'value>) => unit

The testing framework keeps an internal reference to the values corresponding to big map identifiers. This function allows to override the value of a particular big map identifier. It should not be normally needed, except in particular circumstances such as using custom bootstrap contracts that initialize big maps.

let create_chest : bytes => nat => [chest , chest_key]

Generate a locked value, the RSA parameters and encrypt the payload. Also returns the chest key Exposes tezos timelock library function create_chest_and_chest_key

let create_chest_key : chest => nat => chest_key

Unlock the value and create the time-lock proof. Exposes tezos timelock library function create_chest_key.

let save_context: (u: unit) => unit

Takes current testing framework context and saves it, pushing it into a stack of contexts.

let restore_context: (u: unit) => unit

Pops a testing framework context from the stack of contexts, and sets it up as the new current context. In case the stack was empty, the current context is kept.

let drop_context: (u: unit) => unit

Drops a testing framework context from the stack of contexts. In case the stack was empty, nothing is done.

let sign: (secret_key: string, data: bytes) => signature

Creates a signature of bytes from a string representing a secret key, it can be checked with Crypto.check.