diff --git a/silkaj/constants.py b/silkaj/constants.py index 1bfb623076e63be2418b20062966d286d1d9aabe..27fbae0e2ae1d0b93aba396cd638fc65c2a31c94 100644 --- a/silkaj/constants.py +++ b/silkaj/constants.py @@ -27,6 +27,7 @@ SUCCESS_EXIT_STATUS = 0 FAILURE_EXIT_STATUS = 1 BMA_MAX_BLOCKS_CHUNK_SIZE = 5000 PUBKEY_PATTERN = "[1-9A-HJ-NP-Za-km-z]{43,44}" -MINIMAL_TX_AMOUNT = 0.01 +MINIMAL_ABSOLUTE_TX_AMOUNT = 0.01 +MINIMAL_RELATIVE_TX_AMOUNT = 1e-6 CENT_MULT_TO_UNIT = 100 SHORT_PUBKEY_SIZE = 8 diff --git a/silkaj/tx.py b/silkaj/tx.py index 49312df644b3af11100b924eef111cbcbcd00ff4..cede04cb6f7e69ee50ff421ffdc92931a3e71724 100644 --- a/silkaj/tx.py +++ b/silkaj/tx.py @@ -30,7 +30,8 @@ from silkaj.auth import auth_method from silkaj import money from silkaj.constants import ( SOURCES_PER_TX, - MINIMAL_TX_AMOUNT, + MINIMAL_ABSOLUTE_TX_AMOUNT, + MINIMAL_RELATIVE_TX_AMOUNT, CENT_MULT_TO_UNIT, ASYNC_SLEEP, ) @@ -47,9 +48,9 @@ from duniterpy.documents.transaction import OutputSource, Unlock, SIGParameter "--amount", "-a", multiple=True, - type=FloatRange(MINIMAL_TX_AMOUNT), + type=FloatRange(MINIMAL_ABSOLUTE_TX_AMOUNT), help="Quantitative amount(s):\n-a <amount>\nMinimum amount is {0}".format( - MINIMAL_TX_AMOUNT + MINIMAL_ABSOLUTE_TX_AMOUNT ), cls=MutuallyExclusiveOption, mutually_exclusive=["amountsud", "allsources"], @@ -59,8 +60,8 @@ from duniterpy.documents.transaction import OutputSource, Unlock, SIGParameter "--amountUD", "-d", multiple=True, - type=float, - help="Relative amount(s):\n-d <amount_UD>", + type=FloatRange(MINIMAL_RELATIVE_TX_AMOUNT), + help=f"Relative amount(s):\n-d <amount_UD>\nMinimum amount is {MINIMAL_RELATIVE_TX_AMOUNT}", cls=MutuallyExclusiveOption, mutually_exclusive=["amounts", "allsources"], ) @@ -191,7 +192,7 @@ def compute_amounts(amounts, multiplicator): computed_amount = amount * multiplicator # check if relative amounts are high enough if (multiplicator != CENT_MULT_TO_UNIT) and ( - computed_amount < (MINIMAL_TX_AMOUNT * CENT_MULT_TO_UNIT) + computed_amount < (MINIMAL_ABSOLUTE_TX_AMOUNT * CENT_MULT_TO_UNIT) ): message_exit("Error: amount {0} is too low.".format(amount)) amounts_list.append(round(computed_amount)) diff --git a/tests/test_tx.py b/tests/test_tx.py index 4c17cff5ff3a6c093d6aefb146c2ab47ed1d3387..fae298cfd855117e20a3dbcc8810b56aaf505ed0 100644 --- a/tests/test_tx.py +++ b/tests/test_tx.py @@ -21,7 +21,7 @@ from click.testing import CliRunner from silkaj.tx import transaction_amount from silkaj.money import UDValue from silkaj.cli import cli -from silkaj.constants import MINIMAL_TX_AMOUNT, FAILURE_EXIT_STATUS +from silkaj.constants import MINIMAL_ABSOLUTE_TX_AMOUNT, FAILURE_EXIT_STATUS import patched @@ -103,7 +103,9 @@ def test_tx_passed_amount_cli(): ) assert result.exit_code == FAILURE_EXIT_STATUS - result = CliRunner().invoke(cli, ["tx", "-r", "A", "-a", MINIMAL_TX_AMOUNT - 0.001]) + result = CliRunner().invoke( + cli, ["tx", "-r", "A", "-a", MINIMAL_ABSOLUTE_TX_AMOUNT - 0.001] + ) assert "Error: Invalid value for '--amount'" in result.output assert result.exit_code == 2 diff --git a/tests/test_unit_tx.py b/tests/test_unit_tx.py index ba0e09f813b2cfbeabe680042b4d8580fae5e7b3..0a7840399eddab81919b7f90e151889dfdebd3fb 100644 --- a/tests/test_unit_tx.py +++ b/tests/test_unit_tx.py @@ -29,7 +29,7 @@ from silkaj.money import UDValue from silkaj.constants import ( G1_SYMBOL, CENT_MULT_TO_UNIT, - MINIMAL_TX_AMOUNT, + MINIMAL_ABSOLUTE_TX_AMOUNT, ) from duniterpy.documents.transaction import ( InputSource, @@ -280,7 +280,7 @@ async def test_transaction_amount( def too_little_amount(amounts, multiplicator): for amount in amounts: - if amount * multiplicator < MINIMAL_TX_AMOUNT * CENT_MULT_TO_UNIT: + if amount * multiplicator < MINIMAL_ABSOLUTE_TX_AMOUNT * CENT_MULT_TO_UNIT: return True return False