Michelson REPL

Builtin interpreter

class pytezos.repl.interpreter.Interpreter(debug=True)[source]

Michelson interpreter reimplemented in Python. Based on the following reference: https://michelson.nomadic-labs.com/

execute(code)[source]

Execute Michelson instructions (note that stack is not cleared after execution).

Parameters

code – Michelson source (any valid Michelson expression or special helpers)

Returns

{“success”: True|False, “stdout”: “”, “stderr”: {}, “result”: {“value”: “”, …}}

Extendable parser

exception pytezos.repl.parser.MichelsonRuntimeError(message, trace, data)[source]
classmethod init(message, prim, data=None)[source]
classmethod wrap(error: pytezos.repl.parser.MichelsonRuntimeError, prim)[source]
exception pytezos.repl.parser.MichelsonTypeCheckError(message, trace, data)[source]
class pytezos.repl.parser.Unit[source]
pytezos.repl.parser.assert_big_map_val(type_expr)[source]
pytezos.repl.parser.assert_comparable(type_expr)[source]
pytezos.repl.parser.assert_expr_equal(expected, actual)[source]
pytezos.repl.parser.assert_no_field_annots(annots)[source]
pytezos.repl.parser.assert_pushable(type_expr)[source]
pytezos.repl.parser.assert_single_type_annot(annots)[source]
pytezos.repl.parser.assert_single_var_annot(annots)[source]
pytezos.repl.parser.assert_type(value, exp_type)[source]
pytezos.repl.parser.dispatch_core_map(val_expr, mapping: dict)[source]
pytezos.repl.parser.dispatch_prim_map(val_expr, mapping: dict)[source]
pytezos.repl.parser.expr_equal(a, b)[source]
pytezos.repl.parser.get_bool(val_expr)[source]
pytezos.repl.parser.get_bytes(val_expr)[source]
pytezos.repl.parser.get_core_val(val_expr, core_type)[source]
pytezos.repl.parser.get_entry_expr(type_expr, field_annot)[source]
pytezos.repl.parser.get_int(val_expr)[source]
pytezos.repl.parser.get_prim_args(val_expr, prim, args_len: int)[source]
pytezos.repl.parser.get_string(val_expr)[source]
pytezos.repl.parser.get_type_annots(type_expr: dict) → list[source]
pytezos.repl.parser.is_big_map_val(type_expr)[source]
pytezos.repl.parser.is_comparable(type_expr)[source]
pytezos.repl.parser.is_pushable(type_expr)[source]
pytezos.repl.parser.parse_address(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_big_map(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_bool(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_bytes(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_chain_id(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_contract(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_core_expr(expr) → tuple[source]
pytezos.repl.parser.parse_elt(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_expression(val_expr, type_expr, selector=<function val_selector>, type_path='0')[source]

Run an extensible parser for Micheline expressions. This function will just do the type checking for you, if you want to build a response you’d need to define a selector.

Parameters
  • val_expr – value expression (Micheline)

  • type_expr – corresponding type expression (Micheline)

  • selector – function selector(val_expr, type_expr, val, type_path). Default selector (val_selector) converts Micheline to Python objects

  • type_path – starting binary path (default is ‘0’)

pytezos.repl.parser.parse_int(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_key(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_key_hash(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_lambda(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_list(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_map(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_mutez(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_nat(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_operation(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_option(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_or(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_pair(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_prim_expr(expr) → tuple[source]
pytezos.repl.parser.parse_set(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_signature(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_string(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_timestamp(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.parse_type(type_expr) → Tuple[str, list, Callable][source]
pytezos.repl.parser.parse_unit(val_expr, type_expr, selector, type_path)[source]
pytezos.repl.parser.primitive(prim, args_len=0)[source]
pytezos.repl.parser.remove_field_annots(type_expr)[source]
pytezos.repl.parser.restore_entry_expr(val_expr, type_expr, field_annot)[source]
pytezos.repl.parser.val_selector(val_expr, type_expr, val, type_path)[source]

Interpreter context

class pytezos.repl.context.Context[source]
begin(prim=None)[source]
drop_all()[source]
dump(count: int)[source]
end()[source]
get(key, default=None)[source]
peek()[source]
pop(count: int) → List[pytezos.repl.types.StackItem][source]
pop1()[source]
pop2()[source]
pop3()[source]
print(message)[source]
printf(template: str)[source]
protect(count: int)[source]
push(item: pytezos.repl.types.StackItem, annots=None, move=False)[source]
reset()[source]
restore(count: int)[source]
set(key, value)[source]
spawn(stack)[source]
unset(key)[source]
class pytezos.repl.context.DummyGen[source]
get_fresh_address()[source]

Michelson type system

class pytezos.repl.types.Address(val='', val_expr=None, type_expr=None, **kwargs)[source]
classmethod new(address)[source]
prim = 'address'
class pytezos.repl.types.BigMap(val, val_expr, type_expr, **kwargs)[source]
assert_key_type(item: pytezos.repl.types.StackItem)[source]
assert_val_type(item: pytezos.repl.types.StackItem)[source]
find(key: pytezos.repl.types.StackItem)pytezos.repl.types.StackItem[source]
prim = 'big_map'
remove(key: pytezos.repl.types.StackItem)pytezos.repl.types.BigMap[source]
update(key: pytezos.repl.types.StackItem, value: pytezos.repl.types.StackItem)pytezos.repl.types.BigMap[source]
val_type_expr()[source]
class pytezos.repl.types.Bool(val=False, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'bool'
class pytezos.repl.types.Bytes(val=b'', type_expr=None, val_expr=None, **kwargs)[source]
prim = 'bytes'
class pytezos.repl.types.ChainID(val, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'chain_id'
class pytezos.repl.types.Contract(val, val_expr, type_expr, **kwargs)[source]
assert_param_type(item: pytezos.repl.types.StackItem)[source]
get_address()[source]
get_entrypoint()[source]
classmethod new(contract, type_expr)[source]
prim = 'contract'
class pytezos.repl.types.Int(val=0, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'int'
class pytezos.repl.types.Key(val, val_expr, type_expr, **kwargs)[source]
prim = 'key'
class pytezos.repl.types.KeyHash(val='', val_expr=None, type_expr=None, **kwargs)[source]
classmethod new(key_hash)[source]
prim = 'key_hash'
class pytezos.repl.types.Lambda(val, val_expr, type_expr, **kwargs)[source]
assert_param_type(item: pytezos.repl.types.StackItem)[source]
assert_ret_type(item: pytezos.repl.types.StackItem)[source]
property code
classmethod new(p_type_expr, r_type_expr, code)[source]
partial_apply(item: pytezos.repl.types.StackItem)[source]
prim = 'lambda'
class pytezos.repl.types.List(val, val_expr, type_expr, **kwargs)[source]
assert_val_type(item: pytezos.repl.types.StackItem)[source]
cut_head()[source]
classmethod empty(v_type_expr)[source]
classmethod new(items: list)[source]
prepend(item: pytezos.repl.types.StackItem)pytezos.repl.types.List[source]
prim = 'list'
val_type()[source]
class pytezos.repl.types.Map(val, val_expr, type_expr, **kwargs)[source]
assert_key_type(item: pytezos.repl.types.StackItem)[source]
assert_val_type(item: pytezos.repl.types.StackItem)[source]
classmethod empty(k_type_expr, v_type_expr)[source]
find(key: pytezos.repl.types.StackItem)pytezos.repl.types.StackItem[source]
make_key(k_val_expr)[source]
make_val(v_val_expr)[source]
classmethod new(items: list)[source]
prim = 'map'
remove(key: pytezos.repl.types.StackItem)pytezos.repl.types.Map[source]
update(key: pytezos.repl.types.StackItem, val: pytezos.repl.types.StackItem)pytezos.repl.types.Map[source]
val_type_expr()[source]
class pytezos.repl.types.Mutez(val=0, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'mutez'
class pytezos.repl.types.Nat(val=0, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'nat'
class pytezos.repl.types.Operation(val, val_expr, type_expr, **kwargs)[source]
property content
static format_content(content)[source]
classmethod new(content)[source]
prim = 'operation'
class pytezos.repl.types.Option(val, val_expr, type_expr, **kwargs)[source]
get_some()[source]
is_none()[source]
classmethod none(type_expr)[source]
prim = 'option'
classmethod some(item: pytezos.repl.types.StackItem)[source]
class pytezos.repl.types.Or(val, val_expr, type_expr, **kwargs)[source]
get_some()[source]
is_left()[source]
classmethod left(r_type_expr, item: pytezos.repl.types.StackItem)[source]
prim = 'or'
classmethod right(l_type_expr, item: pytezos.repl.types.StackItem)[source]
class pytezos.repl.types.Pair(val, val_expr, type_expr, **kwargs)[source]
get_element(idx: int)[source]
classmethod new(left: pytezos.repl.types.StackItem, right: pytezos.repl.types.StackItem)[source]
prim = 'pair'
class pytezos.repl.types.Set(val, val_expr, type_expr, **kwargs)[source]
add(item: pytezos.repl.types.StackItem)pytezos.repl.types.Set[source]
assert_key_type(item: pytezos.repl.types.StackItem)[source]
classmethod empty(k_type_expr)[source]
classmethod new(items: list)[source]
prim = 'set'
remove(item: pytezos.repl.types.StackItem)pytezos.repl.types.Set[source]
class pytezos.repl.types.Signature(val, val_expr, type_expr, **kwargs)[source]
prim = 'signature'
class pytezos.repl.types.StackItem(val, val_expr, type_expr, **kwargs)[source]
classmethod init(val_expr, type_expr, **kwargs)[source]
static parse(val_expr, type_expr, **kwargs)[source]
prim = ''
rename(annots: list)[source]
class pytezos.repl.types.String(val='', val_expr=None, type_expr=None, **kwargs)[source]
prim = 'string'
class pytezos.repl.types.Timestamp(val=0, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'timestamp'
class pytezos.repl.types.Unit(val=Unit, val_expr=None, type_expr=None, **kwargs)[source]
prim = 'unit'
pytezos.repl.types.assert_equal_types(a, b)[source]
pytezos.repl.types.assert_stack_item(item: pytezos.repl.types.StackItem)[source]
pytezos.repl.types.assert_stack_type(item: pytezos.repl.types.StackItem, item_type)[source]
pytezos.repl.types.dispatch_type_map(a, b, mapping)[source]
pytezos.repl.types.get_name(annots: list, prefix, default=None)[source]

Big_map abstraction

class pytezos.repl.big_map.BigMapPool[source]
commit(big_map_diff: list)[source]
contains(big_map: pytezos.repl.types.BigMap, key: pytezos.repl.types.StackItem) → bool[source]
diff(storage: pytezos.repl.types.StackItem)[source]
empty(k_type_expr, v_type_expr)pytezos.repl.types.BigMap[source]
find(big_map: pytezos.repl.types.BigMap, key: pytezos.repl.types.StackItem)pytezos.repl.types.StackItem[source]
pre_alloc(val_expr, type_expr, copy=False, network=None)[source]
reset()[source]
pytezos.repl.big_map.elt_to_update(elt, type_expr, big_map_id)[source]
pytezos.repl.big_map.make_elt(args)[source]

PyTezos helpers

pytezos.repl.helpers.do_begin(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_big_map_diff(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_commit(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_debug(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_drop_all(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_dump(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_dump_all(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_expand(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_include(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_patch(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_print(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_reset(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_reset_none(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_run(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.do_unset(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.helpers.is_prim(val_expr, prim)[source]

Arithmetic operations

pytezos.repl.arithmetic.do_abs(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_add(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_and(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_blake2b(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_check_sig(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_compare(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_ediv(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_eq(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_hash_key(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_int(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_is_nat(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_lsl(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_mul(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_neg(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_not(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_or_xor(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_sha(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.arithmetic.do_sub(ctx: pytezos.repl.context.Context, prim, args, annots)[source]

Blockchain-specific operations

pytezos.repl.blockchain.check_contract(ctx: pytezos.repl.context.Context, address, entry_annot, type_expr)[source]
pytezos.repl.blockchain.decrease_balance(ctx: pytezos.repl.context.Context, amount: pytezos.repl.types.Mutez)[source]
pytezos.repl.blockchain.do_address(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_amount(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_balance(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_chain_id(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_contract(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_create_contract(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_implicit_account(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_now(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_parameter(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_self(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_sender(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_set_delegate(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_source(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_transfer_tokens(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.get_balance(ctx: pytezos.repl.context.Context)[source]

Control flow operators

pytezos.repl.blockchain.check_contract(ctx: pytezos.repl.context.Context, address, entry_annot, type_expr)[source]
pytezos.repl.blockchain.decrease_balance(ctx: pytezos.repl.context.Context, amount: pytezos.repl.types.Mutez)[source]
pytezos.repl.blockchain.do_address(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_amount(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_balance(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_chain_id(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_contract(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_create_contract(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_implicit_account(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_now(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_parameter(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_self(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_sender(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_set_delegate(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_source(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.do_transfer_tokens(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.blockchain.get_balance(ctx: pytezos.repl.context.Context)[source]

Operations with structures

pytezos.repl.structures.do_car(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_concat(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_cons(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_empty_big_map(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_empty_map(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_empty_set(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_get(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_left(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_mem(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_nil(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_none(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_pack(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_pair(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_size(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_slice(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_some(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_unit(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_unpack(ctx: pytezos.repl.context.Context, prim, args, annots)[source]
pytezos.repl.structures.do_update(ctx: pytezos.repl.context.Context, prim, args, annots)[source]