Skip to content

Commit ce24a94

Browse files
committed
Add IsLegacy to CWallet so that the GUI knows whether to show watchonly
1 parent 1cb42b2 commit ce24a94

File tree

7 files changed

+34
-11
lines changed

7 files changed

+34
-11
lines changed

src/interfaces/wallet.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ class WalletImpl : public Wallet
464464
{
465465
RemoveWallet(m_wallet);
466466
}
467+
bool isLegacy() override { return m_wallet->IsLegacy(); }
467468
std::unique_ptr<Handler> handleUnload(UnloadFn fn) override
468469
{
469470
return MakeHandler(m_wallet->NotifyUnload.connect(fn));

src/interfaces/wallet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,9 @@ class Wallet
266266
// Remove wallet.
267267
virtual void remove() = 0;
268268

269+
//! Return whether is a legacy wallet
270+
virtual bool isLegacy() = 0;
271+
269272
//! Register handler for unload message.
270273
using UnloadFn = std::function<void()>;
271274
virtual std::unique_ptr<Handler> handleUnload(UnloadFn fn) = 0;

src/qt/overviewpage.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,27 @@ void OverviewPage::setBalance(const interfaces::WalletBalances& balances)
161161
{
162162
int unit = walletModel->getOptionsModel()->getDisplayUnit();
163163
m_balances = balances;
164-
if (walletModel->wallet().privateKeysDisabled()) {
165-
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance, false, BitcoinUnits::separatorAlways));
166-
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_watch_only_balance, false, BitcoinUnits::separatorAlways));
167-
ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
168-
ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance + balances.unconfirmed_watch_only_balance + balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
164+
if (walletModel->wallet().isLegacy()) {
165+
if (walletModel->wallet().privateKeysDisabled()) {
166+
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance, false, BitcoinUnits::separatorAlways));
167+
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_watch_only_balance, false, BitcoinUnits::separatorAlways));
168+
ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
169+
ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance + balances.unconfirmed_watch_only_balance + balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
170+
} else {
171+
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balances.balance, false, BitcoinUnits::separatorAlways));
172+
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_balance, false, BitcoinUnits::separatorAlways));
173+
ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_balance, false, BitcoinUnits::separatorAlways));
174+
ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.balance + balances.unconfirmed_balance + balances.immature_balance, false, BitcoinUnits::separatorAlways));
175+
ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance, false, BitcoinUnits::separatorAlways));
176+
ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_watch_only_balance, false, BitcoinUnits::separatorAlways));
177+
ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
178+
ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance + balances.unconfirmed_watch_only_balance + balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
179+
}
169180
} else {
170181
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balances.balance, false, BitcoinUnits::separatorAlways));
171182
ui->labelUnconfirmed->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_balance, false, BitcoinUnits::separatorAlways));
172183
ui->labelImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_balance, false, BitcoinUnits::separatorAlways));
173184
ui->labelTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.balance + balances.unconfirmed_balance + balances.immature_balance, false, BitcoinUnits::separatorAlways));
174-
ui->labelWatchAvailable->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance, false, BitcoinUnits::separatorAlways));
175-
ui->labelWatchPending->setText(BitcoinUnits::formatWithUnit(unit, balances.unconfirmed_watch_only_balance, false, BitcoinUnits::separatorAlways));
176-
ui->labelWatchImmature->setText(BitcoinUnits::formatWithUnit(unit, balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
177-
ui->labelWatchTotal->setText(BitcoinUnits::formatWithUnit(unit, balances.watch_only_balance + balances.unconfirmed_watch_only_balance + balances.immature_watch_only_balance, false, BitcoinUnits::separatorAlways));
178185
}
179186
// only show immature (newly mined) balance if it's non-zero, so as not to complicate things
180187
// for the non-mining users

src/wallet/rpcwallet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1851,7 +1851,7 @@ static UniValue keypoolrefill(const JSONRPCRequest& request)
18511851
},
18521852
}.Check(request);
18531853

1854-
if (pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) {
1854+
if (pwallet->IsLegacy() && pwallet->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) {
18551855
throw JSONRPCError(RPC_WALLET_ERROR, "Error: Private keys are disabled for this wallet");
18561856
}
18571857

src/wallet/wallet.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4412,3 +4412,12 @@ void CWallet::SetActiveScriptPubKeyMan(uint256 id, OutputType type, bool interna
44124412
}
44134413
NotifyCanGetAddressesChanged();
44144414
}
4415+
4416+
bool CWallet::IsLegacy() const
4417+
{
4418+
if (m_internal_spk_managers.count(OutputType::LEGACY) == 0) {
4419+
return false;
4420+
}
4421+
auto spk_man = dynamic_cast<LegacyScriptPubKeyMan*>(m_internal_spk_managers.at(OutputType::LEGACY));
4422+
return spk_man != nullptr;
4423+
}

src/wallet/wallet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,9 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati
11651165
returns false if unknown, non-tolerable flags are present */
11661166
bool SetWalletFlags(uint64_t overwriteFlags, bool memOnly);
11671167

1168+
/** Determine if we are a legacy wallet */
1169+
bool IsLegacy() const;
1170+
11681171
/** Returns a bracketed wallet name for displaying in logs, will return [default wallet] if the wallet has no name */
11691172
const std::string GetDisplayName() const override {
11701173
std::string wallet_name = GetName().length() == 0 ? "default wallet" : GetName();

src/wallet/walletdb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ DBErrors WalletBatch::LoadWallet(CWallet* pwallet)
699699
wss.nKeys, wss.nCKeys, wss.nKeyMeta, wss.nKeys + wss.nCKeys, wss.m_unknown_records);
700700

701701
// nTimeFirstKey is only reliable if all keys have metadata
702-
if ((wss.nKeys + wss.nCKeys + wss.nWatchKeys) != wss.nKeyMeta) {
702+
if (pwallet->IsLegacy() && (wss.nKeys + wss.nCKeys + wss.nWatchKeys) != wss.nKeyMeta) {
703703
auto spk_man = pwallet->GetOrCreateLegacyScriptPubKeyMan();
704704
if (spk_man) {
705705
LOCK(spk_man->cs_KeyStore);

0 commit comments

Comments
 (0)