Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use multiple price feeds always #64

Merged
merged 6 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/price_providers/price_feed.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ def __init__(self, activate: bool):
else:
self.providers = []

def get_price(self, price_params: dict) -> tuple[float, str] | None:
def get_price(self, price_params: dict) -> list[tuple[float, str]]:
"""Function iterates over list of price provider objects and attempts to get a price."""
prices = []
for provider in self.providers:
try:
price = provider.get_price(price_params)
if price is not None:
return price, provider.name
prices.append((price, provider.name))
except Exception as e:
logger.error(f"Error getting price from provider {provider.name}: {e}")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This being an error message sounds a bit strange. Most errors should be caught explicitly and would be more of a info type thing.

return None
return prices
25 changes: 15 additions & 10 deletions src/transaction_processor.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import time
from hexbytes import HexBytes
from web3 import Web3
from src.helpers.blockchain_data import BlockchainData
Expand All @@ -7,7 +8,6 @@
from src.helpers.helper_functions import read_sql_file, set_params
from src.helpers.config import CHAIN_SLEEP_TIME, logger
from src.fees.compute_fees import compute_all_fees_of_batch
import time


class TransactionProcessor:
Expand Down Expand Up @@ -191,7 +191,7 @@ def process_prices_for_tokens(
token_imbalances: dict[str, int],
block_number: int,
tx_hash: str,
) -> dict[str, tuple[float, str]]:
) -> dict[str, list[tuple[float, str]]]:
"""Compute prices for tokens with non-null imbalances."""
prices = {}
try:
Expand All @@ -200,8 +200,7 @@ def process_prices_for_tokens(
set_params(token_address, block_number, tx_hash)
)
if price_data:
price, source = price_data
prices[token_address] = (price, source)
prices[token_address] = price_data
except Exception as e:
logger.error(f"Failed to process prices for transaction {tx_hash}: {e}")

Expand Down Expand Up @@ -290,15 +289,21 @@ def handle_fees(
)

def handle_prices(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This name sounds a bit strange. Maybe store_prices would work.

self, prices: dict[str, tuple[float, str]], tx_hash: str, block_number: int
self,
prices: dict[str, list[tuple[float, str]]],
tx_hash: str,
block_number: int,
) -> None:
"""Function writes prices to table per token."""
try:
for token_address, (price, source) in prices.items():
self.db.write_prices(
source, block_number, tx_hash, token_address, price
)
self.log_message.append(f"Token: {token_address}, Price: {price} ETH")
for token_address, list_of_prices in prices.items():
for price, source in list_of_prices:
self.db.write_prices(
source, block_number, tx_hash, token_address, price
)
self.log_message.append(
f"Token: {token_address}, Price: {price} ETH, Source: {source}"
)
except Exception as err:
logger.error(f"Error: {err}")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
logger.error(f"Error: {err}")
logger.error(f"Error writing prices to database: {err}")


Expand Down
Loading