45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
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
|
|
from mev_inspect.schemas.traces import DecodedCallTrace, Protocol
|
|
from mev_inspect.schemas.transfers import Transfer
|
|
|
|
OPENSEA_WALLET_ADDRESS = "0x5b3256965e7c3cf26e11fcaf296dfc8807c01073"
|
|
|
|
|
|
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]
|
|
|
|
return create_nft_trade_from_transfers(
|
|
trace,
|
|
child_transfers,
|
|
collection_address=target,
|
|
seller_address=sell_maker,
|
|
buyer_address=buy_maker,
|
|
exchange_wallet_address=OPENSEA_WALLET_ADDRESS,
|
|
)
|
|
|
|
|
|
OPENSEA_SPEC = ClassifierSpec(
|
|
abi_name="WyvernExchange",
|
|
protocol=Protocol.opensea,
|
|
valid_contract_addresses=["0x7be8076f4ea4a4ad08075c2508e481d6c946d12b"],
|
|
classifiers={
|
|
"atomicMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])": OpenseaClassifier,
|
|
},
|
|
)
|
|
|
|
OPENSEA_CLASSIFIER_SPECS = [OPENSEA_SPEC]
|