Write arbitrages to the DB
This commit is contained in:
parent
04767d72f1
commit
f9b3c82d2d
@ -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")
|
@ -1,7 +1,7 @@
|
|||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from typing import List, Optional
|
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
|
from mev_inspect.schemas.swaps import Swap
|
||||||
|
|
||||||
|
|
||||||
@ -70,6 +70,8 @@ def _get_arbitrage_starting_with_swap(
|
|||||||
|
|
||||||
return Arbitrage(
|
return Arbitrage(
|
||||||
swaps=swap_path,
|
swaps=swap_path,
|
||||||
|
block_number=start_swap.block_number,
|
||||||
|
transaction_hash=start_swap.transaction_hash,
|
||||||
account_address=start_swap.from_address,
|
account_address=start_swap.from_address,
|
||||||
profit_token_address=start_swap.token_in_address,
|
profit_token_address=start_swap.token_in_address,
|
||||||
start_amount=start_amount,
|
start_amount=start_amount,
|
40
mev_inspect/crud/arbitrages.py
Normal file
40
mev_inspect/crud/arbitrages.py
Normal 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()
|
16
mev_inspect/models/arbitrages.py
Normal file
16
mev_inspect/models/arbitrages.py
Normal 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)
|
@ -7,6 +7,8 @@ from .swaps import Swap
|
|||||||
|
|
||||||
class Arbitrage(BaseModel):
|
class Arbitrage(BaseModel):
|
||||||
swaps: List[Swap]
|
swaps: List[Swap]
|
||||||
|
block_number: int
|
||||||
|
transaction_hash: str
|
||||||
account_address: str
|
account_address: str
|
||||||
profit_token_address: str
|
profit_token_address: str
|
||||||
start_amount: int
|
start_amount: int
|
@ -4,6 +4,10 @@ import click
|
|||||||
from web3 import Web3
|
from web3 import Web3
|
||||||
|
|
||||||
from mev_inspect import block
|
from mev_inspect import block
|
||||||
|
from mev_inspect.crud.arbitrages import (
|
||||||
|
delete_arbitrages_for_block,
|
||||||
|
write_arbitrages,
|
||||||
|
)
|
||||||
from mev_inspect.crud.classified_traces import (
|
from mev_inspect.crud.classified_traces import (
|
||||||
delete_classified_traces_for_block,
|
delete_classified_traces_for_block,
|
||||||
write_classified_traces,
|
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.db import get_session
|
||||||
from mev_inspect.classifier_specs import CLASSIFIER_SPECS
|
from mev_inspect.classifier_specs import CLASSIFIER_SPECS
|
||||||
from mev_inspect.trace_classifier import TraceClassifier
|
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
|
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)
|
delete_swaps_for_block(db_session, block_number)
|
||||||
write_swaps(db_session, swaps)
|
write_swaps(db_session, swaps)
|
||||||
|
|
||||||
db_session.close()
|
|
||||||
|
|
||||||
arbitrages = get_arbitrages(swaps)
|
arbitrages = get_arbitrages(swaps)
|
||||||
print(f"Found {len(arbitrages)} arbitrages")
|
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)
|
stats = get_stats(classified_traces)
|
||||||
print(json.dumps(stats, indent=4))
|
print(json.dumps(stats, indent=4))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user