From 2b7c8532f279fc6be3ce053a9f2c5d5a843e188e Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Fri, 17 Sep 2021 09:31:08 -0400 Subject: [PATCH] Add crud and models to write transfers to the DB --- mev_inspect/crud/transfers.py | 28 ++++++++++++++++++++++++++++ mev_inspect/models/transfers.py | 17 +++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 mev_inspect/crud/transfers.py create mode 100644 mev_inspect/models/transfers.py diff --git a/mev_inspect/crud/transfers.py b/mev_inspect/crud/transfers.py new file mode 100644 index 0000000..eb57ad9 --- /dev/null +++ b/mev_inspect/crud/transfers.py @@ -0,0 +1,28 @@ +import json +from typing import List + +from mev_inspect.models.transfers import TransferModel +from mev_inspect.schemas.transfers import ERC20Transfer + + +def delete_transfers_for_block( + db_session, + block_number: int, +) -> None: + ( + db_session.query(TransferModel) + .filter(TransferModel.block_number == block_number) + .delete() + ) + + db_session.commit() + + +def write_transfers( + db_session, + transfers: List[ERC20Transfer], +) -> None: + models = [TransferModel(**json.loads(transfer.json())) for transfer in transfers] + + db_session.bulk_save_objects(models) + db_session.commit() diff --git a/mev_inspect/models/transfers.py b/mev_inspect/models/transfers.py new file mode 100644 index 0000000..7e23bfe --- /dev/null +++ b/mev_inspect/models/transfers.py @@ -0,0 +1,17 @@ +from sqlalchemy import Column, Numeric, String, ARRAY, Integer + +from .base import Base + + +class TransferModel(Base): + __tablename__ = "transfers" + + block_number = Column(Numeric, nullable=False) + transaction_hash = Column(String, primary_key=True) + trace_address = Column(ARRAY(Integer), nullable=False) + 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) + error = Column(String, nullable=True)