예제 #1
0
def check_idempotency(f, args):
    cost, curried = curry(f, args)

    r = disassemble(curried)
    f_0, args_0 = uncurry(curried)

    assert disassemble(f_0) == disassemble(f)
    assert disassemble(args_0) == disassemble(args)
    return r
def genesis_coin_id_for_genesis_coin_checker(
    genesis_coin_checker: Program, ) -> Optional[bytes32]:
    """
    Given a `genesis_coin_checker` program, pull out the genesis coin id.
    """
    r = uncurry(genesis_coin_checker)
    if r is None:
        return r
    f, args = r
    if f != MOD:
        return None
    return args.first().as_atom()
예제 #3
0
 def uncurry(self) -> Optional[Tuple["Program", "Program"]]:
     return uncurry(self)
예제 #4
0
 def uncurry(self) -> Tuple["Program", "Program"]:
     r = uncurry(self)
     if r is None:
         return self, self.to(0)
     return r
예제 #5
0
def check_is_cc_puzzle(puzzle: Program):
    r = uncurry(puzzle)
    if r is None:
        return False
    inner_f, args = r
    return is_cc_mod(inner_f)