def test_event_metadata_is_not_bcs_string(): event = jsonrpc.Event( data=jsonrpc.EventData(metadata="1111122222", ), sequence_number=32, ) with pytest.raises(txnmetadata.InvalidEventMetadataForRefundError): txnmetadata.refund_metadata_from_event(event)
def test_event_metadata_is_none_or_empty(): event = jsonrpc.Event( data=jsonrpc.EventData(metadata=None, ), sequence_number=32, ) assert txnmetadata.refund_metadata_from_event(event) == b"" event = jsonrpc.Event( data=jsonrpc.EventData(metadata="", ), sequence_number=32, ) assert txnmetadata.refund_metadata_from_event(event) == b""
def test_refund_transaction_of_custodial_to_custodial_under_threshold(): client = testnet.create_client() faucet = testnet.Faucet(client) sender_custodial = CustodialApp.create(faucet.gen_account(), client) receiver_custodial = CustodialApp.create(faucet.gen_account(), client) # create a payment transaction intent_id = receiver_custodial.payment(user_id=0, amount=1_000_000) intent = identifier.decode_intent(intent_id, identifier.TDM) receiver_address = utils.account_address(intent.account_address) script = stdlib.encode_peer_to_peer_with_metadata_script( currency=utils.currency_code(intent.currency_code), payee=receiver_address, amount=intent.amount, metadata=txnmetadata.general_metadata( sender_custodial.find_user_sub_address_by_id(0), intent.sub_address), metadata_signature=b"", # only travel rule metadata requires signature ) sender = sender_custodial.available_child_vasp() txn = sender_custodial.create_transaction(sender, script, intent.currency_code) signed_txn = sender.sign(txn) client.submit(signed_txn) executed_txn = client.wait_for_transaction(signed_txn) # start to refund the transaction # find the event for the receiver, a p2p transaction may contains multiple receivers # in the future. event = txnmetadata.find_refund_reference_event(executed_txn, receiver_address) assert event is not None amount = event.data.amount.amount currency_code = event.data.amount.currency refund_receiver_address = utils.account_address(event.data.sender) metadata = txnmetadata.refund_metadata_from_event(event) refund_txn_script = stdlib.encode_peer_to_peer_with_metadata_script( currency=utils.currency_code(currency_code), payee=refund_receiver_address, amount=amount, metadata=metadata, metadata_signature=b"", # only travel rule metadata requires signature ) # receiver is sender of refund txn sender = receiver_custodial.available_child_vasp() txn = receiver_custodial.create_transaction(sender, refund_txn_script, currency_code) refund_executed_txn = receiver_custodial.submit_and_wait(sender.sign(txn)) assert refund_executed_txn is not None
def test_refund_metadata_from_event_that_has_from_subaddress(): from_sub_address = "8f8b82153010a1bd" reference_event_seq = 324 metadata = txnmetadata.general_metadata( utils.sub_address(from_sub_address)) event = jsonrpc.Event( data=jsonrpc.EventData(metadata=metadata.hex(), ), sequence_number=reference_event_seq, ) ret = txnmetadata.refund_metadata_from_event(event) assert ret is not None gm = diem_types.Metadata__GeneralMetadata.bcs_deserialize(ret) assert gm is not None assert gm.value.value.from_subaddress is None assert gm.value.value.to_subaddress.hex() == from_sub_address assert int(gm.value.value.referenced_event) == reference_event_seq