From 0ba3b5f6defa005ec44dca4af33646f5094afe9d Mon Sep 17 00:00:00 2001 From: newtonick Date: Fri, 9 Jul 2021 15:53:39 -0400 Subject: [PATCH] Adding a few extra error handling steps in animated psbt scanning --- src/seedsigner/controller.py | 12 ++++++++++-- src/seedsigner/models/blue_wallet.py | 2 +- src/seedsigner/models/sparrow_wallet.py | 16 +++++++++++----- src/seedsigner/models/specter_desktop_wallet.py | 11 ++++++----- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/seedsigner/controller.py b/src/seedsigner/controller.py index 348067fe..ff9ca6f8 100644 --- a/src/seedsigner/controller.py +++ b/src/seedsigner/controller.py @@ -480,11 +480,19 @@ class Controller: if raw_pbst == "nodata": return Path.MAIN_MENU if raw_pbst == "invalid": - self.menu_view.draw_modal(["QR Format Unexpected", "Check Wallet in Settings"], "", "RIGHT to EXIT") + self.menu_view.draw_modal(["QR Format Unexpected", "Check Wallet in Settings"], "", "Right to Exit") + input = self.buttons.wait_for([B.KEY_RIGHT]) + return Path.MAIN_MENU + if raw_pbst == "invalidpsbt": + self.menu_view.draw_modal(["PSBT UR 2.0 Decoding Error", "try again"], "", "Right to Exit") input = self.buttons.wait_for([B.KEY_RIGHT]) return Path.MAIN_MENU self.menu_view.draw_modal(["Parsing PSBT ..."]) - self.wallet.parse_psbt(raw_pbst) + parse_status = self.wallet.parse_psbt(raw_pbst) + if parse_status == False: + self.menu_view.draw_modal(["PSBT Parsing Failed"], "", "Right to Exit") + input = self.buttons.wait_for([B.KEY_RIGHT]) + return Path.MAIN_MENU # show transaction information before sign self.signing_tools_view.display_transaction_information(self.wallet) diff --git a/src/seedsigner/models/blue_wallet.py b/src/seedsigner/models/blue_wallet.py index e7a6bbce..14d1ffa5 100644 --- a/src/seedsigner/models/blue_wallet.py +++ b/src/seedsigner/models/blue_wallet.py @@ -124,7 +124,7 @@ class BlueWallet(Wallet): def set_qr_density(self, density): self.cur_qr_density = density if density == Wallet.QRLOW: - self.qrsize = 70 + self.qrsize = 20 elif density == Wallet.QRMEDIUM: self.qrsize = 100 elif density == Wallet.QRHIGH: diff --git a/src/seedsigner/models/sparrow_wallet.py b/src/seedsigner/models/sparrow_wallet.py index 12f8caa9..2765ad12 100644 --- a/src/seedsigner/models/sparrow_wallet.py +++ b/src/seedsigner/models/sparrow_wallet.py @@ -34,10 +34,12 @@ class SparrowWallet(Wallet): return "Sparrow" def parse_psbt(self, raw_psbt) -> bool: - base64_psbt = a2b_base64(raw_psbt) - self.tx = psbt.PSBT.parse(base64_psbt) - - self._parse_psbt() + try: + base64_psbt = a2b_base64(raw_psbt) + self.tx = psbt.PSBT.parse(base64_psbt) + self._parse_psbt() + except Exception: + return False return True @@ -103,7 +105,11 @@ class SparrowWallet(Wallet): self.qr_data = ["empty"] # get data and percentage - self.ur_decoder.receive_part(data[0]) + decoder_work_check = self.ur_decoder.receive_part(data[0]) + if decoder_work_check == False: + self.qr_data = ["invalidpsbt"] + self.buttons.trigger_override() # something went wrong, invalid QR + return self.percentage_complete = self.ur_decoder.estimated_percent_complete() # checking if all frames has been captured, exit camera processing diff --git a/src/seedsigner/models/specter_desktop_wallet.py b/src/seedsigner/models/specter_desktop_wallet.py index a6cbe58b..9610797b 100644 --- a/src/seedsigner/models/specter_desktop_wallet.py +++ b/src/seedsigner/models/specter_desktop_wallet.py @@ -21,11 +21,12 @@ class SpecterDesktopWallet(Wallet): return "Specter Desktop" def parse_psbt(self, raw_psbt) -> bool: - - base64_psbt = a2b_base64(raw_psbt) - self.tx = psbt.PSBT.parse(base64_psbt) - - self._parse_psbt() + try: + base64_psbt = a2b_base64(raw_psbt) + self.tx = psbt.PSBT.parse(base64_psbt) + self._parse_psbt() + except Exception: + return False return True