Adjust AAVE and include prices fromm #231

This commit is contained in:
Gui Heise 2022-01-18 15:16:35 -05:00
parent b599dff24d
commit de4a682061
4 changed files with 56 additions and 43 deletions

View File

@ -1,4 +1,4 @@
from typing import List, Optional, Tuple from typing import List, Optional
from mev_inspect.schemas.classifiers import ( from mev_inspect.schemas.classifiers import (
ClassifiedTrace, ClassifiedTrace,
@ -21,35 +21,43 @@ class AaveLiquidationClassifier(LiquidationClassifier):
) -> Optional[Liquidation]: ) -> Optional[Liquidation]:
liquidator = liquidation_trace.from_address liquidator = liquidation_trace.from_address
liquidated = liquidation_trace.inputs["_user"]
(debt_token_address, debt_purchase_amount) = _get_debt_data( debt_token_address = liquidation_trace.inputs["_reserve"]
liquidation_trace, child_transfers, liquidator received_token_address = liquidation_trace.inputs["_collateral"]
)
if debt_purchase_amount == 0: debt_purchase_amount = None
received_amount = None
debt_transfer = _get_debt_transfer(liquidator, child_transfers)
received_transfer = _get_received_transfer(liquidator, child_transfers)
if debt_transfer is not None and received_transfer is not None:
debt_token_address = debt_transfer.token_address
debt_purchase_amount = debt_transfer.amount
received_token_address = received_transfer.token_address
received_amount = received_transfer.amount
return Liquidation(
liquidated_user=liquidated,
debt_token_address=debt_token_address,
liquidator_user=liquidator,
debt_purchase_amount=debt_purchase_amount,
protocol=Protocol.aave,
received_amount=received_amount,
received_token_address=received_token_address,
transaction_hash=liquidation_trace.transaction_hash,
trace_address=liquidation_trace.trace_address,
block_number=liquidation_trace.block_number,
error=liquidation_trace.error,
)
else:
return None return None
(received_token_address, received_amount) = _get_received_data(
liquidation_trace, child_transfers, liquidator
)
if received_amount == 0:
return None
return Liquidation(
liquidated_user=liquidation_trace.inputs["_user"],
debt_token_address=debt_token_address,
liquidator_user=liquidator,
debt_purchase_amount=debt_purchase_amount,
protocol=Protocol.aave,
received_amount=received_amount,
received_token_address=received_token_address,
transaction_hash=liquidation_trace.transaction_hash,
trace_address=liquidation_trace.trace_address,
block_number=liquidation_trace.block_number,
error=liquidation_trace.error,
)
class AaveTransferClassifier(TransferClassifier): class AaveTransferClassifier(TransferClassifier):
@staticmethod @staticmethod
@ -84,30 +92,25 @@ ATOKENS_SPEC = ClassifierSpec(
AAVE_CLASSIFIER_SPECS: List[ClassifierSpec] = [AAVE_SPEC, ATOKENS_SPEC] AAVE_CLASSIFIER_SPECS: List[ClassifierSpec] = [AAVE_SPEC, ATOKENS_SPEC]
def _get_received_data( def _get_received_transfer(
liquidation_trace: DecodedCallTrace, liquidator: str, child_transfers: List[Transfer]
child_transfers: List[Transfer], ) -> Optional[Transfer]:
liquidator: str, """Get transfer from AAVE to liquidator"""
) -> Tuple[str, int]:
"""Look for and return liquidator payback from liquidation"""
for transfer in child_transfers: for transfer in child_transfers:
if transfer.to_address == liquidator: if transfer.to_address == liquidator:
return transfer.token_address, transfer.amount return transfer
return liquidation_trace.inputs["_collateral"], 0 return None
def _get_debt_data( def _get_debt_transfer(
liquidation_trace: DecodedCallTrace, liquidator: str, child_transfers: List[Transfer]
child_transfers: List[Transfer], ) -> Optional[Transfer]:
liquidator: str,
) -> Tuple[str, int]:
"""Get transfer from liquidator to AAVE""" """Get transfer from liquidator to AAVE"""
for transfer in child_transfers: for transfer in child_transfers:
if transfer.from_address == liquidator: if transfer.from_address == liquidator:
return transfer.token_address, transfer.amount return transfer
return liquidation_trace.inputs["_reserve"], 0 return None

View File

@ -9,6 +9,7 @@ from mev_inspect.schemas.classifiers import (
SeizeClassifier, SeizeClassifier,
) )
from mev_inspect.schemas.liquidations import Liquidation from mev_inspect.schemas.liquidations import Liquidation
from mev_inspect.schemas.prices import CETH_TOKEN_ADDRESS
from mev_inspect.schemas.traces import Protocol from mev_inspect.schemas.traces import Protocol
from mev_inspect.schemas.transfers import Transfer from mev_inspect.schemas.transfers import Transfer
@ -23,11 +24,19 @@ class CompoundLiquidationClassifier(LiquidationClassifier):
liquidator = liquidation_trace.from_address liquidator = liquidation_trace.from_address
liquidated = liquidation_trace.inputs["borrower"] liquidated = liquidation_trace.inputs["borrower"]
debt_token_address = liquidation_trace.to_address debt_token_address = liquidation_trace.to_address
debt_purchase_amount = liquidation_trace.inputs["repayAmount"]
received_token_address = liquidation_trace.inputs["cTokenCollateral"] received_token_address = liquidation_trace.inputs["cTokenCollateral"]
debt_purchase_amount = None
received_amount = None received_amount = None
if debt_token_address == CETH_TOKEN_ADDRESS:
debt_purchase_amount = liquidation_trace.value
else:
debt_purchase_amount = liquidation_trace.inputs["repayAmount"]
debt_transfer = _get_debt_transfer(liquidator, child_transfers) debt_transfer = _get_debt_transfer(liquidator, child_transfers)
received_transfer = _get_received_transfer(liquidator, child_transfers) received_transfer = _get_received_transfer(liquidator, child_transfers)

View File

@ -53,6 +53,7 @@ COINGECKO_ID_BY_ADDRESS = {
} }
class Price(BaseModel): class Price(BaseModel):
token_address: str token_address: str
usd_price: float usd_price: float