From 66e1e64675d19fe56084a45f871da71cf6f7dc72 Mon Sep 17 00:00:00 2001 From: Shea Ketsdever Date: Mon, 20 Dec 2021 11:05:05 -0800 Subject: [PATCH] Actually fix lint issues --- .../3c54832385e3_create_nft_trades_table.py | 3 +- mev_inspect/classifiers/helpers.py | 33 +++++++++++-------- mev_inspect/classifiers/specs/__init__.py | 2 +- mev_inspect/classifiers/specs/opensea.py | 8 +++-- mev_inspect/inspect_block.py | 5 ++- mev_inspect/nft_trades.py | 9 ++--- mev_inspect/schemas/classifiers.py | 5 +-- mev_inspect/schemas/nft_trades.py | 3 +- 8 files changed, 39 insertions(+), 29 deletions(-) diff --git a/alembic/versions/3c54832385e3_create_nft_trades_table.py b/alembic/versions/3c54832385e3_create_nft_trades_table.py index 9807db5..6baebd6 100644 --- a/alembic/versions/3c54832385e3_create_nft_trades_table.py +++ b/alembic/versions/3c54832385e3_create_nft_trades_table.py @@ -1,5 +1,3 @@ - - """Create NFT Trades table Revision ID: 3c54832385e3 @@ -16,6 +14,7 @@ down_revision = "15ba9c27ee8a" branch_labels = None depends_on = None + def upgrade(): op.create_table( "nft_trades", diff --git a/mev_inspect/classifiers/helpers.py b/mev_inspect/classifiers/helpers.py index c242371..0094172 100644 --- a/mev_inspect/classifiers/helpers.py +++ b/mev_inspect/classifiers/helpers.py @@ -1,10 +1,11 @@ from typing import List, Optional, Sequence -from mev_inspect.schemas.nft_trades import NftTrade +from mev_inspect.schemas.nft_trades import NftTrade from mev_inspect.schemas.swaps import Swap from mev_inspect.schemas.traces import ClassifiedTrace, DecodedCallTrace from mev_inspect.schemas.transfers import ETH_TOKEN_ADDRESS, Transfer + def create_nft_trade_from_transfers( trace: DecodedCallTrace, child_transfers: List[Transfer], @@ -12,32 +13,35 @@ def create_nft_trade_from_transfers( seller_address: str, buyer_address: str, exchange_wallet_address: Optional[str], -) -> NftTrade: - transfers_to_buyer = _filter_transfers( - child_transfers, to_address=buyer_address - ) - transfers_to_seller = _filter_transfers( - child_transfers, to_address=seller_address - ) +) -> Optional[NftTrade]: + transfers_to_buyer = _filter_transfers(child_transfers, to_address=buyer_address) + transfers_to_seller = _filter_transfers(child_transfers, to_address=seller_address) if len(transfers_to_buyer) != 1 or len(transfers_to_seller) != 1: return None - + if transfers_to_buyer[0].token_address != collection_address: return None - + payment_token = transfers_to_seller[0].token_address payment_amount = transfers_to_seller[0].amount token_id = transfers_to_buyer[0].amount if exchange_wallet_address is not None: transfers_from_seller_to_exchange = _filter_transfers( - child_transfers, from_address=seller_address, to_address=exchange_wallet_address + child_transfers, + from_address=seller_address, + to_address=exchange_wallet_address, ) transfers_from_buyer_to_exchange = _filter_transfers( - child_transfers, from_address=buyer_address, to_address=exchange_wallet_address + child_transfers, + from_address=buyer_address, + to_address=exchange_wallet_address, ) - for fee in [*transfers_from_seller_to_exchange, *transfers_from_buyer_to_exchange]: + for fee in [ + *transfers_from_seller_to_exchange, + *transfers_from_buyer_to_exchange, + ]: # Assumes that exchange fees are paid with the same token as the sale payment_amount -= fee.amount @@ -54,9 +58,10 @@ def create_nft_trade_from_transfers( payment_token=payment_token, payment_amount=payment_amount, collection_address=collection_address, - token_id=token_id + token_id=token_id, ) + def create_swap_from_pool_transfers( trace: DecodedCallTrace, recipient_address: str, diff --git a/mev_inspect/classifiers/specs/__init__.py b/mev_inspect/classifiers/specs/__init__.py index c6d02d8..8473964 100644 --- a/mev_inspect/classifiers/specs/__init__.py +++ b/mev_inspect/classifiers/specs/__init__.py @@ -10,10 +10,10 @@ from .compound import COMPOUND_CLASSIFIER_SPECS from .cryptopunks import CRYPTOPUNKS_CLASSIFIER_SPECS from .curve import CURVE_CLASSIFIER_SPECS from .erc20 import ERC20_CLASSIFIER_SPECS +from .opensea import OPENSEA_CLASSIFIER_SPECS from .uniswap import UNISWAP_CLASSIFIER_SPECS from .weth import WETH_ADDRESS, WETH_CLASSIFIER_SPECS from .zero_ex import ZEROX_CLASSIFIER_SPECS -from .opensea import OPENSEA_CLASSIFIER_SPECS ALL_CLASSIFIER_SPECS = ( ERC20_CLASSIFIER_SPECS diff --git a/mev_inspect/classifiers/specs/opensea.py b/mev_inspect/classifiers/specs/opensea.py index e3a602a..72db312 100644 --- a/mev_inspect/classifiers/specs/opensea.py +++ b/mev_inspect/classifiers/specs/opensea.py @@ -1,4 +1,5 @@ from typing import List, Optional + from mev_inspect.classifiers.helpers import create_nft_trade_from_transfers from mev_inspect.schemas.classifiers import ClassifierSpec, NftTradeClassifier from mev_inspect.schemas.nft_trades import NftTrade @@ -7,13 +8,16 @@ from mev_inspect.schemas.transfers import Transfer OPENSEA_WALLET_ADDRESS = "0x5b3256965e7c3cf26e11fcaf296dfc8807c01073" -class OpenseaClassifier(NftTradeClassifier): + +class OpenseaClassifier(NftTradeClassifier): @staticmethod def parse_trade( trace: DecodedCallTrace, child_transfers: List[Transfer], ) -> Optional[NftTrade]: addresses = trace.inputs.get("addrs") + if addresses is None: + return None buy_maker = addresses[1] sell_maker = addresses[8] target = addresses[4] @@ -28,7 +32,7 @@ class OpenseaClassifier(NftTradeClassifier): ) -OPENSEA_SPEC= ClassifierSpec( +OPENSEA_SPEC = ClassifierSpec( abi_name="WyvernExchange", protocol=Protocol.opensea, valid_contract_addresses=["0x7be8076f4ea4a4ad08075c2508e481d6c946d12b"], diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index f581c55..0bdf958 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -17,6 +17,7 @@ from mev_inspect.crud.miner_payments import ( delete_miner_payments_for_block, write_miner_payments, ) +from mev_inspect.crud.nft_trades import delete_nft_trades_for_block, write_nft_trades from mev_inspect.crud.punks import ( delete_punk_bid_acceptances_for_block, delete_punk_bids_for_block, @@ -32,15 +33,13 @@ from mev_inspect.crud.traces import ( write_classified_traces, ) from mev_inspect.crud.transfers import delete_transfers_for_block, write_transfers -from mev_inspect.crud.nft_trades import delete_nft_trades_for_block, write_nft_trades - from mev_inspect.liquidations import get_liquidations from mev_inspect.miner_payments import get_miner_payments +from mev_inspect.nft_trades import get_nft_trades from mev_inspect.punks import get_punk_bid_acceptances, get_punk_bids, get_punk_snipes from mev_inspect.sandwiches import get_sandwiches from mev_inspect.swaps import get_swaps from mev_inspect.transfers import get_transfers -from mev_inspect.nft_trades import get_nft_trades logger = logging.getLogger(__name__) diff --git a/mev_inspect/nft_trades.py b/mev_inspect/nft_trades.py index eb35c62..67a0a0a 100644 --- a/mev_inspect/nft_trades.py +++ b/mev_inspect/nft_trades.py @@ -1,4 +1,5 @@ from typing import List, Optional + from mev_inspect.classifiers.specs import get_classifier from mev_inspect.schemas.classifiers import NftTradeClassifier from mev_inspect.schemas.nft_trades import NftTrade @@ -10,13 +11,12 @@ from mev_inspect.transfers import ( remove_child_transfers_of_transfers, ) + def get_nft_trades(traces: List[ClassifiedTrace]) -> List[NftTrade]: nft_trades = [] for _, transaction_traces in get_traces_by_transaction_hash(traces).items(): - nft_trades += _get_nft_trades_for_transaction( - list(transaction_traces) - ) + nft_trades += _get_nft_trades_for_transaction(list(transaction_traces)) return nft_trades @@ -42,12 +42,13 @@ def _get_nft_trades_for_transaction( trace, remove_child_transfers_of_transfers(child_transfers), ) - + if nft_trade is not None: nft_trades.append(nft_trade) return nft_trades + def _parse_trade( trace: DecodedCallTrace, child_transfers: List[Transfer], diff --git a/mev_inspect/schemas/classifiers.py b/mev_inspect/schemas/classifiers.py index 03eb548..043f1ff 100644 --- a/mev_inspect/schemas/classifiers.py +++ b/mev_inspect/schemas/classifiers.py @@ -3,10 +3,10 @@ from typing import Dict, List, Optional, Type from pydantic import BaseModel +from .nft_trades import NftTrade from .swaps import Swap from .traces import Classification, DecodedCallTrace, Protocol from .transfers import Transfer -from .nft_trades import NftTrade class Classifier(ABC): @@ -53,6 +53,7 @@ class SeizeClassifier(Classifier): def get_classification() -> Classification: return Classification.seize + class NftTradeClassifier(Classifier): @staticmethod def get_classification() -> Classification: @@ -64,7 +65,7 @@ class NftTradeClassifier(Classifier): trace: DecodedCallTrace, child_transfers: List[Transfer], ) -> Optional[NftTrade]: - return NotImplementedError() + raise NotImplementedError() class ClassifierSpec(BaseModel): diff --git a/mev_inspect/schemas/nft_trades.py b/mev_inspect/schemas/nft_trades.py index 75603ca..9448cdd 100644 --- a/mev_inspect/schemas/nft_trades.py +++ b/mev_inspect/schemas/nft_trades.py @@ -1,8 +1,9 @@ from typing import List, Optional -from mev_inspect.schemas.traces import Protocol from pydantic import BaseModel +from mev_inspect.schemas.traces import Protocol + class NftTrade(BaseModel): abi_name: str