Detect network mismatch earlier

This commit is contained in:
kdmukai
2023-08-16 07:50:50 -05:00
parent 3e58e6240b
commit a6dd199e52
2 changed files with 24 additions and 36 deletions
+24 -30
View File
@@ -1921,23 +1921,37 @@ class SeedSignMessageStartView(View):
self.derivation_path = derivation_path
self.message = message
# calculate the actual receive address
addr_format = embit_utils.parse_derivation_path(derivation_path)
if not addr_format["clean_match"]:
raise NotYetImplementedView("Signing messages for custom derivation paths not supported")
# Note: addr_format["network"] can be MAINNET or [TESTNET, REGTEST]
if self.settings.get_value(SettingsConstants.SETTING__NETWORK) not in addr_format["network"]:
from seedsigner.views.view import NetworkMismatchErrorView
self.set_redirect(Destination(NetworkMismatchErrorView, view_args=dict(text=f"Current network setting ({self.settings.get_value_display_name(SettingsConstants.SETTING__NETWORK)}) doesn't match {self.derivation_path}")))
# cleanup. Note: We could leave this in place so the user can resume the
# flow, but for now we avoid complications and keep things simple.
self.controller.resume_main_flow = None
return
data = self.controller.sign_message_data
if not data:
data = {}
self.controller.sign_message_data = data
data["derivation_path"] = derivation_path
data["message"] = message
data["addr_format"] = addr_format
# May be None
self.seed_num = data.get("seed_num")
def run(self):
if self.seed_num is not None:
# We already know which seed we're signing with
return Destination(SeedSignMessageConfirmMessageView, skip_current_view=True)
self.set_redirect(Destination(SeedSignMessageConfirmMessageView, skip_current_view=True))
else:
return Destination(SeedSelectSeedView, view_args=dict(flow=Controller.FLOW__SIGN_MESSAGE), skip_current_view=True)
self.set_redirect(Destination(SeedSelectSeedView, view_args=dict(flow=Controller.FLOW__SIGN_MESSAGE), skip_current_view=True))
@@ -1979,34 +1993,14 @@ class SeedSignMessageConfirmAddressView(View):
def __init__(self):
super().__init__()
data = self.controller.sign_message_data
self.seed_num = data.get("seed_num")
seed = self.controller.storage.seeds[data.get("seed_num")]
self.derivation_path = data.get("derivation_path")
addr_format = data.get("addr_format")
if self.seed_num is None or not self.derivation_path:
raise Exception("Routing error: sign_message_data hasn't been set")
# calculate the actual receive address
seed = self.controller.storage.seeds[self.seed_num]
addr_format = embit_utils.parse_derivation_path(self.derivation_path)
if not addr_format["clean_match"]:
raise Exception("Signing messages for custom derivation paths not supported")
# Note: addr_format["network"] can be MAINNET or [TESTNET, REGTEST]
if self.settings.get_value(SettingsConstants.SETTING__NETWORK) in addr_format["network"]:
# Does nothing for MAINNET, but uses current setting to decide between TESTNET and REGTEST
addr_format["network"] = self.settings.get_value(SettingsConstants.SETTING__NETWORK)
else:
from seedsigner.views.view import NetworkMismatchErrorView
self.set_redirect(Destination(NetworkMismatchErrorView, view_args=dict(text=f"Current network setting ({self.settings.get_value_display_name(SettingsConstants.SETTING__NETWORK)}) doesn't match {self.derivation_path}")))
# cleanup. Note: We could leave this in place so the user can resume the
# flow, but for now we avoid complications and keep things simple.
self.controller.resume_main_flow = None
self.controller.sign_message_data = None
return
xpub = seed.get_xpub(wallet_path=self.derivation_path, network=addr_format["network"])
embit_network = embit_utils.get_embit_network_name(addr_format["network"])
# Current settings will differentiate TESTNET and REGTEST (since derivation path
# alone doesn't specify which one we're using).
xpub = seed.get_xpub(wallet_path=self.derivation_path, network=self.settings.get_value(SettingsConstants.SETTING__NETWORK))
embit_network = embit_utils.get_embit_network_name(self.settings.get_value(SettingsConstants.SETTING__NETWORK))
self.address = embit_utils.get_single_sig_address(xpub=xpub, script_type=addr_format["script_type"], index=addr_format["index"], is_change=addr_format["is_change"], embit_network=embit_network)
-6
View File
@@ -426,12 +426,6 @@ class TestMessageSigningFlows(FlowTest):
FlowStep(MainMenuView, button_data_selection=MainMenuView.SCAN),
FlowStep(scan_views.ScanView, before_run=load_message), # simulate read message QR; ret val is ignored
FlowStep(seed_views.SeedSignMessageStartView, is_redirect=True),
FlowStep(seed_views.SeedSelectSeedView, button_data_selection=seed_views.SeedSelectSeedView.SCAN_SEED),
FlowStep(scan_views.ScanView, before_run=self.load_seed_into_decoder), # simulate read SeedQR; ret val is ignored
FlowStep(seed_views.SeedFinalizeView, button_data_selection=seed_views.SeedFinalizeView.FINALIZE),
FlowStep(seed_views.SeedOptionsView, is_redirect=True),
FlowStep(seed_views.SeedSignMessageConfirmMessageView, before_run=self.inject_mesage_as_paged_message, screen_return_value=0),
FlowStep(seed_views.SeedSignMessageConfirmAddressView, is_redirect=True),
FlowStep(NetworkMismatchErrorView),
FlowStep(settings_views.SettingsEntryUpdateSelectionView),
])