Source code for pymavryk.michelson.types.sapling

from copy import copy
from typing import List
from typing import Optional
from typing import Type

from pymavryk.context.abstract import AbstractContext
from pymavryk.michelson.micheline import Micheline
from pymavryk.michelson.micheline import MichelineLiteral
from pymavryk.michelson.micheline import MichelineSequence
from pymavryk.michelson.micheline import parse_micheline_literal
from pymavryk.michelson.types.base import MichelsonType


[docs]class SaplingTransactionType(MichelsonType, prim='sapling_transaction', args_len=1): pass
[docs]class SaplingTransactionDeprecatedType(MichelsonType, prim='sapling_transaction_deprecated', args_len=1): pass
[docs]class SaplingStateType(MichelsonType, prim='sapling_state', args_len=1): def __init__(self, ptr: Optional[int] = None): super(SaplingStateType, self).__init__() self.ptr = ptr self.context: Optional[AbstractContext] = None def __repr__(self): if self.ptr: return f'<{self.ptr}>' else: return '{}'
[docs] @staticmethod def empty(memo_size: int): cls = SaplingStateType.create_type(args=[MichelineLiteral.create(memo_size)]) return cls()
[docs] @classmethod def from_micheline_value(cls, val_expr) -> 'SaplingStateType': if isinstance(val_expr, dict): ptr = parse_micheline_literal(val_expr, {'int': int}) return cls(ptr=ptr) elif isinstance(val_expr, list): return cls() else: raise AssertionError(f'unexpected value {val_expr}')
[docs] def to_micheline_value(self, mode='readable', lazy_diff=False): if lazy_diff: return [] else: assert self.ptr is not None, f'Sapling_state id is not defined' return {'int': str(self.ptr)}
[docs] def to_python_object(self, try_unpack=False, lazy_diff=False, comparable=False): assert not comparable, f'{self.prim} is not comparable' if self.ptr is not None: return self.ptr else: return []
[docs] def to_literal(self) -> Type[Micheline]: if self.ptr is not None: return MichelineLiteral.create(self.ptr) else: return MichelineSequence.create_type(args=[])
[docs] def attach_context(self, context: AbstractContext, big_map_copy=False): self.context = context self.ptr = context.get_tmp_sapling_state_id()
[docs] def merge_lazy_diff(self, lazy_diff: List[dict]) -> 'MichelsonType': return copy(self)
[docs] def aggregate_lazy_diff(self, lazy_diff: List[dict], mode='readable') -> 'MichelsonType': assert self.ptr is not None, f'Sapling_state ID is not defined' if self.context: dst_ptr, _ = self.context.get_sapling_state_diff() else: dst_ptr = self.ptr return type(self)(dst_ptr)