From b461a3f1c32afd901a40b0bc44256f90e03c19ea Mon Sep 17 00:00:00 2001 From: andreasgriffin Date: Tue, 7 Apr 2026 12:28:19 +0200 Subject: [PATCH 1/2] add mk5 and fix button visibility issue --- README.md | 2 +- bitcoin_safe/gui/qt/step_progress_bar.py | 4 ++-- bitcoin_safe/gui/qt/wizard.py | 16 +--------------- bitcoin_safe/hardware_signers.py | 2 +- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index f199aada..1e8813ed 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ - **Easy Multisig-Wallet Setup** - [Step-by-Step instructions](https://bitcoin-safe.org/en/knowledge/setup-multisig-wallet/) for a secure MultiSig setup with [PDF backup sheets](https://bitcoin-safe.org/en/features/pdf-export/) - [Test transactions](https://bitcoin-safe.org/en/knowledge/setup-multisig-wallet/) ensure that all hardware signers are ready - - Full support for [Coldcard Q](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/coldcard-q/), [Coldcard Mk4](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/coldcard-mk4/), [BitBox02 / BitBox02 Nova](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/bitbox02/), [Foundation Passport](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/passport/), [Jade](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/jade/), [Jade Plus](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/jade-plus/), [Trezor Safe 3 & 5](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/trezor/), [Keystone](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/keystone/), [Ledger Nano S / S Plus / X / Flex](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/ledger/), [Specter DIY / Shield / Shield Lite](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/specter/), [SeedSigner](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/seedsigner/), [Krux](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/krux/), using *QR*, *USB*, and *SD-card* + - Full support for [Coldcard Q](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/coldcard-q/), [Coldcard Mk4](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/coldcard-mk4/), [Coldcard Mk5](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/coldcard-mk5/), [BitBox02 / BitBox02 Nova](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/bitbox02/), [Foundation Passport](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/passport/), [Jade](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/jade/), [Jade Plus](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/jade-plus/), [Trezor Safe 3 & 5](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/trezor/), [Keystone](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/keystone/), [Ledger Nano S / S Plus / X / Flex](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/ledger/), [Specter DIY / Shield / Shield Lite](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/specter/), [SeedSigner](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/seedsigner/), [Krux](https://bitcoin-safe.org/en/knowledge/supported-hardware-signers/krux/), using *QR*, *USB*, and *SD-card* - **Secure**: [Hardware signers only](https://bitcoin-safe.org/en/knowledge/hardware-signer-only/) - [All wallets require hardware signers/wallets](https://bitcoin-safe.org/en/knowledge/hardware-signer-only/) for safe seed storage - Powered by **[BDK](https://github.com/bitcoindevkit/bdk)** diff --git a/bitcoin_safe/gui/qt/step_progress_bar.py b/bitcoin_safe/gui/qt/step_progress_bar.py index 97de49cd..50d8bdd7 100644 --- a/bitcoin_safe/gui/qt/step_progress_bar.py +++ b/bitcoin_safe/gui/qt/step_progress_bar.py @@ -914,10 +914,10 @@ def init_ui(self) -> None: self._layout = QVBoxLayout(self) # Buttons to navigate through steps - next_button = QPushButton("Next Step") + next_button = QPushButton("Next Step", self) next_button.clicked.connect(self.next_index) - prev_button = QPushButton("Previous Step") + prev_button = QPushButton("Previous Step", self) prev_button.clicked.connect(self.prev_index) self._layout.addWidget( diff --git a/bitcoin_safe/gui/qt/wizard.py b/bitcoin_safe/gui/qt/wizard.py index 093a910c..7e067dec 100644 --- a/bitcoin_safe/gui/qt/wizard.py +++ b/bitcoin_safe/gui/qt/wizard.py @@ -291,6 +291,7 @@ def __init__(self, refs: WizardTabInfo, loop_in_thread: LoopInThread) -> None: cancel_text="", parent=refs.container, ) + self.buttonbox.setVisible(False) self.signal_tracker.connect( cast(SignalProtocol[[]], self.refs.qtwalletbase.signals.language_switch), self.updateUi ) @@ -457,21 +458,6 @@ def updateUi(self) -> None: ) ) - # self.button_buybitbox.setText(self.tr("Buy a {name}").format(name="Bitbox02\nBitcoin Only Edition")) - # self.button_buycoldcard.setText(self.tr("Buy a Coldcard Mk4")) - # self.button_buy_q.setText(self.tr("Buy a Coldcard Q")) - # self.button_buyjade.setText(self.tr("Buy a Blockstream Jade")) - # self.label_turn_on.setText( - # html_f( - # self.tr("Buy {n} hardware signers").format(n=self.num_keystores()) - # if self.num_keystores() > 1 - # else self.tr("Buy the hardware signer"), - # add_html_and_body=True, - # p=True, - # size=12, - # ), - # ) - class StickerTheHardware(BaseTab): @staticmethod diff --git a/bitcoin_safe/hardware_signers.py b/bitcoin_safe/hardware_signers.py index 6d2fedc1..e666f3c3 100644 --- a/bitcoin_safe/hardware_signers.py +++ b/bitcoin_safe/hardware_signers.py @@ -130,7 +130,7 @@ def icon_name(self): class HardwareSigners: coldcard = HardwareSigner( "coldcard", - "Coldcard-Mk4", + "Coldcard-Mk4/5", usb_preferred=False, qr_types=[], descriptor_export_types=[DescriptorExportTypes.coldcard], From f23d8598475de6514c3c9c2375f9984c9e1076b5 Mon Sep 17 00:00:00 2001 From: andreasgriffin Date: Sat, 11 Apr 2026 09:34:37 +0200 Subject: [PATCH 2/2] Fix multisig export test filename sanitization --- tests/gui/qt/test_wallet_features.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/gui/qt/test_wallet_features.py b/tests/gui/qt/test_wallet_features.py index 8d0bbf4c..6b23edb4 100644 --- a/tests/gui/qt/test_wallet_features.py +++ b/tests/gui/qt/test_wallet_features.py @@ -56,6 +56,7 @@ from bitcoin_safe.gui.qt.register_multisig import RegisterMultisigInteractionWidget from bitcoin_safe.gui.qt.settings import Settings from bitcoin_safe.hardware_signers import DescriptorQrExportTypes +from bitcoin_safe.util import filename_clean from ...faucet import Faucet from ...helpers import TestConfig @@ -367,8 +368,9 @@ def callback(dialog: RegisterMultisigInteractionWidget) -> None: ) else: # Export to a file (including incomplete extensions). - filename = ( - Path(temp_dir) / f"file_{action.text()}.t" + filename = Path(temp_dir) / filename_clean( + f"file_{action.text()}", + file_extension=".t", ) # check that it also works with incomplete extensions with patch( "bitcoin_safe.descriptor_export_tools.save_file_dialog"