Skip to content

Commit

Permalink
remove deprecated func txnmetadata.refund_metadata_from_event
Browse files Browse the repository at this point in the history
  • Loading branch information
Xiao Li committed Jun 30, 2021
1 parent 292323f commit 652d856
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 148 deletions.
41 changes: 1 addition & 40 deletions src/diem/txnmetadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@


from dataclasses import dataclass
import typing, warnings
import typing
import uuid
from . import diem_types, serde_types, bcs, jsonrpc, utils

Expand Down Expand Up @@ -170,45 +170,6 @@ def find_refund_reference_event(
return None


def refund_metadata_from_event(event: jsonrpc.Event) -> typing.Optional[bytes]:
"""create refund metadat for the event
The given event should be the reference event for the refund, it should have metadata describes
the payment details.
May call `find_refund_reference_event` function to find reference event from a peer to peer transfer
transaction.
Returns empty bytes array if given event metadata is None or empty string, this is for the case
the peer to peer transaction is a non-custodial to non-custodial account, which does not require
metadata, hence the refund transaction should not have metadata too.
Raises InvalidEventMetadataForRefundError if metadata can't be decoded as
diem_types.GeneralMetadata__GeneralMetadataVersion0 for creating the refund metadata
"""

warnings.warn(
"`refund_metadata_from_event` is deprecated, prefer `refund_metadata` to create `diem_types.Metadata__RefundMetadata` BCS serialized bytes"
)

if not event.data.metadata:
return b""

try:
metadata_bytes = bytes.fromhex(event.data.metadata)
metadata = diem_types.Metadata.bcs_deserialize(metadata_bytes)

if isinstance(metadata, diem_types.Metadata__GeneralMetadata):
if isinstance(metadata.value, diem_types.GeneralMetadata__GeneralMetadataVersion0):
gmv0 = metadata.value.value
return general_metadata(gmv0.to_subaddress, gmv0.from_subaddress, event.sequence_number)

raise InvalidEventMetadataForRefundError("unknown metadata type: {metadata}")

raise InvalidEventMetadataForRefundError(f"unknown metadata type: {metadata}")
except ValueError as e:
raise InvalidEventMetadataForRefundError(f"invalid event metadata for refund: {e}, event: {event}")


def payment_metadata(
reference_id: str,
) -> bytes:
Expand Down
108 changes: 0 additions & 108 deletions tests/test_txnmetadata.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# Copyright (c) The Diem Core Contributors
# SPDX-License-Identifier: Apache-2.0

import pytest
from diem import utils, txnmetadata, jsonrpc, diem_types


Expand Down Expand Up @@ -61,113 +60,6 @@ def test_find_refund_reference_event():
assert event.data.receiver == "f72589b71ff4f8d139674a3f7369c69b"


def test_refund_metadata_from_event():
from_sub_address = "8f8b82153010a1bd"
to_sub_address = "111111153010a111"
reference_event_seq = 324

metadata = txnmetadata.general_metadata(utils.sub_address(from_sub_address), utils.sub_address(to_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.hex() == to_sub_address
assert gm.value.value.to_subaddress.hex() == from_sub_address
assert int(gm.value.value.referenced_event) == reference_event_seq


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


def test_refund_metadata_from_event_that_has_to_subaddress():
to_sub_address = "8f8b82153010a1bd"
reference_event_seq = 324

metadata = txnmetadata.general_metadata(None, utils.sub_address(to_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.hex() == to_sub_address
assert gm.value.value.to_subaddress is None
assert int(gm.value.value.referenced_event) == reference_event_seq


def test_event_metadata_is_not_hex_encoded_string():
event = jsonrpc.Event(
data=jsonrpc.EventData(
metadata="random",
),
sequence_number=32,
)
with pytest.raises(txnmetadata.InvalidEventMetadataForRefundError):
txnmetadata.refund_metadata_from_event(event)


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_metadata():
txn_version = 12343
reason = diem_types.RefundReason__UserInitiatedFullRefund()
Expand Down

0 comments on commit 652d856

Please sign in to comment.