From d37bf8f6e29b18a7f12bdfa81b5b9677a8beb637 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Fri, 17 Sep 2021 09:30:50 -0400 Subject: [PATCH 1/4] Add block number to transfers schema --- mev_inspect/schemas/transfers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mev_inspect/schemas/transfers.py b/mev_inspect/schemas/transfers.py index af14e73..e62d185 100644 --- a/mev_inspect/schemas/transfers.py +++ b/mev_inspect/schemas/transfers.py @@ -6,6 +6,7 @@ from .classified_traces import Classification, ClassifiedTrace, Protocol class Transfer(BaseModel): + block_number: int transaction_hash: str trace_address: List[int] from_address: str @@ -21,6 +22,7 @@ class EthTransfer(Transfer): @classmethod def from_trace(cls, trace: ClassifiedTrace) -> "EthTransfer": return cls( + block_number=trace.block_number, transaction_hash=trace.transaction_hash, trace_address=trace.trace_address, amount=trace.value, @@ -39,6 +41,7 @@ class ERC20Transfer(Transfer): if trace.protocol == Protocol.weth: return cls( + block_number=trace.block_number, transaction_hash=trace.transaction_hash, trace_address=trace.trace_address, amount=trace.inputs["wad"], @@ -48,6 +51,7 @@ class ERC20Transfer(Transfer): ) else: return cls( + block_number=trace.block_number, transaction_hash=trace.transaction_hash, trace_address=trace.trace_address, amount=trace.inputs["amount"], From 2b7c8532f279fc6be3ce053a9f2c5d5a843e188e Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Fri, 17 Sep 2021 09:31:08 -0400 Subject: [PATCH 2/4] 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) From 86861662765b0c71a1a68266695c601063dce87b Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Fri, 17 Sep 2021 09:34:06 -0400 Subject: [PATCH 3/4] Add writing transfers to inspect block --- mev_inspect/inspect_block.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index 507ed3b..cbd974e 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -18,8 +18,10 @@ from mev_inspect.crud.miner_payments import ( write_miner_payments, ) from mev_inspect.crud.swaps import delete_swaps_for_block, write_swaps +from mev_inspect.crud.transfers import delete_transfers_for_block, write_transfers from mev_inspect.miner_payments import get_miner_payments from mev_inspect.swaps import get_swaps +from mev_inspect.transfers import get_transfers logger = logging.getLogger(__name__) @@ -33,6 +35,7 @@ def inspect_block( should_cache: bool, should_write_classified_traces: bool = True, should_write_swaps: bool = True, + should_write_transfers: bool = True, should_write_arbitrages: bool = True, should_write_miner_payments: bool = True, ): @@ -53,6 +56,11 @@ def inspect_block( delete_classified_traces_for_block(db_session, block_number) write_classified_traces(db_session, classified_traces) + transfers = get_transfers(classified_traces) + if should_write_transfers: + delete_transfers_for_block(db_session, block_number) + write_transfers(db_session, transfers) + swaps = get_swaps(classified_traces) logger.info(f"Found {len(swaps)} swaps") From f5ce06b008f71486642396ec2f12b861da973a15 Mon Sep 17 00:00:00 2001 From: Luke Van Seters Date: Fri, 17 Sep 2021 09:35:21 -0400 Subject: [PATCH 4/4] Fix tests --- tests/test_transfers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_transfers.py b/tests/test_transfers.py index ad97ff5..6abd889 100644 --- a/tests/test_transfers.py +++ b/tests/test_transfers.py @@ -14,6 +14,7 @@ def test_remove_child_transfers_of_transfers(get_transaction_hashes, get_address ] = get_addresses(5) outer_transfer = ERC20Transfer( + block_number=123, transaction_hash=transaction_hash, trace_address=[0], from_address=alice_address, @@ -33,6 +34,7 @@ def test_remove_child_transfers_of_transfers(get_transaction_hashes, get_address ) other_transfer = ERC20Transfer( + block_number=123, transaction_hash=transaction_hash, trace_address=[1], from_address=bob_address,