mev-inspect-py/listener.py

69 lines
1.8 KiB
Python

import logging
import os
import time
from web3 import Web3
from mev_inspect.block import get_latest_block_number
from mev_inspect.crud.latest_block_update import (
find_latest_block_update,
update_latest_block,
)
from mev_inspect.db import get_session
from mev_inspect.inspect_block import inspect_block
from mev_inspect.provider import get_base_provider
from mev_inspect.signal_handler import GracefulKiller
logging.basicConfig(filename="listener.log", level=logging.INFO)
logger = logging.getLogger(__name__)
def run():
rpc = os.getenv("RPC_URL")
if rpc is None:
raise RuntimeError("Missing environment variable RPC_URL")
logger.info("Starting...")
killer = GracefulKiller()
db_session = get_session()
base_provider = get_base_provider(rpc)
w3 = Web3(base_provider)
latest_block_number = get_latest_block_number(w3)
while not killer.kill_now:
last_written_block = find_latest_block_update(db_session)
logger.info(f"Latest block: {latest_block_number}")
logger.info(f"Last written block: {last_written_block}")
if last_written_block is None or last_written_block < latest_block_number:
block_number = (
latest_block_number
if last_written_block is None
else last_written_block + 1
)
logger.info(f"Writing block: {block_number}")
inspect_block(
db_session,
base_provider,
w3,
block_number,
should_write_classified_traces=False,
should_cache=False,
)
update_latest_block(db_session, block_number)
else:
time.sleep(5)
latest_block_number = get_latest_block_number(w3)
logger.info("Stopping...")
if __name__ == "__main__":
run()