Eru Ilúvatar bfbf1cc379
feat: analyze profits - closes #19 (#20)
* feat: analyze profits - closes #19

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* feat: analyze profits - closes #19

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* fix peotry lock

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* feat: add save to csv option

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* fix: update dockerfile to resolve deps automatically at build-time

Signed-off-by: Luca Georges Francois <luca@quartz.technology>

* feat: add porfit by day

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* feat: add failures saving

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* fix: launch script

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

* feat: get rpc url from env

Signed-off-by: Arthurim <arthurbdauphine@gmail.com>

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>
2023-01-16 07:00:21 +00:00

72 lines
2.3 KiB
Python

import pandas as pd
import pycoingecko as pg
from profit_analysis.column_names import (
CG_ID_DEBT_KEY,
CG_ID_KEY,
CG_ID_RECEIVED_KEY,
PRICE_KEY,
TIMESTAMP_KEY,
TOKEN_DEBT_KEY,
TOKEN_KEY,
TOKEN_RECEIVED_KEY,
)
from profit_analysis.constants import DATA_PATH
TRAILING_ZEROS = "000000000000000000000000"
def get_address_to_coingecko_ids_mapping():
token_cg_ids = pd.read_csv(DATA_PATH + "address_to_coingecko_ids.csv")
token_cg_ids[TOKEN_DEBT_KEY] = token_cg_ids[TOKEN_KEY].astype(str)
token_cg_ids[CG_ID_RECEIVED_KEY] = token_cg_ids[CG_ID_KEY]
token_cg_ids[CG_ID_DEBT_KEY] = token_cg_ids[CG_ID_KEY]
token_cg_ids[TOKEN_RECEIVED_KEY] = token_cg_ids[TOKEN_KEY].astype(str)
return token_cg_ids
def add_cg_ids(profit_by_block):
token_cg_ids = get_address_to_coingecko_ids_mapping()
token_cg_ids[TOKEN_DEBT_KEY] = token_cg_ids[TOKEN_DEBT_KEY].str.lower()
token_cg_ids[TOKEN_RECEIVED_KEY] = token_cg_ids[TOKEN_RECEIVED_KEY].str.lower()
profit_by_block[TOKEN_RECEIVED_KEY] = (
profit_by_block[TOKEN_RECEIVED_KEY]
.map(lambda x: x.replace(TRAILING_ZEROS, ""))
.str.lower()
)
profit_by_block[TOKEN_DEBT_KEY] = (
profit_by_block[TOKEN_DEBT_KEY]
.map(lambda x: x.replace(TRAILING_ZEROS, ""))
.str.lower()
)
profit_by_block = profit_by_block.merge(
token_cg_ids[[TOKEN_DEBT_KEY, CG_ID_DEBT_KEY]], on=TOKEN_DEBT_KEY, how="left"
)
profit_by_block = profit_by_block.merge(
token_cg_ids[[TOKEN_RECEIVED_KEY, CG_ID_RECEIVED_KEY]], how="left"
)
return profit_by_block[
[
"block_number",
"timestamp",
"transaction_hash",
"token_debt",
"amount_debt",
"cg_id_debt",
"token_received",
"amount_received",
"cg_id_received",
]
]
def get_coingecko_historical_prices(start, end, token):
cg = pg.CoinGeckoAPI()
token_prices = cg.get_coin_market_chart_range_by_id(
id=token, vs_currency="usd", from_timestamp=start, to_timestamp=end
)["prices"]
token_prices = pd.DataFrame(token_prices, columns=[TIMESTAMP_KEY, PRICE_KEY])
token_prices[TIMESTAMP_KEY] = pd.to_datetime(
pd.to_numeric(token_prices[TIMESTAMP_KEY]), unit="ms"
)
return token_prices[[TIMESTAMP_KEY, PRICE_KEY]]