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(*args, **kwargs)[source]
pytezos.repl.parser.parse_big_map(*args, **kwargs)[source]
pytezos.repl.parser.parse_bool(*args, **kwargs)[source]
pytezos.repl.parser.parse_bytes(*args, **kwargs)[source]
pytezos.repl.parser.parse_chain_id(*args, **kwargs)[source]
pytezos.repl.parser.parse_contract(*args, **kwargs)[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(*args, **kwargs)[source]
pytezos.repl.parser.parse_key(*args, **kwargs)[source]
pytezos.repl.parser.parse_key_hash(*args, **kwargs)[source]
pytezos.repl.parser.parse_lambda(*args, **kwargs)[source]
pytezos.repl.parser.parse_list(*args, **kwargs)[source]
pytezos.repl.parser.parse_map(*args, **kwargs)[source]
pytezos.repl.parser.parse_mutez(*args, **kwargs)[source]
pytezos.repl.parser.parse_nat(*args, **kwargs)[source]
pytezos.repl.parser.parse_operation(*args, **kwargs)[source]
pytezos.repl.parser.parse_option(*args, **kwargs)[source]
pytezos.repl.parser.parse_or(*args, **kwargs)[source]
pytezos.repl.parser.parse_pair(*args, **kwargs)[source]
pytezos.repl.parser.parse_prim_expr(expr) → tuple[source]
pytezos.repl.parser.parse_set(*args, **kwargs)[source]
pytezos.repl.parser.parse_signature(*args, **kwargs)[source]
pytezos.repl.parser.parse_string(*args, **kwargs)[source]
pytezos.repl.parser.parse_timestamp(*args, **kwargs)[source]
pytezos.repl.parser.parse_type(type_expr) → Tuple[str, list, Callable][source]
pytezos.repl.parser.parse_unit(*args, **kwargs)[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(*args, **kwargs)[source]
pytezos.repl.helpers.do_big_map_diff(*args, **kwargs)[source]
pytezos.repl.helpers.do_commit(*args, **kwargs)[source]
pytezos.repl.helpers.do_debug(*args, **kwargs)[source]
pytezos.repl.helpers.do_drop_all(*args, **kwargs)[source]
pytezos.repl.helpers.do_dump(*args, **kwargs)[source]
pytezos.repl.helpers.do_dump_all(*args, **kwargs)[source]
pytezos.repl.helpers.do_expand(*args, **kwargs)[source]
pytezos.repl.helpers.do_include(*args, **kwargs)[source]
pytezos.repl.helpers.do_patch(*args, **kwargs)[source]
pytezos.repl.helpers.do_print(*args, **kwargs)[source]
pytezos.repl.helpers.do_reset(*args, **kwargs)[source]
pytezos.repl.helpers.do_reset_none(*args, **kwargs)[source]
pytezos.repl.helpers.do_run(*args, **kwargs)[source]
pytezos.repl.helpers.do_unset(*args, **kwargs)[source]
pytezos.repl.helpers.is_prim(val_expr, prim)[source]

Arithmetic operations

pytezos.repl.arithmetic.do_abs(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_add(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_and(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_blake2b(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_check_sig(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_compare(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_ediv(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_eq(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_hash_key(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_int(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_is_nat(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_lsl(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_mul(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_neg(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_not(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_or_xor(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_sha(*args, **kwargs)[source]
pytezos.repl.arithmetic.do_sub(*args, **kwargs)[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(*args, **kwargs)[source]
pytezos.repl.blockchain.do_amount(*args, **kwargs)[source]
pytezos.repl.blockchain.do_balance(*args, **kwargs)[source]
pytezos.repl.blockchain.do_chain_id(*args, **kwargs)[source]
pytezos.repl.blockchain.do_contract(*args, **kwargs)[source]
pytezos.repl.blockchain.do_create_contract(*args, **kwargs)[source]
pytezos.repl.blockchain.do_implicit_account(*args, **kwargs)[source]
pytezos.repl.blockchain.do_now(*args, **kwargs)[source]
pytezos.repl.blockchain.do_parameter(*args, **kwargs)[source]
pytezos.repl.blockchain.do_self(*args, **kwargs)[source]
pytezos.repl.blockchain.do_sender(*args, **kwargs)[source]
pytezos.repl.blockchain.do_set_delegate(*args, **kwargs)[source]
pytezos.repl.blockchain.do_source(*args, **kwargs)[source]
pytezos.repl.blockchain.do_transfer_tokens(*args, **kwargs)[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(*args, **kwargs)[source]
pytezos.repl.blockchain.do_amount(*args, **kwargs)[source]
pytezos.repl.blockchain.do_balance(*args, **kwargs)[source]
pytezos.repl.blockchain.do_chain_id(*args, **kwargs)[source]
pytezos.repl.blockchain.do_contract(*args, **kwargs)[source]
pytezos.repl.blockchain.do_create_contract(*args, **kwargs)[source]
pytezos.repl.blockchain.do_implicit_account(*args, **kwargs)[source]
pytezos.repl.blockchain.do_now(*args, **kwargs)[source]
pytezos.repl.blockchain.do_parameter(*args, **kwargs)[source]
pytezos.repl.blockchain.do_self(*args, **kwargs)[source]
pytezos.repl.blockchain.do_sender(*args, **kwargs)[source]
pytezos.repl.blockchain.do_set_delegate(*args, **kwargs)[source]
pytezos.repl.blockchain.do_source(*args, **kwargs)[source]
pytezos.repl.blockchain.do_transfer_tokens(*args, **kwargs)[source]
pytezos.repl.blockchain.get_balance(ctx: pytezos.repl.context.Context)[source]

Operations with structures

pytezos.repl.structures.do_car(*args, **kwargs)[source]
pytezos.repl.structures.do_concat(*args, **kwargs)[source]
pytezos.repl.structures.do_cons(*args, **kwargs)[source]
pytezos.repl.structures.do_empty_big_map(*args, **kwargs)[source]
pytezos.repl.structures.do_empty_map(*args, **kwargs)[source]
pytezos.repl.structures.do_empty_set(*args, **kwargs)[source]
pytezos.repl.structures.do_get(*args, **kwargs)[source]
pytezos.repl.structures.do_left(*args, **kwargs)[source]
pytezos.repl.structures.do_mem(*args, **kwargs)[source]
pytezos.repl.structures.do_nil(*args, **kwargs)[source]
pytezos.repl.structures.do_none(*args, **kwargs)[source]
pytezos.repl.structures.do_pack(*args, **kwargs)[source]
pytezos.repl.structures.do_pair(*args, **kwargs)[source]
pytezos.repl.structures.do_size(*args, **kwargs)[source]
pytezos.repl.structures.do_slice(*args, **kwargs)[source]
pytezos.repl.structures.do_some(*args, **kwargs)[source]
pytezos.repl.structures.do_unit(*args, **kwargs)[source]
pytezos.repl.structures.do_unpack(*args, **kwargs)[source]
pytezos.repl.structures.do_update(*args, **kwargs)[source]