diff --git a/cli.py b/cli.py index f67441d..0729db8 100644 --- a/cli.py +++ b/cli.py @@ -8,7 +8,7 @@ from mev_inspect.concurrency import coro from mev_inspect.crud.prices import write_prices from mev_inspect.db import get_inspect_session, get_trace_session from mev_inspect.inspector import MEVInspector -from mev_inspect.prices import fetch_prices +from mev_inspect.prices import fetch_prices, fetch_prices_range RPC_URL_ENV = "RPC_URL" @@ -117,6 +117,19 @@ def fetch_all_prices(): write_prices(inspect_db_session, prices) +@cli.command() +@click.argument("start", type=int) +@click.argument("end", type=int) +def fetch_range(start: int, end: int): + inspect_db_session = get_inspect_session() + + logger.info("Fetching prices") + prices = fetch_prices_range(start, end) + + logger.info("Writing prices") + write_prices(inspect_db_session, prices) + + def get_rpc_url() -> str: return os.environ["RPC_URL"] diff --git a/mev b/mev index d42e8ee..2505a3b 100755 --- a/mev +++ b/mev @@ -82,7 +82,14 @@ case "$1" in kubectl exec -ti deploy/mev-inspect -- \ poetry run fetch-all-prices ;; - *) + fetch-range) + start=$2 + end=$3 + echo "Running price fetch-range" + kubectl exec -ti deploy/mev-inspect -- \ + poetry run fetch-range $start $end + ;; + *) echo "prices usage: "$1" {fetch-all}" exit 1 esac diff --git a/mev_inspect/prices.py b/mev_inspect/prices.py index e69394c..1f2c3bc 100644 --- a/mev_inspect/prices.py +++ b/mev_inspect/prices.py @@ -20,7 +20,32 @@ def fetch_prices() -> List[Price]: price_time_series = price_data["prices"] for entry in price_time_series: - timestamp = dt.fromtimestamp(entry[0] / 100) + timestamp = dt.fromtimestamp(entry[0] / 1000) + token_price = entry[1] + prices.append( + Price( + timestamp=timestamp, + usd_price=token_price, + token_address=token_address, + ) + ) + + return prices + + +def fetch_prices_range(start: int, end: int) -> List[Price]: + + cg = CoinGeckoAPI() + prices = [] + + for token_address in TOKEN_ADDRESSES: + price_data = cg.get_coin_market_chart_range_by_id( + COINGECKO_ID_BY_ADDRESS[token_address], "usd", start, end + ) + price_time_series = price_data["prices"] + + for entry in price_time_series: + timestamp = dt.fromtimestamp(entry[0] / 1000) token_price = entry[1] prices.append( Price( diff --git a/pyproject.toml b/pyproject.toml index f2f9f17..d616834 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ inspect-many-blocks = 'cli:inspect_many_blocks_command' enqueue-many-blocks = 'cli:enqueue_many_blocks_command' fetch-block = 'cli:fetch_block_command' fetch-all-prices = 'cli:fetch_all_prices' +fetch-range = 'cli:fetch_range' [tool.black] exclude = '''