From 9230f0dea0e07e28f2b4c59c76742cdd226087ff Mon Sep 17 00:00:00 2001 From: Nick Klockenga Date: Mon, 12 Dec 2022 16:57:03 -0500 Subject: [PATCH 1/4] Skip Seed selection when previously selected after PSBT Scan and remove PSBT Review --- src/seedsigner/controller.py | 9 +++++++-- src/seedsigner/views/psbt_views.py | 16 ++++++---------- src/seedsigner/views/seed_views.py | 21 ++------------------- src/seedsigner/views/view.py | 6 ++++++ 4 files changed, 21 insertions(+), 31 deletions(-) diff --git a/src/seedsigner/controller.py b/src/seedsigner/controller.py index 7adb6457..ae2874b7 100644 --- a/src/seedsigner/controller.py +++ b/src/seedsigner/controller.py @@ -133,8 +133,7 @@ class Controller(Singleton): controller.microsd.start_detection() # Store one working psbt in memory - controller.psbt = None - controller.psbt_parser = None + controller.clear_psbt_data() # Configure the Renderer Renderer.configure_instance() @@ -185,6 +184,12 @@ class Controller(Singleton): self.back_stack = BackStack() + def clear_psbt_data(self): + self.psbt = None + self.psbt_parser = None + self.psbt_seed = None + + def start(self) -> None: from .views import MainMenuView, BackStackView from .views.screensaver import OpeningSplashScreen diff --git a/src/seedsigner/views/psbt_views.py b/src/seedsigner/views/psbt_views.py index 613a9052..f6c6cb85 100644 --- a/src/seedsigner/views/psbt_views.py +++ b/src/seedsigner/views/psbt_views.py @@ -49,6 +49,11 @@ class PSBTSelectSeedView(View): button_data.append(TYPE_12WORD) button_data.append(TYPE_24WORD) + if self.controller.psbt_seed: + if PSBTParser.has_matching_input_fingerprint(psbt=self.controller.psbt, seed=self.controller.psbt_seed, network=self.settings.get_value(SettingsConstants.SETTING__NETWORK)): + # skip the seed prompt if a seed was previous selected and has matching input fingerprint + return Destination(PSBTOverviewView) + selected_menu_num = ButtonListScreen( title="Select Signer", is_button_text_centered=False, @@ -143,6 +148,7 @@ class PSBTOverviewView(View): selected_menu_num = screen.display() if selected_menu_num == RET_CODE__BACK_BUTTON: + self.controller.psbt_seed = None return Destination(BackStackView) # expecting p2sh (legacy multisig) and p2pkh to have no policy set @@ -446,11 +452,6 @@ class PSBTAddressVerificationFailedView(View): show_back_button=False, ).display() - # Clear out the bad PSBT - self.controller.psbt = None - self.controller.psbt_parser = None - self.controller.psbt_seed = None - return Destination(MainMenuView, clear_history=True) @@ -501,11 +502,6 @@ class PSBTSignedQRDisplayView(View): ) QRDisplayScreen(qr_encoder=qr_encoder).display() - # We're done with this PSBT. Remove all related data - self.controller.psbt = None - self.controller.psbt_parser = None - self.controller.psbt_seed = None - return Destination(MainMenuView, clear_history=True) diff --git a/src/seedsigner/views/seed_views.py b/src/seedsigner/views/seed_views.py index c935ee7b..34c8e4f3 100644 --- a/src/seedsigner/views/seed_views.py +++ b/src/seedsigner/views/seed_views.py @@ -346,7 +346,6 @@ class SeedOptionsView(View): from seedsigner.views.psbt_views import PSBTOverviewView SCAN_PSBT = ("Scan PSBT", FontAwesomeIconConstants.QRCODE) - REVIEW_PSBT = "Review PSBT" VERIFY_ADDRESS = "Verify Addr" EXPORT_XPUB = "Export Xpub" EXPLORER = "Address Explorer" @@ -372,20 +371,7 @@ class SeedOptionsView(View): VERIFY_ADDRESS += f" {addr}" button_data.append(VERIFY_ADDRESS) - if self.controller.psbt: - if PSBTParser.has_matching_input_fingerprint(self.controller.psbt, self.seed, network=self.settings.get_value(SettingsConstants.SETTING__NETWORK)): - if self.controller.resume_main_flow and self.controller.resume_main_flow == Controller.FLOW__PSBT: - # Re-route us directly back to the start of the PSBT flow - self.controller.resume_main_flow = None - self.controller.psbt_seed = self.seed - return Destination(PSBTOverviewView, skip_current_view=True) - else: - # This seed does not seem to be a signer for this PSBT - # TODO: How sure are we? Should disable this entirely if we're 100% sure? - REVIEW_PSBT += " (?)" - button_data.append(REVIEW_PSBT) - else: - button_data.append(SCAN_PSBT) + button_data.append(SCAN_PSBT) if self.settings.get_value(SettingsConstants.SETTING__XPUB_EXPORT) == SettingsConstants.OPTION__ENABLED: button_data.append(EXPORT_XPUB) @@ -408,12 +394,9 @@ class SeedOptionsView(View): # Force BACK to always return to the Main Menu return Destination(MainMenuView) - if button_data[selected_menu_num] == REVIEW_PSBT: - self.controller.psbt_seed = self.controller.get_seed(self.seed_num) - return Destination(PSBTOverviewView) - if button_data[selected_menu_num] == SCAN_PSBT: from seedsigner.views.scan_views import ScanView + self.controller.psbt_seed = self.controller.get_seed(self.seed_num) return Destination(ScanView) elif button_data[selected_menu_num] == VERIFY_ADDRESS: diff --git a/src/seedsigner/views/view.py b/src/seedsigner/views/view.py index 50b1c40a..9e3f2590 100644 --- a/src/seedsigner/views/view.py +++ b/src/seedsigner/views/view.py @@ -121,6 +121,12 @@ class Destination: # ######################################################################################### class MainMenuView(View): + def __init__(self): + super().__init__() + # always clear psbt state when on Main Menu + self.controller.clear_psbt_data() + + def run(self): from .seed_views import SeedsMenuView from .settings_views import SettingsMenuView From 8c7cf0f11250dc8593bf9a85b990b627ae0657de Mon Sep 17 00:00:00 2001 From: Nick Klockenga Date: Wed, 14 Dec 2022 15:33:00 -0500 Subject: [PATCH 2/4] moving all temp var wiping to controller and adding some additional comments --- src/seedsigner/controller.py | 18 ++++++------------ src/seedsigner/views/psbt_views.py | 4 ++++ src/seedsigner/views/view.py | 6 ------ 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/seedsigner/controller.py b/src/seedsigner/controller.py index ae2874b7..fa045c7d 100644 --- a/src/seedsigner/controller.py +++ b/src/seedsigner/controller.py @@ -133,7 +133,8 @@ class Controller(Singleton): controller.microsd.start_detection() # Store one working psbt in memory - controller.clear_psbt_data() + controller.psbt = None + controller.psbt_parser = None # Configure the Renderer Renderer.configure_instance() @@ -184,12 +185,6 @@ class Controller(Singleton): self.back_stack = BackStack() - def clear_psbt_data(self): - self.psbt = None - self.psbt_parser = None - self.psbt_seed = None - - def start(self) -> None: from .views import MainMenuView, BackStackView from .views.screensaver import OpeningSplashScreen @@ -230,15 +225,14 @@ class Controller(Singleton): next_destination = Destination(MainMenuView) if next_destination.View_cls == MainMenuView: - # Home always wipes the back_stack - self.clear_back_stack() - - # Clear other temp vars + # Home always wipes the back_stack/state of temp vars self.resume_main_flow = None self.multisig_wallet_descriptor = None self.unverified_address = None self.address_explorer_data = None - + self.psbt = None + self.psbt_parser = None + self.psbt_seed = None print(f"back_stack: {self.back_stack}") diff --git a/src/seedsigner/views/psbt_views.py b/src/seedsigner/views/psbt_views.py index f6c6cb85..a725c612 100644 --- a/src/seedsigner/views/psbt_views.py +++ b/src/seedsigner/views/psbt_views.py @@ -452,6 +452,8 @@ class PSBTAddressVerificationFailedView(View): show_back_button=False, ).display() + # We're done with this PSBT. Route back to MainMenuView which always + # clears all ephemeral data (except in-memory seeds). return Destination(MainMenuView, clear_history=True) @@ -502,6 +504,8 @@ class PSBTSignedQRDisplayView(View): ) QRDisplayScreen(qr_encoder=qr_encoder).display() + # We're done with this PSBT. Route back to MainMenuView which always + # clears all ephemeral data (except in-memory seeds). return Destination(MainMenuView, clear_history=True) diff --git a/src/seedsigner/views/view.py b/src/seedsigner/views/view.py index 9e3f2590..50b1c40a 100644 --- a/src/seedsigner/views/view.py +++ b/src/seedsigner/views/view.py @@ -121,12 +121,6 @@ class Destination: # ######################################################################################### class MainMenuView(View): - def __init__(self): - super().__init__() - # always clear psbt state when on Main Menu - self.controller.clear_psbt_data() - - def run(self): from .seed_views import SeedsMenuView from .settings_views import SettingsMenuView From 293e3de34d0e6e896c7746200ef0ee1e491fe851 Mon Sep 17 00:00:00 2001 From: Nick Klockenga Date: Wed, 14 Dec 2022 15:34:44 -0500 Subject: [PATCH 3/4] add clear_back_stack back --- src/seedsigner/controller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/seedsigner/controller.py b/src/seedsigner/controller.py index fa045c7d..7d6e13c6 100644 --- a/src/seedsigner/controller.py +++ b/src/seedsigner/controller.py @@ -225,6 +225,9 @@ class Controller(Singleton): next_destination = Destination(MainMenuView) if next_destination.View_cls == MainMenuView: + # Home always wipes the back_stack + self.clear_back_stack() + # Home always wipes the back_stack/state of temp vars self.resume_main_flow = None self.multisig_wallet_descriptor = None From 118052fb4600011180d740b3d4e9ede131ac5899 Mon Sep 17 00:00:00 2001 From: Nick Klockenga Date: Wed, 14 Dec 2022 15:35:11 -0500 Subject: [PATCH 4/4] typo --- src/seedsigner/controller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/seedsigner/controller.py b/src/seedsigner/controller.py index 7d6e13c6..19b40935 100644 --- a/src/seedsigner/controller.py +++ b/src/seedsigner/controller.py @@ -226,7 +226,7 @@ class Controller(Singleton): if next_destination.View_cls == MainMenuView: # Home always wipes the back_stack - self.clear_back_stack() + self.clear_back_stack() # Home always wipes the back_stack/state of temp vars self.resume_main_flow = None