def verify_kyc(user_id: int) -> None: user = get_user(user_id) if _is_verified(user): user_service.update_user( user_id=user_id, registration_status=RegistrationStatus.Approved) if user.first_name == "doctor" and user.last_name == "evil": user_service.update_user( user_id=user_id, registration_status=RegistrationStatus.Rejected) else: user_service.update_user( user_id=user_id, registration_status=RegistrationStatus.Approved) account_service.create_account(account_name=f"{user.username}-account", user_id=user.id)
def setup_inventory_account(): inventory_account = get_account(account_name=INVENTORY_ACCOUNT_NAME) if inventory_account: return create_account(account_name=INVENTORY_ACCOUNT_NAME) currency_pairs = [ CurrencyPairs[f"{Currency.Coin1}_{INVENTORY_COVER_CURRENCY}"], ] for currency_pair in currency_pairs: retries = 10 polling_interval_s = 2 for _ in range(retries): try: buy_funds(currency_pair) except Exception as e: logger.exception("trade and execute quote failed") time.sleep(polling_interval_s)
def test_process_incoming_travel_rule_txn() -> None: account = create_account("fake_account") sender_addr = "46db232847705e05525db0336fd9f337" receiver_addr = "lrw_vasp" sender_subaddr = generate_new_subaddress(account.id) amount = 1000 * 1_000_000 sender = account_address(sender_addr) sequence = 1 currency = DiemCurrency.XUS blockchain_version = 1 off_chain_reference_id = "off_chain_reference_id" metadata, _ = travel_rule(off_chain_reference_id, sender, amount) storage.add_transaction( amount=amount, currency=currency, payment_type=TransactionType.OFFCHAIN, status=TransactionStatus.OFF_CHAIN_READY, source_id=account.id, source_address=sender_addr, source_subaddress=sender_subaddr, destination_address=receiver_addr, reference_id=off_chain_reference_id, ) process_incoming_transaction( sender_address=sender_addr, receiver_address=receiver_addr, sequence=sequence, amount=amount, currency=currency, metadata=diem_types.Metadata__TravelRuleMetadata.bcs_deserialize( metadata), blockchain_version=blockchain_version, ) # successfully parse meta and sequence tx = storage.get_transaction_by_details(source_address=sender_addr, source_subaddress=sender_subaddr, sequence=sequence) assert tx is not None assert tx.sequence == sequence assert tx.blockchain_version == blockchain_version
def test_process_incoming_refund_txn() -> None: initial_sender_account = create_account("fake_account") initial_sender_subaddr = generate_new_subaddress(initial_sender_account.id) initial_sender_addr = "lrw_vasp" initial_receiver_addr = "46db232847705e05525db0336fd9f337" meta = refund_metadata( original_transaction_version=1, reason=diem_types.RefundReason__InvalidSubaddress(), ) initial_tx = storage.add_transaction( amount=500, currency=DiemCurrency.XUS, payment_type=TransactionType.EXTERNAL, status=TransactionStatus.COMPLETED, source_id=initial_sender_account.id, source_address=initial_sender_addr, source_subaddress=initial_sender_subaddr, destination_address=initial_receiver_addr, blockchain_version=1, ) assert initial_tx is not None assert initial_tx.blockchain_version == 1 assert storage.get_transaction_by_blockchain_version(1) is not None process_incoming_transaction( sender_address=initial_receiver_addr, receiver_address=initial_sender_addr, sequence=1, amount=500, currency=DiemCurrency.XUS, metadata=diem_types.Metadata__RefundMetadata.bcs_deserialize(meta), blockchain_version=2, ) tx = storage.get_transaction_by_blockchain_version(2) assert tx is not None assert tx.type == TransactionType.REFUND assert tx.original_txn_id == initial_tx.id
def test_process_incoming_general_txn() -> None: account = create_account("fake_account") sender_addr = "46db232847705e05525db0336fd9f337" subaddr = generate_new_subaddress(account.id) meta = general_metadata(to_subaddress=sub_address(subaddr)) process_incoming_transaction( sender_address=sender_addr, receiver_address="lrw_vasp", sequence=1, amount=100, currency=DiemCurrency.XUS, metadata=diem_types.Metadata__GeneralMetadata.bcs_deserialize(meta), blockchain_version=1, ) # successfully parse meta and sequence tx = storage.get_transaction_by_details(source_address=sender_addr, source_subaddress=None, sequence=1) assert tx is not None
def test_subaddr_map() -> None: account = create_account(account_name="fake_account") subaddr = generate_new_subaddress(account.id) assert get_account_id_from_subaddr(subaddr) == account.id