@ -4060,6 +4060,14 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
// 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=169900 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 ) & & ! walletInstance - > IsHDEnabled ( ) ) {
if ( walletInstance - > CanSupportFeature ( FEATURE_HD ) & & ! walletInstance - > IsHDEnabled ( ) ) {
@ -4076,7 +4084,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
// 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