def trade_record_to_dict(record: TradeRecord) -> Dict: """ Convinence function to return only part of trade record we care about and show correct status to the ui""" result = {} result["trade_id"] = record.trade_id.hex() result["sent"] = record.sent result["my_offer"] = record.my_offer result["created_at_time"] = record.created_at_time result["accepted_at_time"] = record.accepted_at_time result["confirmed_at_index"] = record.confirmed_at_index result["status"] = trade_status_ui_string(TradeStatus(record.status)) success, offer_dict, error = get_discrepancies_for_spend_bundle(record.spend_bundle) if success is False or offer_dict is None: raise ValueError(error) result["offer_dict"] = offer_dict return result
async def test_cc_trade(self, wallets_prefarm): wallet_node_0, wallet_node_1, full_node = wallets_prefarm wallet_0 = wallet_node_0.wallet_state_manager.main_wallet wallet_1 = wallet_node_1.wallet_state_manager.main_wallet cc_wallet: CCWallet = await CCWallet.create_new_cc( wallet_node_0.wallet_state_manager, wallet_0, uint64(100)) for i in range(1, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_wallet.get_confirmed_balance, 100) await time_out_assert(15, cc_wallet.get_unconfirmed_balance, 100) assert cc_wallet.cc_info.my_genesis_checker is not None colour = cc_wallet.get_colour() cc_wallet_2: CCWallet = await CCWallet.create_wallet_for_cc( wallet_node_1.wallet_state_manager, wallet_1, colour) assert (cc_wallet.cc_info.my_genesis_checker == cc_wallet_2.cc_info.my_genesis_checker) for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) # send cc_wallet 2 a coin cc_hash = await cc_wallet_2.get_new_inner_hash() tx_record = await cc_wallet.generate_signed_transaction([uint64(1)], [cc_hash]) await wallet_0.wallet_state_manager.add_pending_transaction(tx_record) for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) trade_manager_0 = wallet_node_0.wallet_state_manager.trade_manager trade_manager_1 = wallet_node_1.wallet_state_manager.trade_manager file = "test_offer_file.offer" file_path = Path(file) if file_path.exists(): file_path.unlink() offer_dict = {1: 10, 2: -30} success, trade_offer, error = await trade_manager_0.create_offer_for_ids( offer_dict, file) assert success is True assert trade_offer is not None success, offer, error = await trade_manager_1.get_discrepancies_for_offer( file_path) assert error is None assert success is True assert offer is not None assert offer["chia"] == -10 assert offer[colour] == 30 success, trade, reason = await trade_manager_1.respond_to_offer( file_path) assert success is True for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_wallet_2.get_confirmed_balance, 31) await time_out_assert(15, cc_wallet_2.get_unconfirmed_balance, 31) trade_2 = await trade_manager_0.get_trade_by_id(trade_offer.trade_id) assert TradeStatus(trade_2.status) is TradeStatus.CONFIRMED
async def test_cc_trade_with_multiple_colours(self, wallets_prefarm): # This test start with CCWallet in both wallets. wall # wallet1 {wallet_id: 2 = 70} # wallet2 {wallet_id: 2 = 30} wallet_node_a, wallet_node_b, full_node = wallets_prefarm wallet_a = wallet_node_a.wallet_state_manager.main_wallet wallet_b = wallet_node_b.wallet_state_manager.main_wallet # cc_a_2 = coloured coin, Alice, wallet id = 2 cc_a_2 = wallet_node_a.wallet_state_manager.wallets[2] cc_b_2 = wallet_node_b.wallet_state_manager.wallets[2] cc_a_3: CCWallet = await CCWallet.create_new_cc( wallet_node_a.wallet_state_manager, wallet_a, uint64(100)) for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_a_3.get_confirmed_balance, 100) await time_out_assert(15, cc_a_3.get_unconfirmed_balance, 100) # store these for asserting change later cc_balance = await cc_a_2.get_unconfirmed_balance() cc_balance_2 = await cc_b_2.get_unconfirmed_balance() assert cc_a_3.cc_info.my_genesis_checker is not None red = cc_a_3.get_colour() for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) cc_b_3: CCWallet = await CCWallet.create_wallet_for_cc( wallet_node_b.wallet_state_manager, wallet_b, red) assert cc_a_3.cc_info.my_genesis_checker == cc_b_3.cc_info.my_genesis_checker for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) trade_manager_0 = wallet_node_a.wallet_state_manager.trade_manager trade_manager_1 = wallet_node_b.wallet_state_manager.trade_manager file = "test_offer_file.offer" file_path = Path(file) if file_path.exists(): file_path.unlink() # Wallet offer_dict = {1: 1000, 2: -20, 4: -50} success, trade_offer, error = await trade_manager_0.create_offer_for_ids( offer_dict, file) assert success is True assert trade_offer is not None success, offer, error = await trade_manager_1.get_discrepancies_for_offer( file_path) assert error is None assert success is True assert offer is not None assert offer["chia"] == -1000 colour_2 = cc_a_2.get_colour() colour_3 = cc_a_3.get_colour() assert offer[colour_2] == 20 assert offer[colour_3] == 50 success, trade, reason = await trade_manager_1.respond_to_offer( file_path) assert success is True for i in range(0, 10): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_b_3.get_confirmed_balance, 50) await time_out_assert(15, cc_b_3.get_unconfirmed_balance, 50) await time_out_assert(15, cc_a_3.get_confirmed_balance, 50) await time_out_assert(15, cc_a_3.get_unconfirmed_balance, 50) await time_out_assert(15, cc_a_2.get_unconfirmed_balance, cc_balance - offer[colour_2]) await time_out_assert(15, cc_b_2.get_unconfirmed_balance, cc_balance_2 + offer[colour_2]) trade = await trade_manager_0.get_trade_by_id(trade_offer.trade_id) status: TradeStatus = TradeStatus(trade.status) assert status is TradeStatus.CONFIRMED
async def test_cc_trade(self, wallets_prefarm): wallet_node_0, wallet_node_1, full_node = wallets_prefarm wallet_0 = wallet_node_0.wallet_state_manager.main_wallet wallet_1 = wallet_node_1.wallet_state_manager.main_wallet cc_wallet: CCWallet = await CCWallet.create_new_cc( wallet_node_0.wallet_state_manager, wallet_0, uint64(100)) for i in range(1, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_wallet.get_confirmed_balance, 100) await time_out_assert(15, cc_wallet.get_unconfirmed_balance, 100) assert cc_wallet.cc_info.my_core is not None colour = cc_wallet_puzzles.get_genesis_from_core( cc_wallet.cc_info.my_core) cc_wallet_2: CCWallet = await CCWallet.create_wallet_for_cc( wallet_node_1.wallet_state_manager, wallet_1, colour) assert cc_wallet.cc_info.my_core == cc_wallet_2.cc_info.my_core for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) trade_manager_0 = wallet_node_0.wallet_state_manager.trade_manager trade_manager_1 = wallet_node_1.wallet_state_manager.trade_manager file = "test_offer_file.offer" file_path = Path(file) if file_path.exists(): file_path.unlink() offer_dict = {1: 10, 2: -30} success, trade_offer, error = await trade_manager_0.create_offer_for_ids( offer_dict, file) assert success is True assert trade_offer is not None success, offer, error = await trade_manager_1.get_discrepancies_for_offer( file_path) assert error is None assert success is True assert offer is not None assert offer["chia"] == -10 assert offer[colour] == 30 success, trade, reason = await trade_manager_1.respond_to_offer( file_path) assert success is True for i in range(0, buffer_blocks): await full_node.farm_new_block(FarmNewBlockProtocol(token_bytes())) await time_out_assert(15, cc_wallet_2.get_confirmed_balance, 30) await time_out_assert(15, cc_wallet_2.get_unconfirmed_balance, 30) trade: TradeStatus = await trade_manager_0.get_trade_by_id( trade_offer.trade_id) assert TradeStatus(trade.status) is TradeStatus.CONFIRMED