From d310a6970ca49b758bf8aa689142f697f1dcc36d Mon Sep 17 00:00:00 2001 From: philogicae <38438271+philogicae@users.noreply.github.com> Date: Thu, 13 Feb 2025 14:17:36 +0200 Subject: [PATCH] Fix decimal issue --- src/aleph/sdk/connectors/superfluid.py | 2 +- src/aleph/sdk/evm_utils.py | 6 ++++-- src/aleph/sdk/utils.py | 16 +++++++++++----- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/aleph/sdk/connectors/superfluid.py b/src/aleph/sdk/connectors/superfluid.py index 5c02badd..76bbf907 100644 --- a/src/aleph/sdk/connectors/superfluid.py +++ b/src/aleph/sdk/connectors/superfluid.py @@ -58,7 +58,7 @@ def can_start_flow(self, flow: Decimal, block=True) -> bool: if not valid and block: raise InsufficientFundsError( token_type=TokenType.ALEPH, - required_funds=float(MIN_FLOW_4H), + required_funds=float(from_wei_token(MIN_FLOW_4H)), available_funds=float(from_wei_token(balance)), ) return valid diff --git a/src/aleph/sdk/evm_utils.py b/src/aleph/sdk/evm_utils.py index 2bd1da09..0cf810f4 100644 --- a/src/aleph/sdk/evm_utils.py +++ b/src/aleph/sdk/evm_utils.py @@ -1,4 +1,4 @@ -from decimal import ROUND_CEILING, Decimal +from decimal import ROUND_CEILING, Context, Decimal from enum import Enum from typing import List, Optional, Union @@ -39,7 +39,9 @@ def to_wei_token(amount: Decimal) -> Decimal: def ether_rounding(amount: Decimal) -> Decimal: """Rounds the given value to 18 decimals.""" - return amount.quantize(Decimal(1) / Decimal(10**18), rounding=ROUND_CEILING) + return amount.quantize( + Decimal(1) / Decimal(10**18), rounding=ROUND_CEILING, context=Context(prec=18) + ) def get_chain_id(chain: Union[Chain, str, None]) -> Optional[int]: diff --git a/src/aleph/sdk/utils.py b/src/aleph/sdk/utils.py index ed78858e..950ad805 100644 --- a/src/aleph/sdk/utils.py +++ b/src/aleph/sdk/utils.py @@ -8,7 +8,7 @@ import os import subprocess from datetime import date, datetime, time -from decimal import Decimal +from decimal import Context, Decimal, InvalidOperation from enum import Enum from pathlib import Path from shutil import make_archive @@ -414,7 +414,7 @@ def safe_getattr(obj, attr, default=None): def displayable_amount( - amount: Union[str, int, float, Decimal], decimals: Optional[int] = None + amount: Union[str, int, float, Decimal], decimals: int = 18 ) -> str: """Returns the amount as a string without unnecessary decimals.""" @@ -422,10 +422,16 @@ def displayable_amount( try: dec_amount = Decimal(amount) if decimals: - dec_amount = dec_amount.quantize(Decimal(1) / Decimal(10**decimals)) + dec_amount = dec_amount.quantize( + Decimal(1) / Decimal(10**decimals), context=Context(prec=18) + ) str_amount = str(format(dec_amount.normalize(), "f")) - except ValueError as e: - raise ValueError(f"Invalid amount: {amount}") from e + except ValueError: + logger.error(f"Invalid amount to display: {amount}") + exit(1) + except InvalidOperation: + logger.error(f"Invalid operation on amount to display: {amount}") + exit(1) return str_amount