def test_assert_my_id(self):
        run = asyncio.get_event_loop().run_until_complete

        remote = make_client_server()

        puzzle_program = p2_delegated_conditions.puzzle_for_pk(
            public_key_bytes_for_index(8))
        puzzle_hash = ProgramHash(puzzle_program)

        coin_1 = farm_spendable_coin(remote, puzzle_hash)
        coin_2 = farm_spendable_coin(remote, puzzle_hash)
        coin_3 = farm_spendable_coin(remote, puzzle_hash)

        conditions_coin_1 = [make_assert_my_coin_id_condition(coin_1.name())]
        solution_1 = p2_delegated_conditions.solution_for_conditions(
            puzzle_program, conditions_coin_1)
        spend_bundle = build_spend_bundle(coin_1, solution_1)
        r = run(remote.push_tx(tx=spend_bundle))
        assert r["response"].startswith("accepted")

        spend_bundle = build_spend_bundle(coin_2, solution_1)
        r = run(remote.push_tx(tx=spend_bundle))
        assert r.args[0].startswith(
            "exception: (<Err.ASSERT_MY_COIN_ID_FAILED")

        spend_bundle = build_spend_bundle(coin_3, solution_1)
        r = run(remote.push_tx(tx=spend_bundle))
        assert r.args[0].startswith(
            "exception: (<Err.ASSERT_MY_COIN_ID_FAILED")
Exemple #2
0
 def make_solution(self, primaries=[], min_time=0, me={}, consumed=[]):
     ret = []
     for primary in primaries:
         ret.append(make_create_coin_condition(
             primary['puzzlehash'], primary['amount']))
     for coin in consumed:
         ret.append(make_assert_coin_consumed_condition(coin))
     if min_time > 0:
         ret.append(make_assert_min_time_condition(min_time))
     if me:
         ret.append(make_assert_my_coin_id_condition(me['id']))
     return clvm.to_sexp_f([puzzle_for_conditions(ret), []])
 def solution_maker(coin, remote):
     print(coin.name())
     if fuzz_coin:
         coin = fuzz_coin(remote, puzzle_hash)
         print(coin.name())
     id_condition = make_assert_my_coin_id_condition(coin.name())
     delegated_puzzle = p2_conditions.puzzle_for_conditions(
         conditions + [id_condition])
     delegated_solution = p2_delegated_conditions.solution_for_conditions(
         delegated_puzzle, [])
     solution = p2_m_of_n_delegate_direct.solution_for_delegated_puzzle(
         M, pks, selectors, delegated_puzzle, delegated_solution)
     return solution
def make_solution(parent,
                  puzzlehash,
                  value,
                  stake_factor,
                  primaries=[],
                  min_time=0,
                  me={},
                  recovery=False):
    conditions = []
    for primary in primaries:
        conditions.append(
            make_create_coin_condition(primary['puzzlehash'],
                                       primary['amount']))
    if min_time > 0:
        conditions.append(make_assert_min_time_condition(min_time))
    if me:
        conditions.append(make_assert_my_coin_id_condition(me['id']))
    conditions = [binutils.assemble("#q"), conditions]
    solution = [
        conditions, [], 1 if recovery else 0, parent, puzzlehash, value,
        math.floor(value * stake_factor)
    ]
    program = Program(to_sexp_f(solution))
    return program
 def solution_maker(coin, remote):
     if fuzz_coin:
         coin = fuzz_coin(remote, puzzle_hash)
     id_condition = make_assert_my_coin_id_condition(coin.name())
     return p2_delegated_conditions.solution_for_conditions(
         puzzle_program, conditions + [id_condition])