Actually fix lint issues

This commit is contained in:
Shea Ketsdever 2021-12-20 11:05:05 -08:00
parent bf85025b84
commit 66e1e64675
8 changed files with 39 additions and 29 deletions

View File

@ -1,5 +1,3 @@
"""Create NFT Trades table """Create NFT Trades table
Revision ID: 3c54832385e3 Revision ID: 3c54832385e3
@ -16,6 +14,7 @@ down_revision = "15ba9c27ee8a"
branch_labels = None branch_labels = None
depends_on = None depends_on = None
def upgrade(): def upgrade():
op.create_table( op.create_table(
"nft_trades", "nft_trades",

View File

@ -1,10 +1,11 @@
from typing import List, Optional, Sequence 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.swaps import Swap
from mev_inspect.schemas.traces import ClassifiedTrace, DecodedCallTrace from mev_inspect.schemas.traces import ClassifiedTrace, DecodedCallTrace
from mev_inspect.schemas.transfers import ETH_TOKEN_ADDRESS, Transfer from mev_inspect.schemas.transfers import ETH_TOKEN_ADDRESS, Transfer
def create_nft_trade_from_transfers( def create_nft_trade_from_transfers(
trace: DecodedCallTrace, trace: DecodedCallTrace,
child_transfers: List[Transfer], child_transfers: List[Transfer],
@ -12,32 +13,35 @@ def create_nft_trade_from_transfers(
seller_address: str, seller_address: str,
buyer_address: str, buyer_address: str,
exchange_wallet_address: Optional[str], exchange_wallet_address: Optional[str],
) -> NftTrade: ) -> Optional[NftTrade]:
transfers_to_buyer = _filter_transfers( transfers_to_buyer = _filter_transfers(child_transfers, to_address=buyer_address)
child_transfers, to_address=buyer_address transfers_to_seller = _filter_transfers(child_transfers, to_address=seller_address)
)
transfers_to_seller = _filter_transfers(
child_transfers, to_address=seller_address
)
if len(transfers_to_buyer) != 1 or len(transfers_to_seller) != 1: if len(transfers_to_buyer) != 1 or len(transfers_to_seller) != 1:
return None return None
if transfers_to_buyer[0].token_address != collection_address: if transfers_to_buyer[0].token_address != collection_address:
return None return None
payment_token = transfers_to_seller[0].token_address payment_token = transfers_to_seller[0].token_address
payment_amount = transfers_to_seller[0].amount payment_amount = transfers_to_seller[0].amount
token_id = transfers_to_buyer[0].amount token_id = transfers_to_buyer[0].amount
if exchange_wallet_address is not None: if exchange_wallet_address is not None:
transfers_from_seller_to_exchange = _filter_transfers( 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( 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 # Assumes that exchange fees are paid with the same token as the sale
payment_amount -= fee.amount payment_amount -= fee.amount
@ -54,9 +58,10 @@ def create_nft_trade_from_transfers(
payment_token=payment_token, payment_token=payment_token,
payment_amount=payment_amount, payment_amount=payment_amount,
collection_address=collection_address, collection_address=collection_address,
token_id=token_id token_id=token_id,
) )
def create_swap_from_pool_transfers( def create_swap_from_pool_transfers(
trace: DecodedCallTrace, trace: DecodedCallTrace,
recipient_address: str, recipient_address: str,

View File

@ -10,10 +10,10 @@ from .compound import COMPOUND_CLASSIFIER_SPECS
from .cryptopunks import CRYPTOPUNKS_CLASSIFIER_SPECS from .cryptopunks import CRYPTOPUNKS_CLASSIFIER_SPECS
from .curve import CURVE_CLASSIFIER_SPECS from .curve import CURVE_CLASSIFIER_SPECS
from .erc20 import ERC20_CLASSIFIER_SPECS from .erc20 import ERC20_CLASSIFIER_SPECS
from .opensea import OPENSEA_CLASSIFIER_SPECS
from .uniswap import UNISWAP_CLASSIFIER_SPECS from .uniswap import UNISWAP_CLASSIFIER_SPECS
from .weth import WETH_ADDRESS, WETH_CLASSIFIER_SPECS from .weth import WETH_ADDRESS, WETH_CLASSIFIER_SPECS
from .zero_ex import ZEROX_CLASSIFIER_SPECS from .zero_ex import ZEROX_CLASSIFIER_SPECS
from .opensea import OPENSEA_CLASSIFIER_SPECS
ALL_CLASSIFIER_SPECS = ( ALL_CLASSIFIER_SPECS = (
ERC20_CLASSIFIER_SPECS ERC20_CLASSIFIER_SPECS

View File

@ -1,4 +1,5 @@
from typing import List, Optional from typing import List, Optional
from mev_inspect.classifiers.helpers import create_nft_trade_from_transfers from mev_inspect.classifiers.helpers import create_nft_trade_from_transfers
from mev_inspect.schemas.classifiers import ClassifierSpec, NftTradeClassifier from mev_inspect.schemas.classifiers import ClassifierSpec, NftTradeClassifier
from mev_inspect.schemas.nft_trades import NftTrade from mev_inspect.schemas.nft_trades import NftTrade
@ -7,13 +8,16 @@ from mev_inspect.schemas.transfers import Transfer
OPENSEA_WALLET_ADDRESS = "0x5b3256965e7c3cf26e11fcaf296dfc8807c01073" OPENSEA_WALLET_ADDRESS = "0x5b3256965e7c3cf26e11fcaf296dfc8807c01073"
class OpenseaClassifier(NftTradeClassifier):
class OpenseaClassifier(NftTradeClassifier):
@staticmethod @staticmethod
def parse_trade( def parse_trade(
trace: DecodedCallTrace, trace: DecodedCallTrace,
child_transfers: List[Transfer], child_transfers: List[Transfer],
) -> Optional[NftTrade]: ) -> Optional[NftTrade]:
addresses = trace.inputs.get("addrs") addresses = trace.inputs.get("addrs")
if addresses is None:
return None
buy_maker = addresses[1] buy_maker = addresses[1]
sell_maker = addresses[8] sell_maker = addresses[8]
target = addresses[4] target = addresses[4]
@ -28,7 +32,7 @@ class OpenseaClassifier(NftTradeClassifier):
) )
OPENSEA_SPEC= ClassifierSpec( OPENSEA_SPEC = ClassifierSpec(
abi_name="WyvernExchange", abi_name="WyvernExchange",
protocol=Protocol.opensea, protocol=Protocol.opensea,
valid_contract_addresses=["0x7be8076f4ea4a4ad08075c2508e481d6c946d12b"], valid_contract_addresses=["0x7be8076f4ea4a4ad08075c2508e481d6c946d12b"],

View File

@ -17,6 +17,7 @@ from mev_inspect.crud.miner_payments import (
delete_miner_payments_for_block, delete_miner_payments_for_block,
write_miner_payments, write_miner_payments,
) )
from mev_inspect.crud.nft_trades import delete_nft_trades_for_block, write_nft_trades
from mev_inspect.crud.punks import ( from mev_inspect.crud.punks import (
delete_punk_bid_acceptances_for_block, delete_punk_bid_acceptances_for_block,
delete_punk_bids_for_block, delete_punk_bids_for_block,
@ -32,15 +33,13 @@ from mev_inspect.crud.traces import (
write_classified_traces, write_classified_traces,
) )
from mev_inspect.crud.transfers import delete_transfers_for_block, write_transfers 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.liquidations import get_liquidations
from mev_inspect.miner_payments import get_miner_payments 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.punks import get_punk_bid_acceptances, get_punk_bids, get_punk_snipes
from mev_inspect.sandwiches import get_sandwiches from mev_inspect.sandwiches import get_sandwiches
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.nft_trades import get_nft_trades
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,4 +1,5 @@
from typing import List, Optional from typing import List, Optional
from mev_inspect.classifiers.specs import get_classifier from mev_inspect.classifiers.specs import get_classifier
from mev_inspect.schemas.classifiers import NftTradeClassifier from mev_inspect.schemas.classifiers import NftTradeClassifier
from mev_inspect.schemas.nft_trades import NftTrade from mev_inspect.schemas.nft_trades import NftTrade
@ -10,13 +11,12 @@ from mev_inspect.transfers import (
remove_child_transfers_of_transfers, remove_child_transfers_of_transfers,
) )
def get_nft_trades(traces: List[ClassifiedTrace]) -> List[NftTrade]: def get_nft_trades(traces: List[ClassifiedTrace]) -> List[NftTrade]:
nft_trades = [] nft_trades = []
for _, transaction_traces in get_traces_by_transaction_hash(traces).items(): for _, transaction_traces in get_traces_by_transaction_hash(traces).items():
nft_trades += _get_nft_trades_for_transaction( nft_trades += _get_nft_trades_for_transaction(list(transaction_traces))
list(transaction_traces)
)
return nft_trades return nft_trades
@ -42,12 +42,13 @@ def _get_nft_trades_for_transaction(
trace, trace,
remove_child_transfers_of_transfers(child_transfers), remove_child_transfers_of_transfers(child_transfers),
) )
if nft_trade is not None: if nft_trade is not None:
nft_trades.append(nft_trade) nft_trades.append(nft_trade)
return nft_trades return nft_trades
def _parse_trade( def _parse_trade(
trace: DecodedCallTrace, trace: DecodedCallTrace,
child_transfers: List[Transfer], child_transfers: List[Transfer],

View File

@ -3,10 +3,10 @@ from typing import Dict, List, Optional, Type
from pydantic import BaseModel from pydantic import BaseModel
from .nft_trades import NftTrade
from .swaps import Swap from .swaps import Swap
from .traces import Classification, DecodedCallTrace, Protocol from .traces import Classification, DecodedCallTrace, Protocol
from .transfers import Transfer from .transfers import Transfer
from .nft_trades import NftTrade
class Classifier(ABC): class Classifier(ABC):
@ -53,6 +53,7 @@ class SeizeClassifier(Classifier):
def get_classification() -> Classification: def get_classification() -> Classification:
return Classification.seize return Classification.seize
class NftTradeClassifier(Classifier): class NftTradeClassifier(Classifier):
@staticmethod @staticmethod
def get_classification() -> Classification: def get_classification() -> Classification:
@ -64,7 +65,7 @@ class NftTradeClassifier(Classifier):
trace: DecodedCallTrace, trace: DecodedCallTrace,
child_transfers: List[Transfer], child_transfers: List[Transfer],
) -> Optional[NftTrade]: ) -> Optional[NftTrade]:
return NotImplementedError() raise NotImplementedError()
class ClassifierSpec(BaseModel): class ClassifierSpec(BaseModel):

View File

@ -1,8 +1,9 @@
from typing import List, Optional from typing import List, Optional
from mev_inspect.schemas.traces import Protocol
from pydantic import BaseModel from pydantic import BaseModel
from mev_inspect.schemas.traces import Protocol
class NftTrade(BaseModel): class NftTrade(BaseModel):
abi_name: str abi_name: str