diff --git a/alembic/versions/a02f3f2c469f_create_latest_block_table.py b/alembic/versions/a02f3f2c469f_create_latest_block_table.py new file mode 100644 index 0000000..8b2aa93 --- /dev/null +++ b/alembic/versions/a02f3f2c469f_create_latest_block_table.py @@ -0,0 +1,28 @@ +"""Create latest block table + +Revision ID: a02f3f2c469f +Revises: d70c08b4db6f +Create Date: 2021-09-13 21:32:27.181344 + +""" +import sqlalchemy as sa +from alembic import op + + +# revision identifiers, used by Alembic. +revision = "a02f3f2c469f" +down_revision = "d70c08b4db6f" +branch_labels = None +depends_on = None + + +def upgrade(): + op.create_table( + "latest_block_update", + sa.Column("block_number", sa.Numeric, primary_key=True), + sa.Column("updated_at", sa.TIMESTAMP, server_default=sa.func.now()), + ) + + +def downgrade(): + op.drop_table("latest_block_update") diff --git a/mev_inspect/crud/latest_block_update.py b/mev_inspect/crud/latest_block_update.py new file mode 100644 index 0000000..a918d93 --- /dev/null +++ b/mev_inspect/crud/latest_block_update.py @@ -0,0 +1,25 @@ +from typing import Optional + + +def find_latest_block_update(db_session) -> Optional[int]: + result = db_session.execute( + "SELECT block_number FROM latest_block_update LIMIT 1" + ).one_or_none() + if result is None: + return None + else: + return int(result[0]) + + +def update_latest_block(db_session, block_number) -> None: + db_session.execute( + """ + UPDATE latest_block_update + SET block_number = :block_number, updated_at = current_timestamp; + INSERT INTO latest_block_update + (block_number, updated_at) + SELECT :block_number, current_timestamp + WHERE NOT EXISTS (SELECT 1 FROM latest_block_update); + """, + params={"block_number": block_number}, + )