From 8189b9fe1b888253e633fa9edd202ea88e2b0928 Mon Sep 17 00:00:00 2001 From: ezzygarmyz Date: Tue, 16 Jul 2024 05:56:13 +0200 Subject: [PATCH] Wallet : merge utxos --- nodez/app.py | 2 +- nodez/client.py | 5 +- nodez/command.py | 4 +- nodez/config/options/divers.py | 33 ++++++-- nodez/icones/loading_blocks.gif | Bin 0 -> 26745 bytes nodez/icones/scan_utxos.png | Bin 0 -> 4638 bytes nodez/main_window/start.py | 10 +-- nodez/main_window/styles/box.py | 3 +- nodez/main_window/styles/divider.py | 2 +- nodez/main_window/styles/label.py | 7 +- nodez/resources/splash.png | Bin 20088 -> 21326 bytes nodez/wallet/receive.py | 115 +++++++++++++++++++++++----- nodez/wallet/styles/box.py | 2 +- nodez/wallet/styles/button.py | 4 +- nodez/wallet/styles/input.py | 11 +++ nodez/wallet/styles/label.py | 12 ++- pyproject.toml | 2 +- 17 files changed, 167 insertions(+), 45 deletions(-) create mode 100644 nodez/icones/loading_blocks.gif create mode 100644 nodez/icones/scan_utxos.png diff --git a/nodez/app.py b/nodez/app.py index 01cce3f..45cb7cc 100644 --- a/nodez/app.py +++ b/nodez/app.py @@ -127,7 +127,7 @@ def main(): app.app_id = "com.nodez" app.home_page = "https://www.getbtcz.com" app.author = "BTCZCommunity" - app.version = "1.0.4" + app.version = "1.0.5" return app diff --git a/nodez/client.py b/nodez/client.py index 34903b0..fa4d505 100644 --- a/nodez/client.py +++ b/nodez/client.py @@ -409,9 +409,8 @@ def z_importWallet(self, backup_file): ) - def z_mergeToaAdress(self, list_addresses, address, tx_fee, limit): - addresses_json = json.dumps(list_addresses) + def z_mergeToaAdress(self, list_addresses, address, tx_fee): return self.make_rpc_request( "z_mergetoaddress", - [addresses_json, address, tx_fee, limit] + [list_addresses, address, tx_fee] ) \ No newline at end of file diff --git a/nodez/command.py b/nodez/command.py index 762522d..00cf01f 100644 --- a/nodez/command.py +++ b/nodez/command.py @@ -276,7 +276,7 @@ async def z_importWallet(self, backup_file): return await self._run_command(command) - async def z_mergeToaAdress(self, list_addresses, address, tx_fee, limit): + async def z_mergeToaAdress(self, list_addresses, address, tx_fee): addresses_json = json.dumps(list_addresses) - command = f'{self.bitcoinz_cli_file} z_mergetoaddress {addresses_json} {address} {tx_fee} {limit}' + command = f'{self.bitcoinz_cli_file} z_mergetoaddress {addresses_json} {address} {tx_fee}' return await self._run_command(command) \ No newline at end of file diff --git a/nodez/config/options/divers.py b/nodez/config/options/divers.py index c7f2eda..515a340 100644 --- a/nodez/config/options/divers.py +++ b/nodez/config/options/divers.py @@ -68,6 +68,13 @@ def __init__( "exportdir :", style=LabelStyle.exportdir_txt ) + self.zmergetoaddress_switch = Switch( + "zmergetoaddress", + style=SwitchStyle.switch, + on_change=lambda switch: self.update_config_switch( + switch, "zmergetoaddress" + ) + ) self.genproclimit_input = NumberInput( step=1, min=-1, @@ -123,6 +130,12 @@ def __init__( style=ButtonStyle.info_button, on_press=self.display_info ) + self.zmergetoaddress_info = Button( + "?", + id="zmergetoaddress", + style=ButtonStyle.info_button, + on_press=self.display_info + ) self.exportdir_button = Button( "...", style=ButtonStyle.exportdir_button, @@ -150,10 +163,12 @@ def __init__( style=BoxStyle.divers_row2_box ) self.divers_switch_box.add( - self.gen_switch + self.gen_switch, + self.zmergetoaddress_switch ) self.divers_button_box.add( - self.gen_info + self.gen_info, + self.zmergetoaddress_info ) self.divers_button2_box.add( self.genproclimit_info, @@ -188,11 +203,14 @@ def __init__( async def read_file_lines(self, widget): + gen = None genproclimit = None equihashsolver = None keypool = None exportdir = None + zmergetoaddress = None + with open(self.file_path, 'r') as file: lines = file.readlines() for line in lines: @@ -208,9 +226,11 @@ async def read_file_lines(self, widget): elif key == "keypool": keypool = value elif key == "exportdir": - exportdir = value + exportdir = value + elif key == "zmergetoaddress": + zmergetoaddress = value await self.update_values( - gen, genproclimit, equihashsolver, keypool, exportdir + gen, genproclimit, equihashsolver, keypool, exportdir, zmergetoaddress ) @@ -231,9 +251,10 @@ async def on_confirm(window, path): async def update_values( self, - gen, genproclimit, equihashsolver, keypool, exportdir + gen, genproclimit, equihashsolver, keypool, exportdir, zmergetoaddress ): self.gen_switch.value = (gen == "1") + self.zmergetoaddress_switch.value = (zmergetoaddress == "1") self.genproclimit_input.value = genproclimit self.equihashsolver_input.value = equihashsolver self.keypool_input.value = keypool @@ -309,6 +330,8 @@ def display_info(self, button): info_message = "Pre-generate this many public/private key pairs, so wallet backups will be valid for both prior transactions and several dozen future transactions." elif button.id == "exportdir": info_message = "" + elif button.id == "zmergetoaddress": + info_message = "Enable z_mergetoaddress function" self.app.main_window.info_dialog( "Info", info_message diff --git a/nodez/icones/loading_blocks.gif b/nodez/icones/loading_blocks.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a924188af3a4566dca002f427870932b39e60c6 GIT binary patch literal 26745 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 literal 0 HcmV?d00001 diff --git a/nodez/main_window/start.py b/nodez/main_window/start.py index 139cd9f..538a28a 100644 --- a/nodez/main_window/start.py +++ b/nodez/main_window/start.py @@ -28,7 +28,7 @@ class StartNode(Window): def __init__(self, app:App, local_button): super().__init__( title="Loading...", - size=(280, 90), + size=(250, 300), resizable=False, minimizable=False, closable=False @@ -40,6 +40,9 @@ def __init__(self, app:App, local_button): self.local_button = local_button self.bitcoinzd_file = os.path.join(self.app.paths.data, "bitcoinzd.exe") + self.loading_image = ImageView( + "icones/loading_blocks.gif" + ) self.starting_txt = Label( "Starting Node...", style=LabelStyle.starting_txt @@ -51,13 +54,10 @@ def __init__(self, app:App, local_button): self.main_box = Box( style=BoxStyle.start_main_box ) - self.bitcoinz_coin = ImageView( - ("resources/btcz_coin1.gif") - ) self.main_box.add( self.starting_txt, self.divider_top, - self.bitcoinz_coin + self.loading_image ) self.content = self.main_box self.app.add_background_task( diff --git a/nodez/main_window/styles/box.py b/nodez/main_window/styles/box.py index e0d10e5..76acde9 100644 --- a/nodez/main_window/styles/box.py +++ b/nodez/main_window/styles/box.py @@ -25,7 +25,8 @@ class BoxStyle(): start_main_box = Pack( direction = COLUMN, - alignment = CENTER + alignment = CENTER, + background_color = BLACK ) download_main_box = Pack( diff --git a/nodez/main_window/styles/divider.py b/nodez/main_window/styles/divider.py index 3f0f512..3fc2891 100644 --- a/nodez/main_window/styles/divider.py +++ b/nodez/main_window/styles/divider.py @@ -4,7 +4,7 @@ class DividerStyle(): start_divider_top = Pack( - padding_bottom = 5 + padding_bottom = 10 ) download_divider_top = Pack( diff --git a/nodez/main_window/styles/label.py b/nodez/main_window/styles/label.py index fe9ee0c..7d6822a 100644 --- a/nodez/main_window/styles/label.py +++ b/nodez/main_window/styles/label.py @@ -47,11 +47,12 @@ class LabelStyle(): ) starting_txt = Pack( - font_family = MONOSPACE, font_weight = BOLD, text_align = CENTER, - padding_top = 5, - padding_bottom = 5 + padding_top = 20, + padding_bottom = 10, + background_color = BLACK, + color = WHITE ) download_txt = Pack( diff --git a/nodez/resources/splash.png b/nodez/resources/splash.png index ecc6f13bf470a3bba4dcfafa975d244bb25a200e..ad396cb86480894838f5d120ed0619b29f5e64a0 100644 GIT binary patch delta 18862 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 JPDHLkV1i&ylKB7t delta 17997 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 Ef}J#eLI3~& diff --git a/nodez/wallet/receive.py b/nodez/wallet/receive.py index 0bd56f5..ea16a0b 100644 --- a/nodez/wallet/receive.py +++ b/nodez/wallet/receive.py @@ -135,9 +135,33 @@ def __init__(self, app:App, window_button, explorer_button): "Merge multiple UTXOs into a single UTXO or note.", style=LabelStyle.merge_info_txt ) - self.merge_result_txt = Label( - "- Opreration Result -", - style=LabelStyle.merge_result_txt + self.operation_status_txt = Label( + "- Operation Result -", + style=LabelStyle.operation_status_txt + ) + self.remaining_utxos = Label( + "remainingUTXOs :", + style=LabelStyle.status_txt + ) + self.remaining_value = Label( + "remainingValue :", + style=LabelStyle.status_txt + ) + self.merging_utxos = Label( + "mergingUTXOs :", + style=LabelStyle.status_txt + ) + self.merging_value = Label( + "mergingValue :", + style=LabelStyle.status_txt + ) + self.operation_id = Label( + "OperationID :", + style=LabelStyle.status_txt + ) + self.operation_id_output = TextInput( + readonly=True, + style=InputStyle.operation_id_output ) self.merge_select_address_txt = Label( "Merge to :", @@ -161,7 +185,7 @@ def __init__(self, app:App, window_button, explorer_button): style=InputStyle.merge_fee_input ) self.scan_button = Button( - "Scan UTXOs", + icon=Icon("icones/scan_utxos"), enabled= True, style=ButtonStyle.scan_button, on_press=self.scan_utxos @@ -270,7 +294,13 @@ async def display_window(self): self.scan_button ) self.merge_reslut_box.add( - self.merge_result_txt + self.operation_status_txt, + self.remaining_utxos, + self.remaining_value, + self.merging_utxos, + self.merging_value, + self.operation_id, + self.operation_id_output ) self.merge_manage_box.add( self.merge_operation_box, @@ -292,25 +322,31 @@ async def scan_utxos(self, button): self.scan_button.enabled = False if os.path.exists(db_path): scan_addresses = self.client.listAddressgroupPings() + account_addresses = self.client.getAddressesByAccount() else: + account_addresses = await self.command.getAddressesByAccount() + account_addresses = json.loads(account_addresses) + scan_addresses = await self.command.listAddressgroupPings() scan_addresses = json.loads(scan_addresses) + if scan_addresses: flattened_addresses = [address_info for address_info_list in scan_addresses for address_info in address_info_list] filtered_addresses = [address_info for address_info in flattened_addresses if address_info[1] != 0] sorted_addresses = sorted(filtered_addresses, key=lambda x: x[1], reverse=True) - self.number_addresses = len(sorted_addresses) - if self.number_addresses == 0: - self.scan_button.enabled = True - return self.total_amount = sum(address_info[1] for address_info in sorted_addresses) - addresses_only = [address_info[0] for address_info in sorted_addresses] - self.json_addresses = json.dumps(addresses_only) + if account_addresses: + main_addresees = [address_info for address_info in account_addresses] + addresses_only = [address for address in addresses_only if address not in main_addresees] + self.number_addresses = len(addresses_only) + if self.number_addresses == 0: self.scan_button.enabled = True - await self.display_merge_options() + return else: self.scan_button.enabled = True + self.json_addresses = addresses_only + await self.display_merge_options() async def display_merge_options(self): @@ -357,20 +393,30 @@ async def start_merge_opertation(self, address, tx_fee): operation = self.client.z_mergeToaAdress( self.json_addresses, address, - tx_fee, - self.number_addresses + tx_fee ) else: + self.json_addresses = json.dumps(self.json_addresses) operation = await self.command.z_mergeToaAdress( self.json_addresses, address, - tx_fee, - self.number_addresses + tx_fee ) if operation: operation = json.loads(operation) if operation is not None: - print(operation) + remainingUTXOs = operation.get("remainingUTXOs") + remainingTransparentValue = operation.get("remainingTransparentValue") + mergingUTXOs = operation.get("mergingUTXOs") + mergingTransparentValue = operation.get("mergingTransparentValue") + operationID = operation.get("opid") + await self.update_operation_status( + remainingUTXOs, + remainingTransparentValue, + mergingUTXOs, + mergingTransparentValue, + operationID + ) else: self.error_dialog( "Error...", @@ -379,7 +425,35 @@ async def start_merge_opertation(self, address, tx_fee): await asyncio.sleep(1) self.cancel_button.enabled = True self.merge_button.enabled = True - + + + + async def update_operation_status(self, remainingUTXOs, remainingTransparentValue, mergingUTXOs, mergingTransparentValue, operationID): + self.remaining_utxos.text = f"remainingUTXOs : {remainingUTXOs}" + self.remaining_value.text = f"remainingValue : {self.system.format_balance(remainingTransparentValue)}" + self.merging_utxos.text = f"mergingUTXOs : {mergingUTXOs}" + self.merging_value.text = f"mergingValue : {self.system.format_balance(mergingTransparentValue)}" + self.operation_id_output.value = f"OperationID : {operationID}" + config_path = self.app.paths.config + db_path = os.path.join(config_path, 'config.db') + while True: + if os.path.exists(db_path): + operation_status = self.client.z_getOperationStatus(operationID) + else: + operation_status = await self.command.z_getOperationStatus(operationID) + operation_status = json.loads(operation_status) + if operation_status is not None: + status = operation_status[0].get('status') + if status == "success": + await asyncio.sleep(3) + self.remaining_utxos.text = f"remainingUTXOs :" + self.remaining_value.text = f"remainingValue :" + self.merging_utxos.text = f"mergingUTXOs :" + self.merging_value.text = f"mergingValue :" + self.operation_id_output.value = "" + await self.cancel_merge_utxos(None) + return + await asyncio.sleep(5) async def cancel_merge_utxos(self, button): @@ -658,7 +732,7 @@ async def on_confirm(window, path): self.open_file_dialog( title="Select file...", file_types=["*"], - initial_directory=self.app.paths.data, + initial_directory=self.app.paths.config, multiple_select=False, on_result=on_confirm ) @@ -726,16 +800,19 @@ async def generate_new_address(self, button): async def update_addresses_list(self, address): self.select_address.items.clear() + self.merge_select_address.items.clear() if self.transaction_mode == "transparent": transparent_address = await self.get_transparent_addresses() self.select_address.style.color = YELLOW self.select_address.items = transparent_address + self.merge_select_address.items = transparent_address elif self.transaction_mode == "shielded": shielded_address = await self.get_shielded_addresses() self.select_address.style.color = CYAN self.select_address.items = shielded_address + self.merge_select_address.items = shielded_address if address is not None: self.select_address.value = self.select_address.items.find(address) diff --git a/nodez/wallet/styles/box.py b/nodez/wallet/styles/box.py index 3578cdf..ebd2459 100644 --- a/nodez/wallet/styles/box.py +++ b/nodez/wallet/styles/box.py @@ -139,7 +139,7 @@ class BoxStyle(): merge_result_box = Pack( direction = COLUMN, - background_color = BLACK, + background_color = BLACK ) merge_manage_box = Pack( diff --git a/nodez/wallet/styles/button.py b/nodez/wallet/styles/button.py index abd74d1..4d2a84a 100644 --- a/nodez/wallet/styles/button.py +++ b/nodez/wallet/styles/button.py @@ -96,6 +96,6 @@ class ButtonStyle(): ) merge_button = Pack( - color = WHITE, - background_color = BLACK + color = BLACK, + background_color = YELLOW ) \ No newline at end of file diff --git a/nodez/wallet/styles/input.py b/nodez/wallet/styles/input.py index f2dcba8..fd352a2 100644 --- a/nodez/wallet/styles/input.py +++ b/nodez/wallet/styles/input.py @@ -21,4 +21,15 @@ class InputStyle(): color = WHITE, background_color = BLACK, flex = 1 + ) + + + operation_id_output = Pack( + padding_top = 5, + padding_left = 10, + padding_right = 10, + font_size = 10, + color = WHITE, + background_color = BLACK, + width= 200 ) \ No newline at end of file diff --git a/nodez/wallet/styles/label.py b/nodez/wallet/styles/label.py index c9c281a..747ca61 100644 --- a/nodez/wallet/styles/label.py +++ b/nodez/wallet/styles/label.py @@ -83,10 +83,11 @@ class LabelStyle(): ) - merge_result_txt = Pack( + operation_status_txt = Pack( padding_top = 10, padding_left = 40, padding_right = 40, + padding_bottom = 25, font_size = 12, font_weight = BOLD, text_align = CENTER, @@ -117,4 +118,13 @@ class LabelStyle(): font_weight = BOLD, color = WHITE, background_color = BLACK + ) + + + status_txt = Pack( + padding_left = 5, + padding_bottom = 15, + font_weight = BOLD, + color = WHITE, + background_color = BLACK ) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 66e5543..2371d24 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = ["briefcase"] [tool.briefcase] project_name = "Node-Z" bundle = "com.nodez" -version = "1.0.4" +version = "1.0.5" url = "https://www.getbtcz.com" license.file = "LICENSE" author = "BTCZCommunity"