Skip to content

Commit 3a9aba2

Browse files
committed
Split SetWalletFlags into Add/LoadWalletFlags
Remove memonly bool and follow typical Add and Load pattern used everywhere else.
1 parent d9cd095 commit 3a9aba2

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

src/wallet/wallet.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,19 +1385,28 @@ bool CWallet::IsWalletFlagSet(uint64_t flag) const
13851385
return (m_wallet_flags & flag);
13861386
}
13871387

1388-
bool CWallet::SetWalletFlags(uint64_t overwriteFlags, bool memonly)
1388+
bool CWallet::LoadWalletFlags(uint64_t flags)
13891389
{
13901390
LOCK(cs_wallet);
1391-
m_wallet_flags = overwriteFlags;
1392-
if (((overwriteFlags & KNOWN_WALLET_FLAGS) >> 32) ^ (overwriteFlags >> 32)) {
1391+
if (((flags & KNOWN_WALLET_FLAGS) >> 32) ^ (flags >> 32)) {
13931392
// contains unknown non-tolerable wallet flags
13941393
return false;
13951394
}
1396-
if (!memonly && !WalletBatch(*database).WriteWalletFlags(m_wallet_flags)) {
1395+
m_wallet_flags = flags;
1396+
1397+
return true;
1398+
}
1399+
1400+
bool CWallet::AddWalletFlags(uint64_t flags)
1401+
{
1402+
LOCK(cs_wallet);
1403+
// We should never be writing unknown onon-tolerable wallet flags
1404+
assert(!(((flags & KNOWN_WALLET_FLAGS) >> 32) ^ (flags >> 32)));
1405+
if (!WalletBatch(*database).WriteWalletFlags(flags)) {
13971406
throw std::runtime_error(std::string(__func__) + ": writing wallet flags failed");
13981407
}
13991408

1400-
return true;
1409+
return LoadWalletFlags(flags);
14011410
}
14021411

14031412
int64_t CWalletTx::GetTxTime() const
@@ -3759,7 +3768,7 @@ std::shared_ptr<CWallet> CWallet::CreateWalletFromFile(interfaces::Chain& chain,
37593768
// ensure this wallet.dat can only be opened by clients supporting HD with chain split and expects no default key
37603769
walletInstance->SetMinVersion(FEATURE_LATEST);
37613770

3762-
walletInstance->SetWalletFlags(wallet_creation_flags, false);
3771+
walletInstance->AddWalletFlags(wallet_creation_flags);
37633772

37643773
// Only create LegacyScriptPubKeyMan when not descriptor wallet
37653774
if (!walletInstance->IsWalletFlagSet(WALLET_FLAG_DESCRIPTORS)) {

src/wallet/wallet.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1174,7 +1174,9 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati
11741174

11751175
/** overwrite all flags by the given uint64_t
11761176
returns false if unknown, non-tolerable flags are present */
1177-
bool SetWalletFlags(uint64_t overwriteFlags, bool memOnly);
1177+
bool AddWalletFlags(uint64_t flags);
1178+
/** Loads the flags into the wallet. (used by LoadWallet) */
1179+
bool LoadWalletFlags(uint64_t flags);
11781180

11791181
/** Determine if we are a legacy wallet */
11801182
bool IsLegacy() const;

src/wallet/walletdb.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
544544
} else if (strType == DBKeys::FLAGS) {
545545
uint64_t flags;
546546
ssValue >> flags;
547-
if (!pwallet->SetWalletFlags(flags, true)) {
547+
if (!pwallet->LoadWalletFlags(flags)) {
548548
strErr = "Error reading wallet database: Unknown non-tolerable wallet flags found";
549549
return false;
550550
}

0 commit comments

Comments
 (0)