From 63087fc0e820bd92c46e596fd9d4fb4b65ee4305 Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Mon, 10 Jan 2022 10:14:58 -0500 Subject: [PATCH 1/4] Support aave self-liquidations --- mev_inspect/aave_liquidations.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index 05a8de6..f89c2cf 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -36,11 +36,11 @@ def get_aave_liquidations( trace.transaction_hash, trace.trace_address, traces ) (debt_token_address, debt_purchase_amount) = _get_debt_data( - child_traces, liquidator + trace, child_traces, liquidator ) (received_token_address, received_amount) = _get_received_data( - child_traces, liquidator + trace, child_traces, liquidator ) liquidations.append( @@ -63,26 +63,28 @@ def get_aave_liquidations( def _get_received_data( - child_traces: List[ClassifiedTrace], liquidator: str + liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str ) -> Tuple[str, int]: """Look for and return liquidator payback from liquidation""" - for child in child_traces: child_transfer: Optional[Transfer] = get_transfer(child) - if child_transfer is not None: + if child_transfer is not None and child_transfer.to_address == liquidator: + return child_transfer.token_address, child_transfer.amount - if child_transfer.to_address == liquidator: + if liquidation.error is not None: + return liquidation.inputs["_collateral"], 0 - return child_transfer.token_address, child_transfer.amount - - raise RuntimeError("Transfer from AAVE to liquidator not found!") + else: + raise RuntimeError( + f"No payback or input data found for liquidation in tx: {liquidation.transaction_hash}" + ) def _get_debt_data( - child_traces: List[ClassifiedTrace], liquidator: str + liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str ) -> Tuple[str, int]: """Get transfer from liquidator to AAVE""" @@ -93,7 +95,12 @@ def _get_debt_data( if child_transfer is not None: if child_transfer.from_address == liquidator: - return child_transfer.token_address, child_transfer.amount - raise RuntimeError("Transfer from liquidator to AAVE not found!") + if liquidation.error is not None: + return liquidation.inputs["_reserve"], liquidation.inputs["_purchaseAmount"] + + else: + raise RuntimeError( + f"No transfer or input data found for liquidation in tx: {liquidation.transaction_hash}" + ) From 2bb760874d3634a0b25f094899f63cb6d838142b Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Mon, 10 Jan 2022 14:18:37 -0500 Subject: [PATCH 2/4] Remove exceptions --- mev_inspect/aave_liquidations.py | 35 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index f89c2cf..9a368c7 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -14,7 +14,7 @@ from mev_inspect.transfers import get_transfer def get_aave_liquidations( traces: List[ClassifiedTrace], -) -> List[Liquidation]: +) -> Optional[List[Liquidation]]: """Inspect list of classified traces and identify liquidation""" liquidations: List[Liquidation] = [] @@ -39,10 +39,16 @@ def get_aave_liquidations( trace, child_traces, liquidator ) + if debt_purchase_amount == 0: + continue + (received_token_address, received_amount) = _get_received_data( trace, child_traces, liquidator ) + if received_amount == 0: + continue + liquidations.append( Liquidation( liquidated_user=trace.inputs["_user"], @@ -63,7 +69,9 @@ def get_aave_liquidations( def _get_received_data( - liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str + liquidation_trace: DecodedCallTrace, + child_traces: List[ClassifiedTrace], + liquidator: str, ) -> Tuple[str, int]: """Look for and return liquidator payback from liquidation""" @@ -74,17 +82,13 @@ def _get_received_data( if child_transfer is not None and child_transfer.to_address == liquidator: return child_transfer.token_address, child_transfer.amount - if liquidation.error is not None: - return liquidation.inputs["_collateral"], 0 - - else: - raise RuntimeError( - f"No payback or input data found for liquidation in tx: {liquidation.transaction_hash}" - ) + return liquidation_trace.inputs["_collateral"], 0 def _get_debt_data( - liquidation: DecodedCallTrace, child_traces: List[ClassifiedTrace], liquidator: str + liquidation_trace: DecodedCallTrace, + child_traces: List[ClassifiedTrace], + liquidator: str, ) -> Tuple[str, int]: """Get transfer from liquidator to AAVE""" @@ -97,10 +101,7 @@ def _get_debt_data( if child_transfer.from_address == liquidator: return child_transfer.token_address, child_transfer.amount - if liquidation.error is not None: - return liquidation.inputs["_reserve"], liquidation.inputs["_purchaseAmount"] - - else: - raise RuntimeError( - f"No transfer or input data found for liquidation in tx: {liquidation.transaction_hash}" - ) + return ( + liquidation_trace.inputs["_reserve"], + liquidation_trace.inputs["_purchaseAmount"], + ) From c28f7c6174c579a0cf81252fbfcf0ab49dfa1829 Mon Sep 17 00:00:00 2001 From: Gui Heise Date: Mon, 10 Jan 2022 14:21:28 -0500 Subject: [PATCH 3/4] Remove unused Optional --- mev_inspect/aave_liquidations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index 9a368c7..e3a7350 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -14,7 +14,7 @@ from mev_inspect.transfers import get_transfer def get_aave_liquidations( traces: List[ClassifiedTrace], -) -> Optional[List[Liquidation]]: +) -> List[Liquidation]: """Inspect list of classified traces and identify liquidation""" liquidations: List[Liquidation] = [] From 403e84fa29269046e49f8ed3837dfaa45ce5404f Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Tue, 11 Jan 2022 09:48:41 -0500 Subject: [PATCH 4/4] should be zero if we dont know --- mev_inspect/aave_liquidations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mev_inspect/aave_liquidations.py b/mev_inspect/aave_liquidations.py index e3a7350..f72eca0 100644 --- a/mev_inspect/aave_liquidations.py +++ b/mev_inspect/aave_liquidations.py @@ -103,5 +103,5 @@ def _get_debt_data( return ( liquidation_trace.inputs["_reserve"], - liquidation_trace.inputs["_purchaseAmount"], + 0, )