Write arbitrages to the DB

This commit is contained in:
Luke Van Seters 2021-08-05 18:23:56 -04:00
parent 04767d72f1
commit f9b3c82d2d
6 changed files with 106 additions and 4 deletions

View File

@ -0,0 +1,35 @@
"""Add arbitrages and swap join table
Revision ID: 9d8c69b3dccb
Revises: 2116e2f36a19
Create Date: 2021-08-05 21:46:35.209199
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "9d8c69b3dccb"
down_revision = "2116e2f36a19"
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
"arbitrages",
sa.Column("id", sa.String(256), primary_key=True),
sa.Column("created_at", sa.TIMESTAMP, server_default=sa.func.now()),
sa.Column("account_address", sa.String(256), nullable=False),
sa.Column("profit_token_address", sa.String(256), nullable=False),
sa.Column("block_number", sa.Numeric, nullable=False),
sa.Column("transaction_hash", sa.String(256), nullable=False),
sa.Column("start_amount", sa.Numeric, nullable=False),
sa.Column("end_amount", sa.Numeric, nullable=False),
sa.Column("profit_amount", sa.Numeric, nullable=False),
)
def downgrade():
op.drop_table("arbitrages")

View File

@ -1,7 +1,7 @@
from itertools import groupby
from typing import List, Optional
from mev_inspect.schemas.arbitrage import Arbitrage
from mev_inspect.schemas.arbitrages import Arbitrage
from mev_inspect.schemas.swaps import Swap
@ -70,6 +70,8 @@ def _get_arbitrage_starting_with_swap(
return Arbitrage(
swaps=swap_path,
block_number=start_swap.block_number,
transaction_hash=start_swap.transaction_hash,
account_address=start_swap.from_address,
profit_token_address=start_swap.token_in_address,
start_amount=start_amount,

View File

@ -0,0 +1,40 @@
from typing import List
from uuid import uuid4
from mev_inspect.models.arbitrages import ArbitrageModel
from mev_inspect.schemas.arbitrages import Arbitrage
def delete_arbitrages_for_block(
db_session,
block_number: int,
) -> None:
(
db_session.query(ArbitrageModel)
.filter(ArbitrageModel.block_number == block_number)
.delete()
)
db_session.commit()
def write_arbitrages(
db_session,
arbitrages: List[Arbitrage],
) -> None:
arbitrage_models = [
ArbitrageModel(
id=str(uuid4()),
block_number=arbitrage.block_number,
transaction_hash=arbitrage.transaction_hash,
account_address=arbitrage.account_address,
profit_token_address=arbitrage.profit_token_address,
start_amount=arbitrage.start_amount,
end_amount=arbitrage.end_amount,
profit_amount=arbitrage.profit_amount,
)
for arbitrage in arbitrages
]
db_session.bulk_save_objects(arbitrage_models)
db_session.commit()

View File

@ -0,0 +1,16 @@
from sqlalchemy import Column, Numeric, String
from .base import Base
class ArbitrageModel(Base):
__tablename__ = "arbitrages"
id = Column(String, primary_key=True)
block_number = Column(Numeric, nullable=False)
transaction_hash = Column(String, nullable=False)
account_address = Column(String, nullable=False)
profit_token_address = Column(String, nullable=False)
start_amount = Column(Numeric, nullable=False)
end_amount = Column(Numeric, nullable=False)
profit_amount = Column(Numeric, nullable=False)

View File

@ -7,6 +7,8 @@ from .swaps import Swap
class Arbitrage(BaseModel):
swaps: List[Swap]
block_number: int
transaction_hash: str
account_address: str
profit_token_address: str
start_amount: int

View File

@ -4,6 +4,10 @@ import click
from web3 import Web3
from mev_inspect import block
from mev_inspect.crud.arbitrages import (
delete_arbitrages_for_block,
write_arbitrages,
)
from mev_inspect.crud.classified_traces import (
delete_classified_traces_for_block,
write_classified_traces,
@ -12,7 +16,7 @@ from mev_inspect.crud.swaps import delete_swaps_for_block, write_swaps
from mev_inspect.db import get_session
from mev_inspect.classifier_specs import CLASSIFIER_SPECS
from mev_inspect.trace_classifier import TraceClassifier
from mev_inspect.arbitrage import get_arbitrages
from mev_inspect.arbitrages import get_arbitrages
from mev_inspect.swaps import get_swaps
@ -48,11 +52,14 @@ def inspect_block(block_number: int, rpc: str):
delete_swaps_for_block(db_session, block_number)
write_swaps(db_session, swaps)
db_session.close()
arbitrages = get_arbitrages(swaps)
print(f"Found {len(arbitrages)} arbitrages")
delete_arbitrages_for_block(db_session, block_number)
write_arbitrages(db_session, arbitrages)
db_session.close()
stats = get_stats(classified_traces)
print(json.dumps(stats, indent=4))