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
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 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
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
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