Merge pull request #86 from flashbots/liquidation-models
Add liquidation models
This commit is contained in:
commit
7dbbd9f545
@ -63,10 +63,10 @@ def get_aave_liquidations(
|
||||
protocol=Protocol.aave,
|
||||
received_amount=received_amount,
|
||||
transaction_hash=trace.transaction_hash,
|
||||
trace_address=trace.trace_address,
|
||||
block_number=trace.block_number,
|
||||
)
|
||||
)
|
||||
|
||||
return liquidations
|
||||
|
||||
|
||||
|
31
mev_inspect/crud/liquidations.py
Normal file
31
mev_inspect/crud/liquidations.py
Normal file
@ -0,0 +1,31 @@
|
||||
import json
|
||||
from typing import List
|
||||
|
||||
from mev_inspect.models.liquidations import LiquidationModel
|
||||
from mev_inspect.schemas.liquidations import Liquidation
|
||||
|
||||
|
||||
def delete_liquidations_for_block(
|
||||
db_session,
|
||||
block_number: int,
|
||||
) -> None:
|
||||
(
|
||||
db_session.query(LiquidationModel)
|
||||
.filter(LiquidationModel.block_number == block_number)
|
||||
.delete()
|
||||
)
|
||||
|
||||
db_session.commit()
|
||||
|
||||
|
||||
def write_liquidations(
|
||||
db_session,
|
||||
liquidations: List[Liquidation],
|
||||
) -> None:
|
||||
models = [
|
||||
LiquidationModel(**json.loads(liquidation.json()))
|
||||
for liquidation in liquidations
|
||||
]
|
||||
|
||||
db_session.bulk_save_objects(models)
|
||||
db_session.commit()
|
@ -17,8 +17,13 @@ from mev_inspect.crud.miner_payments import (
|
||||
delete_miner_payments_for_block,
|
||||
write_miner_payments,
|
||||
)
|
||||
|
||||
from mev_inspect.crud.swaps import delete_swaps_for_block, write_swaps
|
||||
from mev_inspect.crud.transfers import delete_transfers_for_block, write_transfers
|
||||
from mev_inspect.crud.liquidations import (
|
||||
delete_liquidations_for_block,
|
||||
write_liquidations,
|
||||
)
|
||||
from mev_inspect.miner_payments import get_miner_payments
|
||||
from mev_inspect.swaps import get_swaps
|
||||
from mev_inspect.transfers import get_transfers
|
||||
@ -38,6 +43,7 @@ def inspect_block(
|
||||
should_write_swaps: bool = True,
|
||||
should_write_transfers: bool = True,
|
||||
should_write_arbitrages: bool = True,
|
||||
should_write_liquidations: bool = True,
|
||||
should_write_miner_payments: bool = True,
|
||||
):
|
||||
block = create_from_block_number(base_provider, w3, block_number, should_cache)
|
||||
@ -79,6 +85,10 @@ def inspect_block(
|
||||
liquidations = get_aave_liquidations(classified_traces)
|
||||
logger.info(f"Found {len(liquidations)} liquidations")
|
||||
|
||||
if should_write_liquidations:
|
||||
delete_liquidations_for_block(db_session, block_number)
|
||||
write_liquidations(db_session, liquidations)
|
||||
|
||||
miner_payments = get_miner_payments(
|
||||
block.miner, block.base_fee_per_gas, classified_traces, block.receipts
|
||||
)
|
||||
|
18
mev_inspect/models/liquidations.py
Normal file
18
mev_inspect/models/liquidations.py
Normal file
@ -0,0 +1,18 @@
|
||||
from sqlalchemy import Column, Numeric, String, ARRAY, Integer
|
||||
|
||||
from .base import Base
|
||||
|
||||
|
||||
class LiquidationModel(Base):
|
||||
__tablename__ = "liquidations"
|
||||
|
||||
liquidated_user = Column(String, nullable=False)
|
||||
liquidator_user = Column(String, nullable=False)
|
||||
collateral_token_address = Column(String, nullable=False)
|
||||
debt_token_address = Column(String, nullable=False)
|
||||
debt_purchase_amount = Column(Numeric, nullable=False)
|
||||
received_amount = Column(Numeric, nullable=False)
|
||||
protocol = Column(String, nullable=True)
|
||||
transaction_hash = Column(String, primary_key=True)
|
||||
trace_address = Column(ARRAY(Integer), primary_key=True)
|
||||
block_number = Column(Numeric, nullable=False)
|
@ -1,3 +1,4 @@
|
||||
from typing import List
|
||||
from pydantic import BaseModel
|
||||
from mev_inspect.schemas.classified_traces import Protocol
|
||||
|
||||
@ -11,4 +12,5 @@ class Liquidation(BaseModel):
|
||||
received_amount: int
|
||||
protocol: Protocol
|
||||
transaction_hash: str
|
||||
trace_address: List[int]
|
||||
block_number: str
|
||||
|
@ -24,6 +24,7 @@ def test_single_weth_liquidation():
|
||||
received_amount=8182733924513576561,
|
||||
protocol=Protocol.aave,
|
||||
transaction_hash=transaction_hash,
|
||||
trace_address=[1, 1, 6],
|
||||
block_number=block_number,
|
||||
)
|
||||
]
|
||||
@ -53,6 +54,7 @@ def test_single_liquidation():
|
||||
received_amount=2657946947610159065393,
|
||||
protocol=Protocol.aave,
|
||||
transaction_hash=transaction_hash,
|
||||
trace_address=[0, 7, 1, 0, 6],
|
||||
block_number=block_number,
|
||||
)
|
||||
]
|
||||
@ -81,6 +83,7 @@ def test_multiple_liquidations_in_block():
|
||||
received_amount=10111753901939162887,
|
||||
protocol=Protocol.aave,
|
||||
transaction_hash=transaction1,
|
||||
trace_address=[],
|
||||
block_number=block_number,
|
||||
)
|
||||
|
||||
@ -93,6 +96,7 @@ def test_multiple_liquidations_in_block():
|
||||
received_amount=21996356316098208090,
|
||||
protocol=Protocol.aave,
|
||||
transaction_hash=transaction2,
|
||||
trace_address=[],
|
||||
block_number=block_number,
|
||||
)
|
||||
|
||||
@ -105,6 +109,7 @@ def test_multiple_liquidations_in_block():
|
||||
received_amount=121531358145247546,
|
||||
protocol=Protocol.aave,
|
||||
transaction_hash=transaction3,
|
||||
trace_address=[],
|
||||
block_number=block_number,
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user