From 5f277773017c8c622af42fa9236ed35ceceedbe4 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Thu, 31 Aug 2023 19:38:47 +0200 Subject: [PATCH] qt: trezor firmware checks on xpub and initial setup --- electrum/plugins/trezor/qt.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/electrum/plugins/trezor/qt.py b/electrum/plugins/trezor/qt.py index c32584b14..1285f5de9 100644 --- a/electrum/plugins/trezor/qt.py +++ b/electrum/plugins/trezor/qt.py @@ -14,7 +14,7 @@ from electrum.plugin import hook from electrum.keystore import ScriptTypeNotSupported from electrum.plugins.hw_wallet.qt import QtHandlerBase, QtPluginBase -from electrum.plugins.hw_wallet.plugin import only_hook_if_libraries_available +from electrum.plugins.hw_wallet.plugin import only_hook_if_libraries_available, OutdatedHwFirmwareException from electrum.gui.qt.util import (WindowModalDialog, WWLabel, Buttons, CancelButton, OkButton, CloseButton, PasswordLineEdit, getOpenFileName, ChoiceWidget) @@ -803,6 +803,11 @@ class WCTrezorXPub(WCHWXPub): _name, _info = self.wizard_data['hardware_device'] if xtype not in self.plugin.SUPPORTED_XTYPES: raise ScriptTypeNotSupported(_('This type of script is not supported with {}').format(_info.model_name)) + if not client.is_uptodate(): + msg = (_('Outdated {} firmware for device labelled {}. Please ' + 'download the updated firmware from {}') + .format(_info.model_name, _info.label, self.plugin.firmware_URL)) + raise OutdatedHwFirmwareException(msg) return client.get_xpub(derivation, xtype, True) @@ -810,9 +815,20 @@ class WCTrezorInitMethod(WizardComponent, Logger): def __init__(self, parent, wizard): WizardComponent.__init__(self, parent, wizard, title=_('HW Setup')) Logger.__init__(self) + self.plugin = None def on_ready(self): _name, _info = self.wizard_data['hardware_device'] + self.plugin = self.plugins.get_plugin(_info.plugin_name) + device_id = _info.device.id_ + client = self.plugins.device_manager.client_by_id(device_id, scan_now=False) + if not client.is_uptodate(): + msg = (_('Outdated {} firmware for device labelled {}. Please ' + 'download the updated firmware from {}') + .format(_info.model_name, _info.label, self.plugin.firmware_URL)) + self.error = msg + return + message = _('Choose how you want to initialize your {}.').format(_info.model_name) choices = [ # Must be short as QT doesn't word-wrap radio button text