Example #1
0
 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]])
Example #4
0
 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)