feat: change to "punk bid acceptance" and get punk bid acceptances

This commit is contained in:
Robert Miller 2021-11-17 21:51:56 -05:00
parent 96d2171daa
commit 1de1570939
5 changed files with 22 additions and 18 deletions

View File

@ -5,7 +5,7 @@ from mev_inspect.schemas.traces import (
from mev_inspect.schemas.classifiers import ( from mev_inspect.schemas.classifiers import (
ClassifierSpec, ClassifierSpec,
PunkBidClassifier, PunkBidClassifier,
PunkAcceptBidClassifier, PunkBidAcceptanceClassifier,
) )
CRYPTO_PUNKS_SPEC = ClassifierSpec( CRYPTO_PUNKS_SPEC = ClassifierSpec(
@ -14,7 +14,7 @@ CRYPTO_PUNKS_SPEC = ClassifierSpec(
valid_contract_addresses=["0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB"], valid_contract_addresses=["0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB"],
classifiers={ classifiers={
"enterBidForPunk(uint)": PunkBidClassifier, "enterBidForPunk(uint)": PunkBidClassifier,
"acceptBidForPunk(uint,uint)": PunkAcceptBidClassifier, "acceptBidForPunk(uint,uint)": PunkBidAcceptanceClassifier,
}, },
) )

View File

@ -27,7 +27,7 @@ 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_bids from mev_inspect.punks import get_punk_bid_acceptances, get_punk_bids
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
@ -95,6 +95,9 @@ async def inspect_block(
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") logger.info(f"Block: {block_number} -- Found {len(punk_bids)} punk bids")
punk_bid_acceptances = get_punk_bid_acceptances(classified_traces)
logger.info(f"Block: {block_number} -- Found {len(punk_bid_acceptances)} punk bids")
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,4 +1,5 @@
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,
@ -6,34 +7,34 @@ from mev_inspect.schemas.traces import (
DecodedCallTrace, DecodedCallTrace,
) )
from mev_inspect.schemas.punk_bid import PunkBid from mev_inspect.schemas.punk_bid import PunkBid
from mev_inspect.schemas.punk_accept_bid import PunkAcceptBid from mev_inspect.schemas.punk_accept_bid import PunkBidAcceptance
from mev_inspect.traces import get_traces_by_transaction_hash from mev_inspect.traces import get_traces_by_transaction_hash
def get_punk_accept_bids(traces: List[ClassifiedTrace]) -> List[PunkAcceptBid]: def get_punk_bid_acceptances(traces: List[ClassifiedTrace]) -> List[PunkBidAcceptance]:
punk_accept_bids = [] punk_bid_acceptances = []
for _, transaction_traces in get_traces_by_transaction_hash(traces).items(): for _, transaction_traces in get_traces_by_transaction_hash(traces).items():
punk_accept_bids += _get_punk_accept_bids_for_transaction( punk_bid_acceptances += _get_punk_bid_acceptances_for_transaction(
list(transaction_traces) list(transaction_traces)
) )
return punk_accept_bids return punk_bid_acceptances
def _get_punk_accept_bids_for_transaction( def _get_punk_bid_acceptances_for_transaction(
traces: List[ClassifiedTrace], traces: List[ClassifiedTrace],
) -> List[PunkAcceptBid]: ) -> List[PunkBidAcceptance]:
ordered_traces = list(sorted(traces, key=lambda t: t.trace_address)) ordered_traces = list(sorted(traces, key=lambda t: t.trace_address))
punk_accept_bids = [] punk_bid_acceptances = []
for trace in ordered_traces: for trace in ordered_traces:
if not isinstance(trace, DecodedCallTrace): if not isinstance(trace, DecodedCallTrace):
continue continue
elif trace.classification == Classification.punk_accept_bid: elif trace.classification == Classification.punk_accept_bid:
punk_accept_bid = PunkAcceptBid( punk_accept_bid = PunkBidAcceptance(
block_number=trace.block_number, block_number=trace.block_number,
transaction_hash=trace.transaction_hash, transaction_hash=trace.transaction_hash,
trace_address=trace.trace_address, trace_address=trace.trace_address,
@ -42,9 +43,9 @@ def _get_punk_accept_bids_for_transaction(
min_price=trace.inputs["min_price"], min_price=trace.inputs["min_price"],
) )
punk_accept_bids.append(punk_accept_bid) punk_bid_acceptances.append(punk_accept_bid)
return punk_accept_bids return punk_bid_acceptances
def get_punk_bids(traces: List[ClassifiedTrace]) -> List[PunkBid]: def get_punk_bids(traces: List[ClassifiedTrace]) -> List[PunkBid]:

View File

@ -6,7 +6,7 @@ from pydantic import BaseModel
from .traces import Classification, DecodedCallTrace, Protocol from .traces import Classification, DecodedCallTrace, Protocol
from .transfers import Transfer from .transfers import Transfer
from .punk_bid import PunkBid from .punk_bid import PunkBid
from .punk_accept_bid import PunkAcceptBid from .punk_accept_bid import PunkBidAcceptance
class Classifier(ABC): class Classifier(ABC):
@ -27,14 +27,14 @@ class PunkBidClassifier(Classifier):
raise NotImplementedError() raise NotImplementedError()
class PunkAcceptBidClassifier(Classifier): class PunkBidAcceptanceClassifier(Classifier):
@staticmethod @staticmethod
def get_classification() -> Classification: def get_classification() -> Classification:
return Classification.punk_accept_bid return Classification.punk_accept_bid
@staticmethod @staticmethod
@abstractmethod @abstractmethod
def get_accept_bid(trace: DecodedCallTrace) -> PunkAcceptBid: def get_accept_bid(trace: DecodedCallTrace) -> PunkBidAcceptance:
raise NotImplementedError() raise NotImplementedError()

View File

@ -3,7 +3,7 @@ from typing import List
from pydantic import BaseModel from pydantic import BaseModel
class PunkAcceptBid(BaseModel): class PunkBidAcceptance(BaseModel):
block_number: int block_number: int
transaction_hash: str transaction_hash: str
trace_address: List[int] trace_address: List[int]