Skip to content

Commit

Permalink
Split SetWalletFlags into Add/LoadWalletFlags
Browse files Browse the repository at this point in the history
Remove memonly bool and follow typical Add and Load pattern used
everywhere else.
  • Loading branch information
achow101 committed Jun 22, 2020
1 parent d9cd095 commit 3a9aba2
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 8 deletions.
21 changes: 15 additions & 6 deletions src/wallet/wallet.cpp
Expand Up @@ -1385,19 +1385,28 @@ bool CWallet::IsWalletFlagSet(uint64_t flag) const
return (m_wallet_flags & flag);
}

bool CWallet::SetWalletFlags(uint64_t overwriteFlags, bool memonly)
bool CWallet::LoadWalletFlags(uint64_t flags)
{
LOCK(cs_wallet);
m_wallet_flags = overwriteFlags;
if (((overwriteFlags & KNOWN_WALLET_FLAGS) >> 32) ^ (overwriteFlags >> 32)) {
if (((flags & KNOWN_WALLET_FLAGS) >> 32) ^ (flags >> 32)) {
// contains unknown non-tolerable wallet flags
return false;
}
if (!memonly && !WalletBatch(*database).WriteWalletFlags(m_wallet_flags)) {
m_wallet_flags = flags;

return true;
}

bool CWallet::AddWalletFlags(uint64_t flags)
{
LOCK(cs_wallet);
// We should never be writing unknown onon-tolerable wallet flags
assert(!(((flags & KNOWN_WALLET_FLAGS) >> 32) ^ (flags >> 32)));
if (!WalletBatch(*database).WriteWalletFlags(flags)) {
throw std::runtime_error(std::string(__func__) + ": writing wallet flags failed");
}

return true;
return LoadWalletFlags(flags);
}

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

walletInstance->SetWalletFlags(wallet_creation_flags, false);
walletInstance->AddWalletFlags(wallet_creation_flags);

// Only create LegacyScriptPubKeyMan when not descriptor wallet
if (!walletInstance->IsWalletFlagSet(WALLET_FLAG_DESCRIPTORS)) {
Expand Down
4 changes: 3 additions & 1 deletion src/wallet/wallet.h
Expand Up @@ -1174,7 +1174,9 @@ class CWallet final : public WalletStorage, public interfaces::Chain::Notificati

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

/** Determine if we are a legacy wallet */
bool IsLegacy() const;
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/walletdb.cpp
Expand Up @@ -544,7 +544,7 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
} else if (strType == DBKeys::FLAGS) {
uint64_t flags;
ssValue >> flags;
if (!pwallet->SetWalletFlags(flags, true)) {
if (!pwallet->LoadWalletFlags(flags)) {
strErr = "Error reading wallet database: Unknown non-tolerable wallet flags found";
return false;
}
Expand Down

0 comments on commit 3a9aba2

Please sign in to comment.