diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -1413,7 +1413,7 @@ }; /** Upgrade the wallet */ - static bool UpgradeWallet(std::shared_ptr wallet, bool first_run, + static bool UpgradeWallet(std::shared_ptr wallet, bilingual_str &error, std::vector &warnings); diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -4145,8 +4145,10 @@ } } - if (!UpgradeWallet(walletInstance, fFirstRun, error, warnings)) { - return nullptr; + if (gArgs.GetBoolArg("-upgradewallet", false)) { + if (!UpgradeWallet(walletInstance, error, warnings)) { + return nullptr; + } } if (fFirstRun) { @@ -4456,52 +4458,46 @@ } bool CWallet::UpgradeWallet(std::shared_ptr walletInstance, - bool fFirstRun, bilingual_str &error, + bilingual_str &error, std::vector &warnings) { int prev_version = walletInstance->GetVersion(); - if (gArgs.GetBoolArg("-upgradewallet", fFirstRun)) { - int nMaxVersion = gArgs.GetArg("-upgradewallet", 0); - // The -upgradewallet without argument case - if (nMaxVersion == 0) { - walletInstance->WalletLogPrintf("Performing wallet upgrade to %i\n", - FEATURE_LATEST); - nMaxVersion = FEATURE_LATEST; - // permanently upgrade the wallet immediately - walletInstance->SetMinVersion(FEATURE_LATEST); - } else { - walletInstance->WalletLogPrintf( - "Allowing wallet upgrade up to %i\n", nMaxVersion); - } - - if (nMaxVersion < walletInstance->GetVersion()) { - error = _("Cannot downgrade wallet"); - return false; - } + int nMaxVersion = gArgs.GetArg("-upgradewallet", 0); + // The -upgradewallet without argument case + if (nMaxVersion == 0) { + walletInstance->WalletLogPrintf("Performing wallet upgrade to %i\n", + FEATURE_LATEST); + nMaxVersion = FEATURE_LATEST; + // permanently upgrade the wallet immediately + walletInstance->SetMinVersion(FEATURE_LATEST); + } else { + walletInstance->WalletLogPrintf("Allowing wallet upgrade up to %i\n", + nMaxVersion); + } - walletInstance->SetMaxVersion(nMaxVersion); + if (nMaxVersion < walletInstance->GetVersion()) { + error = _("Cannot downgrade wallet"); + return false; } - // Upgrade to HD if explicit upgrade - if (gArgs.GetBoolArg("-upgradewallet", false)) { - LOCK(walletInstance->cs_wallet); - - // Do not upgrade versions to any version between HD_SPLIT and - // FEATURE_PRE_SPLIT_KEYPOOL unless already supporting HD_SPLIT - int max_version = walletInstance->GetVersion(); - if (!walletInstance->CanSupportFeature(FEATURE_HD_SPLIT) && - max_version >= FEATURE_HD_SPLIT && - max_version < FEATURE_PRE_SPLIT_KEYPOOL) { - error = - _("Cannot upgrade a non HD split wallet without upgrading to " + walletInstance->SetMaxVersion(nMaxVersion); + + LOCK(walletInstance->cs_wallet); + + // Do not upgrade versions to any version between HD_SPLIT and + // FEATURE_PRE_SPLIT_KEYPOOL unless already supporting HD_SPLIT + int max_version = walletInstance->GetVersion(); + if (!walletInstance->CanSupportFeature(FEATURE_HD_SPLIT) && + max_version >= FEATURE_HD_SPLIT && + max_version < FEATURE_PRE_SPLIT_KEYPOOL) { + error = _("Cannot upgrade a non HD split wallet without upgrading to " "support pre split keypool. Please use -upgradewallet=200300 " "or -upgradewallet with no version specified."); - return false; - } + return false; + } - for (auto spk_man : walletInstance->GetActiveScriptPubKeyMans()) { - if (!spk_man->Upgrade(prev_version, error)) { - return false; - } + for (auto spk_man : walletInstance->GetActiveScriptPubKeyMans()) { + if (!spk_man->Upgrade(prev_version, error)) { + return false; } }