Merge pull request #86 from flashbots/liquidation-models

Add liquidation models
This commit is contained in:
Gui Heise 2021-10-01 18:06:13 -04:00 committed by GitHub
commit 7dbbd9f545
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 67 additions and 1 deletions

View File

@ -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

View 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()

View File

@ -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
)

View 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)

View File

@ -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

View File

@ -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,
)