From 73a29a667ba0cd0ddbf02e56abfb0ab5392e48de Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Thu, 6 Jan 2022 15:08:44 -0500 Subject: [PATCH 1/6] Fix text --- mev_inspect/aave_liquidations.py | 37 +++++++++++++++++++++++++------- tests/liquidation_test.py | 2 +- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index 49833ea..c810d8f 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -23,7 +23,6 @@ AAVE_CONTRACT_ADDRESSES: List[str] = [ "0x030ba81f1c18d280636f32af80b9aad02cf0854e", # AAVE AMM Market DAI "0x79be75ffc64dd58e66787e4eae470c8a1fd08ba4", - # AAVE i "0x030ba81f1c18d280636f32af80b9aad02cf0854e", "0xbcca60bb61934080951369a648fb03df4f96263c", ] @@ -52,18 +51,20 @@ def get_aave_liquidations( child_traces = get_child_traces( trace.transaction_hash, trace.trace_address, traces ) + (debt_token_address, debt_purchase_amount) = _get_debt_data( + trace, child_traces, liquidator + ) - ( - received_token_address, - received_amount, - ) = _get_payback_token_and_amount(trace, child_traces, liquidator) + (received_token_address, received_amount) = _get_received_data( + trace, child_traces, liquidator + ) liquidations.append( Liquidation( liquidated_user=trace.inputs["_user"], - debt_token_address=trace.inputs["_reserve"], + debt_token_address=debt_token_address, liquidator_user=liquidator, - debt_purchase_amount=trace.inputs["_purchaseAmount"], + debt_purchase_amount=debt_purchase_amount, protocol=Protocol.aave, received_amount=received_amount, received_token_address=received_token_address, @@ -77,7 +78,7 @@ def get_aave_liquidations( return liquidations -def _get_payback_token_and_amount( +def _get_received_data( liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str ) -> Tuple[str, int]: @@ -99,3 +100,23 @@ def _get_payback_token_and_amount( return child_transfer.token_address, child_transfer.amount return liquidation.inputs["_collateral"], 0 + + +def _get_debt_data( + liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str +) -> Tuple[str, int]: + """Get transfer from liquidator to AAVE""" + + for child in child_traces: + + if isinstance(child, CallTrace): + + child_transfer: Optional[Transfer] = get_transfer(child) + + if child_transfer is not None: + + if child_transfer.from_address == liquidator: + + return child_transfer.token_address, child_transfer.amount + + return liquidation.inputs["_reserve"], 0 diff --git a/tests/liquidation_test.py b/tests/liquidation_test.py index 30238fd..5d773db 100644 --- a/tests/liquidation_test.py +++ b/tests/liquidation_test.py @@ -102,7 +102,7 @@ def test_multiple_liquidations_in_block(trace_classifier: TraceClassifier): liquidated_user="0x6c6541ae8a7c6a6f968124a5ff2feac8f0c7875b", liquidator_user="0x7185e240d8e9e2d692cbc68d30eecf965e9a7feb", debt_token_address="0x4fabb145d64652a948d72533023f6e7a623c7c53", - debt_purchase_amount=457700000000000000000, + debt_purchase_amount=228905512631913119672, received_amount=10111753901939162887, received_token_address="0x514910771af9ca656af840dff83e8264ecf986ca", protocol=Protocol.aave, From 92904d72989f6037928aa6ec39c03c1b4ff6ca5e Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Thu, 6 Jan 2022 16:14:35 -0500 Subject: [PATCH 2/6] Fix eth transfer liquidations --- tests/liquidation_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/liquidation_test.py b/tests/liquidation_test.py index 5d773db..866d857 100644 --- a/tests/liquidation_test.py +++ b/tests/liquidation_test.py @@ -155,7 +155,7 @@ def test_liquidations_with_eth_transfer(trace_classifier: TraceClassifier): liquidated_user="0xad346c7762f74c78da86d2941c6eb546e316fbd0", liquidator_user="0x27239549dd40e1d60f5b80b0c4196923745b1fd2", debt_token_address="0x514910771af9ca656af840dff83e8264ecf986ca", - debt_purchase_amount=1809152000000000000, + debt_purchase_amount=1040737791751147957, received_amount=15636807387264000, received_token_address=ETH_TOKEN_ADDRESS, protocol=Protocol.aave, From 75748abb4331262e42491874d43556069649aaf4 Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Thu, 6 Jan 2022 16:17:10 -0500 Subject: [PATCH 3/6] Actually fix eth transfers test --- tests/liquidation_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/liquidation_test.py b/tests/liquidation_test.py index 866d857..4b70e26 100644 --- a/tests/liquidation_test.py +++ b/tests/liquidation_test.py @@ -155,7 +155,7 @@ def test_liquidations_with_eth_transfer(trace_classifier: TraceClassifier): liquidated_user="0xad346c7762f74c78da86d2941c6eb546e316fbd0", liquidator_user="0x27239549dd40e1d60f5b80b0c4196923745b1fd2", debt_token_address="0x514910771af9ca656af840dff83e8264ecf986ca", - debt_purchase_amount=1040737791751147957, + debt_purchase_amount=1809152000000000000, received_amount=15636807387264000, received_token_address=ETH_TOKEN_ADDRESS, protocol=Protocol.aave, @@ -168,7 +168,7 @@ def test_liquidations_with_eth_transfer(trace_classifier: TraceClassifier): liquidated_user="0xad346c7762f74c78da86d2941c6eb546e316fbd0", liquidator_user="0x27239549dd40e1d60f5b80b0c4196923745b1fd2", debt_token_address="0x514910771af9ca656af840dff83e8264ecf986ca", - debt_purchase_amount=1809152000000000000, + debt_purchase_amount=1040737791751147957, received_amount=8995273139160873, received_token_address=ETH_TOKEN_ADDRESS, protocol=Protocol.aave, From 818a9b0b658c4a0e829f1b4a934fa480e00e654c Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Thu, 6 Jan 2022 16:35:51 -0500 Subject: [PATCH 4/6] Raise exceptions --- mev_inspect/aave_liquidations.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index c810d8f..34f3055 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -52,11 +52,11 @@ def get_aave_liquidations( trace.transaction_hash, trace.trace_address, traces ) (debt_token_address, debt_purchase_amount) = _get_debt_data( - trace, child_traces, liquidator + child_traces, liquidator ) (received_token_address, received_amount) = _get_received_data( - trace, child_traces, liquidator + child_traces, liquidator ) liquidations.append( @@ -79,7 +79,7 @@ def get_aave_liquidations( def _get_received_data( - liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str + child_traces: List[ClassifiedTrace], liquidator: str ) -> Tuple[str, int]: """Look for and return liquidator payback from liquidation""" @@ -92,18 +92,15 @@ def _get_received_data( if child_transfer is not None: - if ( - child_transfer.to_address == liquidator - and child.from_address in AAVE_CONTRACT_ADDRESSES - ): + if child_transfer.to_address == liquidator: return child_transfer.token_address, child_transfer.amount - return liquidation.inputs["_collateral"], 0 + raise RuntimeError("Transfer from AAVE to liquidator not found!") def _get_debt_data( - liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str + child_traces: List[ClassifiedTrace], liquidator: str ) -> Tuple[str, int]: """Get transfer from liquidator to AAVE""" @@ -119,4 +116,4 @@ def _get_debt_data( return child_transfer.token_address, child_transfer.amount - return liquidation.inputs["_reserve"], 0 + raise RuntimeError("Transfer from liquidator to AAVE not found!") From 327695c56c7b9168f0e4be04bedbafcc925beed5 Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Thu, 6 Jan 2022 16:38:48 -0500 Subject: [PATCH 5/6] Remove AAVE address list --- mev_inspect/aave_liquidations.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index 34f3055..e4a595c 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -12,21 +12,6 @@ from mev_inspect.schemas.transfers import Transfer from mev_inspect.traces import get_child_traces, is_child_of_any_address from mev_inspect.transfers import get_transfer -AAVE_CONTRACT_ADDRESSES: List[str] = [ - # AAVE Proxy - "0x398ec7346dcd622edc5ae82352f02be94c62d119", - # AAVE V2 - "0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9", - # AAVE V1 - "0x3dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3", - # AAVE V2 WETH - "0x030ba81f1c18d280636f32af80b9aad02cf0854e", - # AAVE AMM Market DAI - "0x79be75ffc64dd58e66787e4eae470c8a1fd08ba4", - "0x030ba81f1c18d280636f32af80b9aad02cf0854e", - "0xbcca60bb61934080951369a648fb03df4f96263c", -] - def get_aave_liquidations( traces: List[ClassifiedTrace], From 977a72839e2cd8a8c75764ba41be0d7c9dd73271 Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Fri, 7 Jan 2022 11:25:33 -0500 Subject: [PATCH 6/6] Remove instance checks --- mev_inspect/aave_liquidations.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index e4a595c..05a8de6 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -2,7 +2,6 @@ from typing import List, Optional, Tuple from mev_inspect.schemas.liquidations import Liquidation from mev_inspect.schemas.traces import ( - CallTrace, Classification, ClassifiedTrace, DecodedCallTrace, @@ -71,15 +70,13 @@ def _get_received_data( for child in child_traces: - if isinstance(child, CallTrace): + child_transfer: Optional[Transfer] = get_transfer(child) - child_transfer: Optional[Transfer] = get_transfer(child) + if child_transfer is not None: - if child_transfer is not None: + if child_transfer.to_address == liquidator: - if child_transfer.to_address == liquidator: - - return child_transfer.token_address, child_transfer.amount + return child_transfer.token_address, child_transfer.amount raise RuntimeError("Transfer from AAVE to liquidator not found!") @@ -91,14 +88,12 @@ def _get_debt_data( for child in child_traces: - if isinstance(child, CallTrace): + child_transfer: Optional[Transfer] = get_transfer(child) - child_transfer: Optional[Transfer] = get_transfer(child) + if child_transfer is not None: - if child_transfer is not None: + if child_transfer.from_address == liquidator: - if child_transfer.from_address == liquidator: - - return child_transfer.token_address, child_transfer.amount + return child_transfer.token_address, child_transfer.amount raise RuntimeError("Transfer from liquidator to AAVE not found!")