Skip to content

Commit 7f318f0

Browse files
committed
gui: Menu action for exporting a watchonly wallet
1 parent 7e4d00b commit 7f318f0

File tree

4 files changed

+20
-0
lines changed

4 files changed

+20
-0
lines changed

src/interfaces/wallet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,9 @@ class Wallet
310310

311311
//! Return pointer to internal wallet class, useful for testing.
312312
virtual wallet::CWallet* wallet() { return nullptr; }
313+
314+
//! Export a watchonly wallet file. See CWallet::ExportWatchOnlyWallet
315+
virtual util::Result<std::string> exportWatchOnlyWallet(const fs::path& destination) = 0;
313316
};
314317

315318
//! Wallet chain client that in addition to having chain client methods for

src/qt/bitcoingui.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,10 @@ void BitcoinGUI::createActions()
371371
m_mask_values_action->setStatusTip(tr("Mask the values in the Overview tab"));
372372
m_mask_values_action->setCheckable(true);
373373

374+
m_export_watchonly_action = new QAction(tr("Export watch-only wallet"), this);
375+
m_export_watchonly_action->setEnabled(false);
376+
m_export_watchonly_action->setStatusTip(tr("Export a watch-only version of the current wallet that can be restored onto another node."));
377+
374378
connect(quitAction, &QAction::triggered, this, &BitcoinGUI::quitRequested);
375379
connect(aboutAction, &QAction::triggered, this, &BitcoinGUI::aboutClicked);
376380
connect(aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
@@ -488,6 +492,11 @@ void BitcoinGUI::createActions()
488492
});
489493
connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::setPrivacy);
490494
connect(m_mask_values_action, &QAction::toggled, this, &BitcoinGUI::enableHistoryAction);
495+
connect(m_export_watchonly_action, &QAction::triggered, [this] {
496+
QString destination = GUIUtil::getSaveFileName(this, tr("Save Watch-only Wallet Export"), QString(), QString(), nullptr);
497+
if (destination.isEmpty()) return;
498+
walletFrame->currentWalletModel()->wallet().exportWatchOnlyWallet(GUIUtil::QStringToPath(destination));
499+
});
491500
}
492501
#endif // ENABLE_WALLET
493502

@@ -511,6 +520,7 @@ void BitcoinGUI::createMenuBar()
511520
file->addSeparator();
512521
file->addAction(backupWalletAction);
513522
file->addAction(m_restore_wallet_action);
523+
file->addAction(m_export_watchonly_action);
514524
file->addSeparator();
515525
file->addAction(openAction);
516526
file->addAction(signMessageAction);
@@ -719,6 +729,7 @@ void BitcoinGUI::setWalletController(WalletController* wallet_controller, bool s
719729
m_restore_wallet_action->setEnabled(true);
720730
m_migrate_wallet_action->setEnabled(true);
721731
m_migrate_wallet_action->setMenu(m_migrate_wallet_menu);
732+
m_export_watchonly_action->setEnabled(true);
722733

723734
GUIUtil::ExceptionSafeConnect(wallet_controller, &WalletController::walletAdded, this, &BitcoinGUI::addWallet);
724735
connect(wallet_controller, &WalletController::walletRemoved, this, &BitcoinGUI::removeWallet);

src/qt/bitcoingui.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ class BitcoinGUI : public QMainWindow
163163
QAction* m_mask_values_action{nullptr};
164164
QAction* m_migrate_wallet_action{nullptr};
165165
QMenu* m_migrate_wallet_menu{nullptr};
166+
QAction* m_export_watchonly_action{nullptr};
166167

167168
QLabel *m_wallet_selector_label = nullptr;
168169
QComboBox* m_wallet_selector = nullptr;

src/wallet/interfaces.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,11 @@ class WalletImpl : public Wallet
538538
}
539539
CWallet* wallet() override { return m_wallet.get(); }
540540

541+
util::Result<std::string> exportWatchOnlyWallet(const fs::path& destination) override {
542+
LOCK(m_wallet->cs_wallet);
543+
return m_wallet->ExportWatchOnlyWallet(destination, m_context);
544+
}
545+
541546
WalletContext& m_context;
542547
std::shared_ptr<CWallet> m_wallet;
543548
};

0 commit comments

Comments
 (0)