Compare commits

...

2 Commits

Author SHA1 Message Date
Yaz Khoury
ed01811987 fix: Remove unneeded code from template 2021-10-14 14:24:02 +00:00
Yaz Khoury
3663d075d9 feat: Add initial atomicMatch logic for OpenSea 2021-10-14 13:28:36 +00:00
7 changed files with 85 additions and 0 deletions

View File

@ -0,0 +1,18 @@
from mev_inspect.schemas.classified_traces import (
DecodedCallTrace,
Protocol,
)
from mev_inspect.schemas.classifiers import (
ClassifierSpec,
AtomicMatchClassifier,
)
OPENSEA_ATOMIC_MATCH_ABI_NAME='atomicMatch_'
OPENSEA_SPEC = [
ClassifierSpec(
abi_name="atomicMatch_",
protocol=Protocol.opensea,
valid_contract_addresses=["0x7be8076f4ea4a4ad08075c2508e481d6c946d12b"],
),
]

View File

@ -0,0 +1,26 @@
import json
from typing import list
from mev_inspect.models.atomicmatch import AtomicMatchModel
from mev_inspect.schemas.atomicmatch import AtomicMatch
def delete_atomicmatch_for_block(
db_session,
block_number: int,
) -> None:
(
db_session.query(AtomicMatchModel)
.filter(AtomicMatchModel.block_number == block_number)
.delete()
)
db_session.commit()
def write_atomicmatch(
db_session,
atomicmatches: List[AtomicMatch],
) -> None:
models = [AtomicMatchModel(**json.loads(atomicmatch.json())) for atomicmatch in atomicmatches]
db_session.bulk_save_objects(models)
db_session.commit()

View File

@ -24,6 +24,10 @@ from mev_inspect.crud.liquidations import (
delete_liquidations_for_block,
write_liquidations,
)
from mev_inspect.crud.atomicmatch import (
delete_atomicmatch_for_block,
write_atomicmatch,
)
from mev_inspect.miner_payments import get_miner_payments
from mev_inspect.swaps import get_swaps
from mev_inspect.transfers import get_transfers

View File

@ -0,0 +1,17 @@
from sqlalchemy import Column, Numeric, String, Integer, ARRAY
from .base import Base
class AtomicMatchModel(Base):
__tablename__ = "atomic_match"
block_number = Column(Numeric, nullable=False)
transaction_hash = Column(String, primary_key=True)
protocol = Column(String, nullable=True)
from_address = Column(String, nullable=False)
to_address = Column(String, nullable=False)
token_address = Column(String, nullable=False)
amount = Column(Numeric, nullable=False)
metadata = Column(ARRAY(String), nullable=False)
error = Column(String, nullable=True)

View File

@ -0,0 +1,14 @@
from typing import list
from pydantic import BaseModel
ETH_TOKEN_ADDRESS = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
class AtomicMatch(BaseModel):
block_number: int
transaction_hash: str
protocol: str
from_address: str
to_address: str
amount: str
metadata: List[str]

View File

@ -10,6 +10,7 @@ class Classification(Enum):
transfer = "transfer"
liquidate = "liquidate"
seize = "seize"
atomicmatch = "atomicmatch"
class Protocol(Enum):
@ -22,6 +23,7 @@ class Protocol(Enum):
zero_ex = "0x"
balancer_v1 = "balancer_v1"
compound_v2 = "compound_v2"
opensea = "opensea"
class ClassifiedTrace(Trace):

View File

@ -41,6 +41,10 @@ class LiquidationClassifier(Classifier):
def get_classification() -> Classification:
return Classification.liquidate
class AtomicMatchClassifier(Classifier):
@staticmethod
def get_classification() -> Classification:
return Classification.atomicmatch
class SeizeClassifier(Classifier):
@staticmethod