Skip to content

Commit

Permalink
Merge pull request #64 from cowprotocol/use_multiple_price_fees_always
Browse files Browse the repository at this point in the history
Use multiple price feeds always
  • Loading branch information
fhenneke authored Oct 4, 2024
2 parents a8814b2 + 873af06 commit 21f1e64
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 13 deletions.
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}")
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 @@ -193,7 +193,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 @@ -202,8 +202,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 @@ -292,15 +291,21 @@ def handle_fees(
)

def handle_prices(
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}")

Expand Down

0 comments on commit 21f1e64

Please sign in to comment.