def from_condition(cls, condition: Program) -> "Payment": python_condition: List = condition.as_python() puzzle_hash, amount = python_condition[1:3] memos: List[bytes] = [] if len(python_condition) > 3: memos = python_condition[3] return cls(bytes32(puzzle_hash), uint64(int.from_bytes(amount, "big")), memos)
def pool_state_from_extra_data(extra_data: Program) -> Optional[PoolState]: state_bytes: Optional[bytes] = None try: for key, value in extra_data.as_python(): if key == b"p": state_bytes = value break if state_bytes is None: return None return PoolState.from_bytes(state_bytes) except TypeError as e: log.error(f"Unexpected return from PoolWallet Smart Contract code {e}") return None
def parse_sexp_to_condition( sexp: Program, ) -> Tuple[Optional[Err], Optional[ConditionVarPair]]: """ Takes a ChiaLisp sexp and returns a ConditionVarPair. If it fails, returns an Error """ if not sexp.listp(): return Err.INVALID_CONDITION, None items = sexp.as_python() if not isinstance(items[0], bytes): return Err.INVALID_CONDITION, None try: opcode = ConditionOpcode(items[0]) except ValueError: opcode = ConditionOpcode.UNKNOWN if len(items) == 3: return None, ConditionVarPair(opcode, [items[1], items[2]]) return None, ConditionVarPair(opcode, [items[1]])
def add_condition_to_solution(self, condition: Program, solution: Program) -> Program: python_program = solution.as_python() python_program[1].append(condition) return Program.to(python_program)