diff --git a/silkaj/money.py b/silkaj/money.py index 2e999738e55b8447f4a41f2c683e31bc6cc686a7..8e8a22e28e32a90d6cf7b92fddc2baba682d22d0 100644 --- a/silkaj/money.py +++ b/silkaj/money.py @@ -18,18 +18,20 @@ def cmd_amount(ep, cli_args): total[0] += value[0] total[1] += value[1] if (len(pubkeys) > 1): - show_amount_from_pubkey("Total", total, ud_value, currency_symbol) + show_amount_from_pubkey(ep, "Total", total, currency_symbol) else: seed = auth_method(cli_args) pubkey = get_publickey_from_seed(seed) show_amount_from_pubkey(ep, pubkey, get_amount_from_pubkey(ep, pubkey)) -def show_amount_from_pubkey(pubkey, value, ud_value, currency_symbol): +def show_amount_from_pubkey(ep, pubkey, value, currency_symbol): totalAmountInput = value[0] amount = value[1] # output + currency_symbol = CurrencySymbol().symbol + ud_value = UDValue(ep).ud_value if totalAmountInput - amount != 0: print("Blockchain:") print("-----------") @@ -106,8 +108,16 @@ def get_amount_from_pubkey(ep, pubkey): return int(totalAmountInput), int(amount) -def get_last_ud_value(ep): - blockswithud = get_request(ep, "blockchain/with/ud")["result"] - NBlastUDblock = blockswithud["blocks"][-1] - lastUDblock = get_request(ep, "blockchain/block/" + str(NBlastUDblock)) - return lastUDblock["dividend"] * 10 ** lastUDblock["unitbase"] +class UDValue(object): + __instance = None + + def __new__(cls, ep): + if UDValue.__instance is None: + UDValue.__instance = object.__new__(cls) + return UDValue.__instance + + def __init__(self, ep): + blockswithud = get_request(ep, "blockchain/with/ud")["result"] + NBlastUDblock = blockswithud["blocks"][-1] + lastUDblock = get_request(ep, "blockchain/block/" + str(NBlastUDblock)) + self.ud_value = lastUDblock["dividend"] * 10 ** lastUDblock["unitbase"] diff --git a/silkaj/silkaj.py b/silkaj/silkaj.py index a8144d9e485bee95150626df6181fd9568c3d180..271148291b25f3c7ba72406c9dff2d9a9d308b10 100644 --- a/silkaj/silkaj.py +++ b/silkaj/silkaj.py @@ -3,7 +3,7 @@ from sys import stderr from commandlines import Command from silkaj.tx import send_transaction -from silkaj.money import cmd_amount, get_last_ud_value +from silkaj.money import cmd_amount from silkaj.cert import send_certification from silkaj.commands import currency_info, difficulties, set_network_sort_keys,\ network_info, argos_info, list_issuers diff --git a/silkaj/tx.py b/silkaj/tx.py index f5dbac93463a084e4f29127afc830fdac533dd60..7e78deab24f828885a524bd751b921a07c0e7cdc 100644 --- a/silkaj/tx.py +++ b/silkaj/tx.py @@ -9,7 +9,7 @@ from silkaj.tools import get_publickey_from_seed, sign_document_from_seed,\ check_public_key, message_exit from silkaj.auth import auth_method from silkaj.wot import get_uid_from_pubkey -from silkaj.money import get_amount_from_pubkey +from silkaj.money import get_amount_from_pubkey, UDValue from silkaj.constants import NO_MATCHING_ID @@ -17,7 +17,7 @@ def send_transaction(ep, cli_args): """ Main function """ - amount, output, comment, allSources, outputBackChange = cmd_transaction(cli_args, ud_value) + amount, output, comment, allSources, outputBackChange = cmd_transaction(ep, cli_args) seed = auth_method(cli_args) issuer_pubkey = get_publickey_from_seed(seed) @@ -26,12 +26,12 @@ def send_transaction(ep, cli_args): check_transaction_values(comment, outputAddresses, outputBackChange, pubkey_amount < amount * len(outputAddresses), issuer_pubkey) if cli_args.contains_switches('yes') or cli_args.contains_switches('y') or \ - input(tabulate(transaction_confirmation(ep, issuer_pubkey, amount, ud_value, currency_symbol, outputAddresses, comment), + input(tabulate(transaction_confirmation(ep, issuer_pubkey, amount, currency_symbol, outputAddresses, comment), tablefmt="fancy_grid") + "\nDo you confirm sending this transaction? [yes/no]: ") == "yes": generate_and_send_transaction(ep, seed, issuer_pubkey, amount, outputAddresses, comment, allSources, outputBackChange) -def cmd_transaction(cli_args, ud): +def cmd_transaction(ep, cli_args): """ Retrieve values from command line interface """ @@ -43,7 +43,7 @@ def cmd_transaction(cli_args, ud): if cli_args.contains_definitions('amount'): amount = int(float(cli_args.get_definition('amount')) * 100) if cli_args.contains_definitions('amountUD'): - amount = int(float(cli_args.get_definition('amountUD')) * ud) + amount = int(float(cli_args.get_definition('amountUD')) * UDValue(ep).ud_value) output = cli_args.get_definition('output') comment = cli_args.get_definition('comment') if cli_args.contains_definitions('comment') else "" @@ -69,14 +69,14 @@ def check_transaction_values(comment, outputAddresses, outputBackChange, enough_ message_exit(issuer_pubkey + " pubkey doesn’t have enough money for this transaction.") -def transaction_confirmation(ep, issuer_pubkey, amount, ud, currency_symbol, outputAddresses, comment): +def transaction_confirmation(ep, issuer_pubkey, amount, currency_symbol, outputAddresses, comment): """ Generate transaction confirmation """ tx = list() tx.append(["amount (" + currency_symbol + ")", amount / 100 * len(outputAddresses)]) - tx.append(["amount (UD " + currency_symbol + ")", round(amount / ud, 4)]) + tx.append(["amount (UD " + currency_symbol + ")", round(amount / UDValue(ep).ud_value, 4)]) tx.append(["from", issuer_pubkey]) id_from = get_uid_from_pubkey(ep, issuer_pubkey) if id_from is not NO_MATCHING_ID: