Skip to content

Commit 78e1e4d

Browse files
fix: Order transfers by timestamp in descending order (#2743)
1 parent b89b695 commit 78e1e4d

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

safe_transaction_service/history/tests/test_views.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3072,6 +3072,16 @@ def test_incoming_transfers_view(self):
30723072
],
30733073
)
30743074

3075+
# Validate ordering by timestamp (descending - newest first)
3076+
self.assertGreater(
3077+
ethereum_erc_721_event.timestamp,
3078+
ethereum_erc_20_event.timestamp,
3079+
)
3080+
self.assertGreater(
3081+
ethereum_erc_20_event.timestamp,
3082+
internal_tx.timestamp,
3083+
)
3084+
30753085
def test_transfers_view(self):
30763086
safe_address = Account.create().address
30773087
response = self.client.get(
@@ -3364,6 +3374,28 @@ def test_transfers_view(self):
33643374
for result in response.data["results"]:
33653375
self.assertNotEqual(result["type"], TransferType.ETHER_TRANSFER.name)
33663376

3377+
# Validate ordering by timestamp (descending - newest first)
3378+
self.assertGreater(
3379+
ethereum_erc_721_event_2.timestamp,
3380+
ethereum_erc_721_event.timestamp,
3381+
)
3382+
self.assertGreater(
3383+
ethereum_erc_721_event.timestamp,
3384+
ethereum_erc_20_event_2.timestamp,
3385+
)
3386+
self.assertGreater(
3387+
ethereum_erc_20_event_2.timestamp,
3388+
ethereum_erc_20_event.timestamp,
3389+
)
3390+
self.assertGreater(
3391+
ethereum_erc_20_event.timestamp,
3392+
internal_tx_2.timestamp,
3393+
)
3394+
self.assertGreater(
3395+
internal_tx_2.timestamp,
3396+
internal_tx.timestamp,
3397+
)
3398+
33673399
# Test that the result should be cached
33683400
# Mock get_queryset with empty queryset return value to get proper error in case of fail
33693401
with mock.patch.object(

safe_transaction_service/history/views.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -948,13 +948,15 @@ class SafeTransferListView(ListAPIView):
948948

949949
def get_transfers(self, address: str):
950950
erc20_queryset = self.filter_queryset(
951-
ERC20Transfer.objects.to_or_from(address).token_txs()
951+
ERC20Transfer.objects.to_or_from(address).token_txs().order_by("-timestamp")
952952
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
953953
erc721_queryset = self.filter_queryset(
954-
ERC721Transfer.objects.to_or_from(address).token_txs()
954+
ERC721Transfer.objects.to_or_from(address)
955+
.token_txs()
956+
.order_by("-timestamp")
955957
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
956958
ether_queryset = self.filter_queryset(
957-
InternalTx.objects.ether_txs_for_address(address)
959+
InternalTx.objects.ether_txs_for_address(address).order_by("-timestamp")
958960
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
959961
return InternalTx.objects.union_ether_and_token_txs(
960962
erc20_queryset, erc721_queryset, ether_queryset
@@ -1029,13 +1031,15 @@ def get(self, *args, **kwargs):
10291031

10301032
def get_transfers(self, address: str):
10311033
erc20_queryset = self.filter_queryset(
1032-
ERC20Transfer.objects.incoming(address).token_txs()
1034+
ERC20Transfer.objects.incoming(address).token_txs().order_by("-timestamp")
10331035
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10341036
erc721_queryset = self.filter_queryset(
1035-
ERC721Transfer.objects.incoming(address).token_txs()
1037+
ERC721Transfer.objects.incoming(address).token_txs().order_by("-timestamp")
10361038
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10371039
ether_queryset = self.filter_queryset(
1038-
InternalTx.objects.ether_incoming_txs_for_address(address)
1040+
InternalTx.objects.ether_incoming_txs_for_address(address).order_by(
1041+
"-timestamp"
1042+
)
10391043
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10401044

10411045
return InternalTx.objects.union_ether_and_token_txs(

0 commit comments

Comments
 (0)