feat: save profit to db (#17)
* feat: save profit to db Signed-off-by: Arthurim <arthurbdauphine@gmail.com> * fix: update total profit table and related crud Signed-off-by: Luca Georges Francois <luca@quartz.technology> Signed-off-by: Arthurim <arthurbdauphine@gmail.com> Signed-off-by: Luca Georges Francois <luca@quartz.technology> Co-authored-by: Luca Georges Francois <luca@quartz.technology>
This commit is contained in:
parent
8b52740d7f
commit
880992362b
@ -18,7 +18,10 @@ depends_on = None
|
||||
def upgrade():
|
||||
op.create_table(
|
||||
"total_profit_by_block",
|
||||
sa.Column("block_number", sa.Numeric, primary_key=True),
|
||||
sa.Column(
|
||||
"id", sa.Integer, nullable=False, autoincrement=True, primary_key=True
|
||||
),
|
||||
sa.Column("block_number", sa.Numeric, nullable=False),
|
||||
sa.Column("transaction_hash", sa.String(66), nullable=False),
|
||||
sa.Column("token_debt", sa.String(66), nullable=True),
|
||||
sa.Column("amount_debt", sa.Numeric, nullable=False),
|
||||
|
@ -1,6 +1,7 @@
|
||||
import json
|
||||
from typing import List
|
||||
|
||||
from mev_inspect.db import write_as_csv
|
||||
from mev_inspect.models.total_profits import TotalProfitsModel
|
||||
from mev_inspect.schemas.total_profits import TotalProfits
|
||||
|
||||
|
||||
@ -8,15 +9,10 @@ def write_total_profits_for_blocks(
|
||||
inspect_db_session,
|
||||
total_profits_for_blocks: List[TotalProfits],
|
||||
) -> None:
|
||||
items_generator = (
|
||||
(
|
||||
total_profits_for_unique_block.block_number,
|
||||
total_profits_for_unique_block.transaction_hash,
|
||||
total_profits_for_unique_block.token_debt,
|
||||
total_profits_for_unique_block.amount_debt,
|
||||
total_profits_for_unique_block.token_received,
|
||||
total_profits_for_unique_block.amount_received,
|
||||
)
|
||||
for total_profits_for_unique_block in total_profits_for_blocks
|
||||
)
|
||||
write_as_csv(inspect_db_session, "total_profit_by_block", items_generator)
|
||||
models = [
|
||||
TotalProfitsModel(**json.loads(swap.json()))
|
||||
for swap in total_profits_for_blocks
|
||||
]
|
||||
|
||||
inspect_db_session.bulk_save_objects(models)
|
||||
inspect_db_session.commit()
|
||||
|
@ -1,11 +1,13 @@
|
||||
import logging
|
||||
from typing import Any, Dict
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from sqlalchemy import orm
|
||||
from web3 import Web3
|
||||
|
||||
from mev_inspect.arbitrages import get_arbitrages
|
||||
from mev_inspect.block import get_classified_traces_from_events
|
||||
from mev_inspect.crud.total_profits import write_total_profits_for_blocks
|
||||
from mev_inspect.schemas.total_profits import TotalProfits
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -35,7 +37,7 @@ async def inspect_many_blocks(
|
||||
arbitrages_payload = []
|
||||
liquidations_payload = []
|
||||
|
||||
profits = []
|
||||
profits: List[TotalProfits] = []
|
||||
async for swaps, liquidations in get_classified_traces_from_events(
|
||||
w3, after_block_number, before_block_number
|
||||
):
|
||||
@ -52,14 +54,16 @@ async def inspect_many_blocks(
|
||||
arbitrages_payload.append(arb_payload)
|
||||
count += 1
|
||||
profits.append(
|
||||
[
|
||||
arb.block_number,
|
||||
arb.transaction_hash,
|
||||
"",
|
||||
0,
|
||||
str(arb.profit_token_address).replace(TRAILING_ZEROS, ""),
|
||||
arb.profit_amount,
|
||||
]
|
||||
TotalProfits(
|
||||
block_number=arb.block_number,
|
||||
transaction_hash=arb.transaction_hash,
|
||||
token_debt="",
|
||||
amount_debt=0,
|
||||
token_received=str(arb.profit_token_address).replace(
|
||||
TRAILING_ZEROS, ""
|
||||
),
|
||||
amount_received=arb.profit_amount,
|
||||
)
|
||||
)
|
||||
|
||||
if len(liquidations) > 0:
|
||||
@ -75,20 +79,25 @@ async def inspect_many_blocks(
|
||||
liquidations_payload.append(liq_payload)
|
||||
count += 1
|
||||
profits.append(
|
||||
[
|
||||
liq.block_number,
|
||||
liq.transaction_hash,
|
||||
str(liq.debt_token_address).replace(TRAILING_ZEROS, ""),
|
||||
liq.debt_purchase_amount,
|
||||
str(liq.received_amount).replace(TRAILING_ZEROS, ""),
|
||||
liq.received_amount,
|
||||
]
|
||||
TotalProfits(
|
||||
block_number=liq.block_number,
|
||||
transaction_hash=liq.transaction_hash,
|
||||
token_debt=str(liq.debt_token_address).replace(
|
||||
TRAILING_ZEROS, ""
|
||||
),
|
||||
amount_debt=liq.debt_purchase_amount,
|
||||
token_received=str(liq.received_amount).replace(
|
||||
TRAILING_ZEROS, ""
|
||||
),
|
||||
amount_received=liq.received_amount,
|
||||
)
|
||||
)
|
||||
|
||||
if count > 0:
|
||||
print("writing profits of {0} mev transactions".format(count))
|
||||
# @TODO: Write profits to DB
|
||||
print(inspect_db_session.info)
|
||||
write_total_profits_for_blocks(
|
||||
inspect_db_session=inspect_db_session, total_profits_for_blocks=profits
|
||||
)
|
||||
arbitrages_payload = []
|
||||
liquidations_payload = []
|
||||
count = 0
|
||||
|
15
mev_inspect/models/total_profits.py
Normal file
15
mev_inspect/models/total_profits.py
Normal file
@ -0,0 +1,15 @@
|
||||
from sqlalchemy import Column, Integer, Numeric, String
|
||||
|
||||
from .base import Base
|
||||
|
||||
|
||||
class TotalProfitsModel(Base):
|
||||
__tablename__ = "total_profit_by_block"
|
||||
|
||||
id = Column("id", Integer, nullable=False, autoincrement=True, primary_key=True)
|
||||
block_number = Column("block_number", Numeric, nullable=False)
|
||||
transaction_hash = Column("transaction_hash", String(66), nullable=False)
|
||||
token_debt = Column("token_debt", String(66), nullable=True)
|
||||
amount_debt = Column("amount_debt", Numeric, nullable=False)
|
||||
token_received = Column("token_received", String(66), nullable=False)
|
||||
amount_received = Column("amount_received", Numeric, nullable=False)
|
Loading…
x
Reference in New Issue
Block a user