Module Mavryk_raw_protocol_alpha.Script_interpreter

This is the Michelson interpreter.

This module offers a way to execute either a Michelson script or a Michelson instruction.

Implementation details are documented in the .ml file.

type Mavryk_protocol_environment_alpha.Error_monad.error +=
  1. | Cannot_serialize_failure
type Mavryk_protocol_environment_alpha.Error_monad.error +=
  1. | Cannot_serialize_storage
type Mavryk_protocol_environment_alpha.Error_monad.error +=
  1. | Michelson_too_many_recursive_calls
type execution_result = {
  1. script : Script_ir_translator.ex_script;
  2. code_size : int;
  3. storage : Alpha_context.Script.expr;
  4. lazy_storage_diff : Alpha_context.Lazy_storage.diffs option;
  5. operations : Script_typed_ir.packed_internal_operation list;
  6. ticket_diffs : Mavryk_protocol_environment_alpha.Z.t Ticket_token_map.t;
  7. ticket_receipt : Ticket_receipt.t;
}

The result from script interpretation.

execute ?logger ctxt ~cached_script mode step_constant ~script ~entrypoint ~parameter ~internal interprets the script's entrypoint for a given parameter.

This will update the local storage of the contract step_constants.self. Other pieces of contextual information (sender, payer, amount, and chain_id) are also passed in step_constant.

internal is true if and only if the execution happens within an internal operation.

mode is the unparsing mode, as declared by Script_ir_translator.

cached_script is the cached elaboration of script, that is the well typed abstract syntax tree produced by the type elaboration of script during a previous execution and stored in the in-memory cache.

execute_with_typed_parameter ?logger ctxt ~cached_script mode step_constant ~script ~entrypoint loc ~parameter_ty ~parameter ~internal interprets the script's entrypoint for a given (typed) parameter.

See execute for more details about the function's arguments.

Internal interpretation loop ============================

The following types and the following functions are exposed in the interface to allow the inference of a gas model in snoop.

Strictly speaking, they should not be considered as part of the interface since they expose implementation details that may change in the future.

module Internals : sig ... end

Internally, the interpretation loop uses a local gas counter.