Merge pull request #149 from flashbots/punk_accept_bids_database

feat: punk accept bids database
This commit is contained in:
Robert Miller 2021-12-06 16:41:47 -05:00 committed by GitHub
commit 9ffa9d2df9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 78 additions and 1 deletions

View File

@ -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("block_number", "transaction_hash", "trace_address"),
)
def downgrade():
op.drop_table("punk_bid_acceptances")

View File

@ -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(

View File

@ -17,7 +17,10 @@ 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.blocks import (
delete_block,
write_block,
@ -111,6 +114,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")

View File

@ -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)