From 07aa6e3089dce658da4d9b00c38d8bd7cc382684 Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Fri, 26 Nov 2021 15:42:36 -0500 Subject: [PATCH 1/6] feat: add punk_bid_acceptances database --- .../52d75a7e0533_add_punk_bid_acceptances.py | 34 +++++++++++++++++++ mev_inspect/crud/punks.py | 29 +++++++++++++++- mev_inspect/inspect_block.py | 4 +++ mev_inspect/models/punks.py | 11 ++++++ 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py diff --git a/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py b/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py new file mode 100644 index 0000000..6858101 --- /dev/null +++ b/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py @@ -0,0 +1,34 @@ +"""empty message + +Revision ID: 52d75a7e0533 +Revises: 7cf0eeb41da0 +Create Date: 2021-11-26 20:35:58.954138 + +""" +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision = "52d75a7e0533" +down_revision = "7cf0eeb41da0" +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + "punk_bid_acceptances", + sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()), + sa.Column("block_number", sa.Numeric, nullable=False), + sa.Column("transaction_hash", sa.String(66), nullable=False), + sa.Column("trace_address", sa.String(256), nullable=False), + sa.Column("from_address", sa.String(256), nullable=False), + sa.Column("punk_index", sa.Numeric, nullable=False), + sa.Column("min_price", sa.Numeric, nullable=False), + sa.PrimaryKeyConstraint("transaction_hash", "trace_address"), + ) + + +def downgrade(): + op.drop_table("punk_bid_acceptances") diff --git a/mev_inspect/crud/punks.py b/mev_inspect/crud/punks.py index 7126287..7f4c819 100644 --- a/mev_inspect/crud/punks.py +++ b/mev_inspect/crud/punks.py @@ -4,10 +4,37 @@ from typing import List from mev_inspect.models.punks import ( PunkSnipeModel, PunkBidModel, + PunkBidAcceptanceModel, ) from mev_inspect.schemas.punk_snipe import PunkSnipe - from mev_inspect.schemas.punk_bid import PunkBid +from mev_inspect.schemas.punk_accept_bid import PunkBidAcceptance + + +def delete_punk_bid_acceptances_for_block( + db_session, + block_number: int, +) -> None: + ( + db_session.query(PunkBidAcceptanceModel) + .filter(PunkBidAcceptanceModel.block_number == block_number) + .delete() + ) + + db_session.commit() + + +def write_punk_bid_acceptances( + db_session, + punk_bid_acceptances: List[PunkBidAcceptance], +) -> None: + models = [ + PunkBidAcceptanceModel(**json.loads(punk_bid_acceptance.json())) + for punk_bid_acceptance in punk_bid_acceptances + ] + + db_session.bulk_save_objects(models) + db_session.commit() def delete_punk_bids_for_block( diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index 47a286c..73bec98 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -16,6 +16,8 @@ from mev_inspect.crud.punks import ( write_punk_snipes, delete_punk_bids_for_block, write_punk_bids, + delete_punk_bid_acceptances_for_block, + write_punk_bid_acceptances, ) from mev_inspect.crud.traces import ( delete_classified_traces_for_block, @@ -103,6 +105,8 @@ async def inspect_block( write_punk_bids(inspect_db_session, punk_bids) punk_bid_acceptances = get_punk_bid_acceptances(classified_traces) + delete_punk_bid_acceptances_for_block(inspect_db_session, block_number) + write_punk_bid_acceptances(inspect_db_session, punk_bid_acceptances) punk_snipes = get_punk_snipes(punk_bids, punk_bid_acceptances) logger.info(f"Block: {block_number} -- Found {len(punk_snipes)} punk snipes") diff --git a/mev_inspect/models/punks.py b/mev_inspect/models/punks.py index 06dfa32..4f1560f 100644 --- a/mev_inspect/models/punks.py +++ b/mev_inspect/models/punks.py @@ -24,3 +24,14 @@ class PunkBidModel(Base): from_address = Column(String, nullable=False) punk_index = Column(Integer, nullable=False) price = Column(Numeric, nullable=False) + + +class PunkBidAcceptanceModel(Base): + __tablename__ = "punk_bid_acceptances" + + block_number = Column(Numeric, nullable=False) + transaction_hash = Column(String, primary_key=True) + trace_address = Column(ARRAY(Integer), primary_key=True) + from_address = Column(String, nullable=False) + punk_index = Column(Integer, nullable=False) + min_price = Column(Numeric, nullable=False) From 3088055606624482c7d26d92eb117a77205ac232 Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Fri, 26 Nov 2021 21:29:20 -0500 Subject: [PATCH 2/6] bug: add a missing parentheses --- mev_inspect/inspect_block.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index 1dbe12f..a043b7d 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -19,6 +19,7 @@ from mev_inspect.crud.punks import ( write_punk_bids, delete_punk_bid_acceptances_for_block, write_punk_bid_acceptances, +) from mev_inspect.crud.blocks import ( delete_block, From e1e678bbc22b498b83bc5cef59f6977c6ebee213 Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Fri, 26 Nov 2021 21:33:47 -0500 Subject: [PATCH 3/6] style: formatting --- mev_inspect/inspect_block.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mev_inspect/inspect_block.py b/mev_inspect/inspect_block.py index a043b7d..3c8fffe 100644 --- a/mev_inspect/inspect_block.py +++ b/mev_inspect/inspect_block.py @@ -24,7 +24,6 @@ from mev_inspect.crud.punks import ( from mev_inspect.crud.blocks import ( delete_block, write_block, - ) from mev_inspect.crud.traces import ( delete_classified_traces_for_block, From 9f08275698f53b36c8527604ceb289da03eae4ee Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Sat, 4 Dec 2021 20:32:29 -0500 Subject: [PATCH 4/6] style: formatting --- alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py b/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py index 6858101..8918bde 100644 --- a/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py +++ b/alembic/versions/52d75a7e0533_add_punk_bid_acceptances.py @@ -26,7 +26,7 @@ def upgrade(): sa.Column("from_address", sa.String(256), nullable=False), sa.Column("punk_index", sa.Numeric, nullable=False), sa.Column("min_price", sa.Numeric, nullable=False), - sa.PrimaryKeyConstraint("transaction_hash", "trace_address"), + sa.PrimaryKeyConstraint("block_number", "transaction_hash", "trace_address"), ) From 0ad3906989a763acb58cb8a065ff9c8afa5d46b8 Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Mon, 6 Dec 2021 16:33:35 -0500 Subject: [PATCH 5/6] style: formatting --- mev_inspect/crud/punks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mev_inspect/crud/punks.py b/mev_inspect/crud/punks.py index 56fc971..7f4c819 100644 --- a/mev_inspect/crud/punks.py +++ b/mev_inspect/crud/punks.py @@ -36,6 +36,7 @@ def write_punk_bid_acceptances( db_session.bulk_save_objects(models) db_session.commit() + def delete_punk_bids_for_block( db_session, block_number: int, From 4e91e52a92ce1c1aff812a82ee98716c6ccc61f3 Mon Sep 17 00:00:00 2001 From: Robert Miller Date: Mon, 6 Dec 2021 16:36:05 -0500 Subject: [PATCH 6/6] style: formatting --- mev_inspect/models/punks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mev_inspect/models/punks.py b/mev_inspect/models/punks.py index 1c5acfd..4f1560f 100644 --- a/mev_inspect/models/punks.py +++ b/mev_inspect/models/punks.py @@ -34,4 +34,4 @@ class PunkBidAcceptanceModel(Base): trace_address = Column(ARRAY(Integer), primary_key=True) from_address = Column(String, nullable=False) punk_index = Column(Integer, nullable=False) - min_price = Column(Numeric, nullable=False) \ No newline at end of file + min_price = Column(Numeric, nullable=False)