예제 #1
0
파일: wallet.py 프로젝트: nondejus/wallets
def spend_coin(wallet, coins, dest_address):
    """
    Create and return an unfinalized SpendBundle.
    """
    conditions = [make_create_coin_condition(bytes.fromhex(dest_address), 1)]
    m = wallet.m()

    coin_solutions = []
    hd_hints = {}
    for coin in coins:
        index = wallet.index_for_puzzle_hash(coin.puzzle_hash, GAP_LIMIT)
        coin_solution, pub_keys = maximal_solution_for_coin(
            wallet, index, coin, conditions
        )
        coin_solutions.append(coin_solution)
        new_hints = {
            fingerprint_for_pk(_.public_child(index)): dict(
                hd_fingerprint=_.fingerprint(), index=index
            )
            for _ in wallet.pub_hd_keys()
        }
        hd_hints.update(new_hints)
    pst = PartiallySignedTransaction(
        coin_solutions=coin_solutions,
        hd_hints=hd_hints,
        multisig=dict(m=m, pub_keys=pub_keys),
        conditions=conditions,
    )
    return pst
예제 #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), []])
예제 #3
0
def make_solution(parent,
                  puzzlehash,
                  value,
                  stake_factor,
                  primaries=[],
                  recovery=False):
    conditions = []
    for primary in primaries:
        conditions.append(
            make_create_coin_condition(primary['puzzlehash'],
                                       primary['amount']))
    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
예제 #4
0
def test_1():
    puzzle_program_0 = puzzle_program_for_index(0)
    puzzle_program_1 = puzzle_program_for_index(1)
    puzzle_program_2 = puzzle_program_for_index(2)

    conditions = [make_create_coin_condition(std_hash(bytes(pp)), amount) for pp, amount in [
        (puzzle_program_1, 1000), (puzzle_program_2, 2000),
    ]]

    puzzle_hash_solution = p2_delegated_puzzle.solution_for_conditions(puzzle_program_0, conditions)

    output_conditions = conditions_for_solution(puzzle_hash_solution)
    from pprint import pprint
    output_conditions_dict = conditions_by_opcode(output_conditions)
    pprint(output_conditions_dict)
    input_coin_info_hash = bytes([0] * 32)
    additions = created_outputs_for_conditions_dict(output_conditions_dict, input_coin_info_hash)
    print(additions)
    assert len(additions) == 2
예제 #5
0
파일: keys.py 프로젝트: nondejus/wallets
def conditions_for_payment(puzzle_hash_amount_pairs):
    conditions = [
        make_create_coin_condition(ph, amount)
        for ph, amount in puzzle_hash_amount_pairs
    ]
    return conditions