Actually fix lint issues
This commit is contained in:
parent
bf85025b84
commit
66e1e64675
@ -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",
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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"],
|
||||||
|
@ -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__)
|
||||||
|
|
||||||
|
@ -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],
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user