Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/wallet.cpp
Show First 20 Lines • Show All 4,413 Lines • ▼ Show 20 Lines | if (gArgs.GetBoolArg("-upgradewallet", fFirstRun)) { | ||||
} | } | ||||
walletInstance->SetMaxVersion(nMaxVersion); | walletInstance->SetMaxVersion(nMaxVersion); | ||||
} | } | ||||
// Upgrade to HD if explicit upgrade | // Upgrade to HD if explicit upgrade | ||||
if (gArgs.GetBoolArg("-upgradewallet", false)) { | if (gArgs.GetBoolArg("-upgradewallet", false)) { | ||||
LOCK(walletInstance->cs_wallet); | 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->nWalletVersion; | |||||
if (!walletInstance->CanSupportFeature(FEATURE_HD_SPLIT) && | |||||
max_version >= FEATURE_HD_SPLIT && | |||||
max_version < FEATURE_PRE_SPLIT_KEYPOOL) { | |||||
InitError( | |||||
_("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 nullptr; | |||||
} | |||||
bool hd_upgrade = false; | bool hd_upgrade = false; | ||||
bool split_upgrade = false; | bool split_upgrade = false; | ||||
if (walletInstance->CanSupportFeature(FEATURE_HD) && | if (walletInstance->CanSupportFeature(FEATURE_HD) && | ||||
!walletInstance->IsHDEnabled()) { | !walletInstance->IsHDEnabled()) { | ||||
LogPrintf("Upgrading wallet to HD\n"); | LogPrintf("Upgrading wallet to HD\n"); | ||||
walletInstance->SetMinVersion(FEATURE_HD); | walletInstance->SetMinVersion(FEATURE_HD); | ||||
// generate a new master key | // generate a new master key | ||||
CPubKey masterPubKey = walletInstance->GenerateNewHDMasterKey(); | CPubKey masterPubKey = walletInstance->GenerateNewHDMasterKey(); | ||||
walletInstance->SetHDMasterKey(masterPubKey); | walletInstance->SetHDMasterKey(masterPubKey); | ||||
hd_upgrade = true; | hd_upgrade = true; | ||||
} | } | ||||
// Upgrade to HD chain split if necessary | // Upgrade to HD chain split if necessary | ||||
if (walletInstance->CanSupportFeature(FEATURE_HD_SPLIT)) { | if (walletInstance->CanSupportFeature(FEATURE_HD_SPLIT)) { | ||||
LogPrintf("Upgrading wallet to use HD chain split\n"); | LogPrintf("Upgrading wallet to use HD chain split\n"); | ||||
walletInstance->SetMinVersion(FEATURE_HD_SPLIT); | walletInstance->SetMinVersion(FEATURE_PRE_SPLIT_KEYPOOL); | ||||
split_upgrade = FEATURE_HD_SPLIT > prev_version; | split_upgrade = FEATURE_HD_SPLIT > prev_version; | ||||
} | } | ||||
// Mark all keys currently in the keypool as pre-split | // Mark all keys currently in the keypool as pre-split | ||||
if (split_upgrade) { | if (split_upgrade) { | ||||
walletInstance->MarkPreSplitKeys(); | walletInstance->MarkPreSplitKeys(); | ||||
} | } | ||||
// Regenerate the keypool if upgraded to HD | // Regenerate the keypool if upgraded to HD | ||||
if (hd_upgrade) { | if (hd_upgrade) { | ||||
▲ Show 20 Lines • Show All 392 Lines • Show Last 20 Lines |