feat: add support for punk snipes

This commit is contained in:
Robert Miller 2021-11-19 17:18:29 -06:00
parent f31430da30
commit 377137d9c8
3 changed files with 47 additions and 10 deletions

View File

@ -27,7 +27,8 @@ from mev_inspect.crud.liquidations import (
write_liquidations, write_liquidations,
) )
from mev_inspect.miner_payments import get_miner_payments from mev_inspect.miner_payments import get_miner_payments
from mev_inspect.punks import get_punk_bid_acceptances, get_punk_bids from mev_inspect.punks import get_punk_bid_acceptances, get_punk_bids, get_punk_snipes
from mev_inspect.schemas import punk_snipe
from mev_inspect.swaps import get_swaps from mev_inspect.swaps import get_swaps
from mev_inspect.transfers import get_transfers from mev_inspect.transfers import get_transfers
from mev_inspect.liquidations import get_liquidations from mev_inspect.liquidations import get_liquidations
@ -93,10 +94,10 @@ async def inspect_block(
write_liquidations(inspect_db_session, liquidations) write_liquidations(inspect_db_session, liquidations)
punk_bids = get_punk_bids(classified_traces) punk_bids = get_punk_bids(classified_traces)
logger.info(f"Block: {block_number} -- Found {len(punk_bids)} punk bids")
punk_bid_acceptances = get_punk_bid_acceptances(classified_traces) punk_bid_acceptances = get_punk_bid_acceptances(classified_traces)
logger.info(f"Block: {block_number} -- Found {len(punk_bid_acceptances)} punk bids")
punk_snipes = get_punk_snipes(punk_bids, punk_bid_acceptances)
logger.info(f"Block: {block_number} -- Found {len(punk_snipes)} punk snipes")
miner_payments = get_miner_payments( miner_payments = get_miner_payments(
block.miner, block.base_fee_per_gas, classified_traces, block.receipts block.miner, block.base_fee_per_gas, classified_traces, block.receipts

View File

@ -1,6 +1,4 @@
from typing import List from typing import List
from mev_inspect.schemas import punk_accept_bid
from mev_inspect.schemas.traces import ( from mev_inspect.schemas.traces import (
ClassifiedTrace, ClassifiedTrace,
Classification, Classification,
@ -8,9 +6,34 @@ from mev_inspect.schemas.traces import (
) )
from mev_inspect.schemas.punk_bid import PunkBid from mev_inspect.schemas.punk_bid import PunkBid
from mev_inspect.schemas.punk_accept_bid import PunkBidAcceptance from mev_inspect.schemas.punk_accept_bid import PunkBidAcceptance
from mev_inspect.schemas.punk_snipe import PunkSnipe
from mev_inspect.traces import get_traces_by_transaction_hash from mev_inspect.traces import get_traces_by_transaction_hash
def get_punk_snipes(
punk_bids: List[PunkBid], punk_bid_acceptances: List[PunkBidAcceptance]
) -> List[PunkSnipe]:
punk_snipe_list = []
for punk_bid in punk_bids:
for punk_bid_acceptance in punk_bid_acceptances:
if punk_bid.punk_index == punk_bid_acceptance.punk_index:
if punk_bid.amount > punk_bid_acceptance.min_price:
punk_snipe = PunkSnipe(
block_number=punk_bid.block_number,
transaction_hash=punk_bid.transaction_hash,
trace_address=punk_bid.trace_address,
from_address=punk_bid.from_address,
punk_index=punk_bid.punk_index,
min_acceptance_price=punk_bid_acceptance.min_price,
acceptance_price=punk_bid.amount,
)
punk_snipe_list.append(punk_snipe)
return punk_snipe_list
def get_punk_bid_acceptances(traces: List[ClassifiedTrace]) -> List[PunkBidAcceptance]: def get_punk_bid_acceptances(traces: List[ClassifiedTrace]) -> List[PunkBidAcceptance]:
punk_bid_acceptances = [] punk_bid_acceptances = []
@ -39,8 +62,8 @@ def _get_punk_bid_acceptances_for_transaction(
transaction_hash=trace.transaction_hash, transaction_hash=trace.transaction_hash,
trace_address=trace.trace_address, trace_address=trace.trace_address,
from_address=trace.from_address, from_address=trace.from_address,
punk_index=trace.inputs["punk_index"], punk_index=trace.inputs["punkIndex"],
min_price=trace.inputs["min_price"], min_price=trace.inputs["minPrice"],
) )
punk_bid_acceptances.append(punk_accept_bid) punk_bid_acceptances.append(punk_accept_bid)
@ -72,8 +95,8 @@ def _get_punk_bids_for_transaction(traces: List[ClassifiedTrace]) -> List[PunkBi
block_number=trace.block_number, block_number=trace.block_number,
trace_address=trace.trace_address, trace_address=trace.trace_address,
from_address=trace.from_address, from_address=trace.from_address,
punk_index=trace.inputs["punk_index"], punk_index=trace.inputs["punkIndex"],
value=trace.value, amount=trace.value,
) )
punk_bids.append(punk_bid) punk_bids.append(punk_bid)

View File

@ -0,0 +1,13 @@
from typing import List
from pydantic import BaseModel
class PunkSnipe(BaseModel):
block_number: int
transaction_hash: str
trace_address: List[int]
from_address: str
punk_index: int
min_acceptance_price: int
acceptance_price: int