import unittest from mev_inspect.trace_classifier import TraceClassifier from mev_inspect.classifier_specs import CLASSIFIER_SPECS from mev_inspect.block import _get_cache_path from mev_inspect.strategy_inspectors.compound_v2_ceth import inspect_compound_v2_ceth from mev_inspect.schemas.blocks import Transaction from mev_inspect.schemas.liquidations import ( LiquidationCollateralSource, LiquidationType, LiquidationStatus, ) from mev_inspect.schemas import Block from web3 import Web3 w3 = Web3(Web3.HTTPProvider("")) class TestCompoundV2Liquidation(unittest.TestCase): def test_compound_v2_ceth_liquidation(self): tx_hash = "0xd09e499f2c2d6a900a974489215f25006a5a3fa401a10b8d67fa99480cbb62fb" block_no = 12900060 cache_path = _get_cache_path(block_no) block_data = Block.parse_file(cache_path) tx_data = w3.eth.get_transaction(tx_hash) tx = Transaction( from_address=tx_data["from"], to_address=tx_data["to"], value=tx_data["value"], tx_hash=tx_hash, tx_index=tx_data["transactionIndex"], tx_input=tx_data["input"], tx_gas_used=block_data.txs_gas_data[tx_hash]["gasUsed"], tx_gas_price=block_data.txs_gas_data[tx_hash]["gasPrice"], tx_net_fees_paid=block_data.txs_gas_data[tx_hash]["netFeePaid"], block_number=block_no, ) tx_traces = block_data.get_filtered_traces(tx_hash) trace_clasifier = TraceClassifier(CLASSIFIER_SPECS) classified_traces = trace_clasifier.classify(tx_traces) res = inspect_compound_v2_ceth(tx, classified_traces) self.assertEqual( res.tx_hash, "0xd09e499f2c2d6a900a974489215f25006a5a3fa401a10b8d67fa99480cbb62fb", ) self.assertEqual(res.borrower, "0xc871095098488c17ae14cb898d46da631ad84b59") self.assertEqual(res.collateral_provided, "ether") self.assertEqual(res.collateral_provided_amount, 463900911985743409) self.assertEqual(res.asset_seized, "0x6b175474e89094c44da98b954eedeac495271d0f") self.assertEqual(res.asset_seized_amount, 0) self.assertEqual(res.profit_in_eth, 0) self.assertEqual(res.tokenflow_estimate_in_eth, 0) self.assertEqual(res.tokenflow_diff, 0) self.assertEqual(res.status, LiquidationStatus.seized) self.assertEqual(res.type, LiquidationType.compound_v2_ceth_liquidation) self.assertEqual( res.collateral_source, LiquidationCollateralSource.searcher_contract ) if __name__ == "__main__": unittest.main()