@ -4025,6 +4025,35 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
walletInstance - > SetMaxVersion ( nMaxVersion ) ;
walletInstance - > SetMaxVersion ( nMaxVersion ) ;
}
}
// Upgrade to HD if explicit upgrade
if ( gArgs . GetBoolArg ( " -upgradewallet " , false ) ) {
LOCK ( walletInstance - > cs_wallet ) ;
bool hd_upgrade = false ;
if ( walletInstance - > CanSupportFeature ( FEATURE_HD ) & & ! walletInstance - > IsHDEnabled ( ) ) {
LogPrintf ( " Upgrading wallet to HD \n " ) ;
walletInstance - > SetMinVersion ( FEATURE_HD ) ;
// generate a new master key
CPubKey masterPubKey = walletInstance - > GenerateNewHDMasterKey ( ) ;
if ( ! walletInstance - > SetHDMasterKey ( masterPubKey ) ) {
throw std : : runtime_error ( std : : string ( __func__ ) + " : Storing master key failed " ) ;
}
hd_upgrade = true ;
}
// Upgrade to HD chain split if necessary
if ( walletInstance - > CanSupportFeature ( FEATURE_HD_SPLIT ) ) {
LogPrintf ( " Upgrading wallet to use HD chain split \n " ) ;
walletInstance - > SetMinVersion ( FEATURE_HD_SPLIT ) ;
}
// Regenerate the keypool if upgraded to HD
if ( hd_upgrade ) {
if ( ! walletInstance - > NewKeyPool ( ) ) {
InitError ( _ ( " Unable to generate keys " ) + = " \n " ) ;
return nullptr ;
}
}
}
if ( fFirstRun )
if ( fFirstRun )
{
{
// ensure this wallet.dat can only be opened by clients supporting HD with chain split and expects no default key
// ensure this wallet.dat can only be opened by clients supporting HD with chain split and expects no default key
@ -4032,7 +4061,7 @@ CWallet* CWallet::CreateWalletFromFile(const std::string& name, const fs::path&
InitError ( strprintf ( _ ( " Error creating %s: You can't create non-HD wallets with this version. " ) , walletFile ) ) ;
InitError ( strprintf ( _ ( " Error creating %s: You can't create non-HD wallets with this version. " ) , walletFile ) ) ;
return nullptr ;
return nullptr ;
}
}
walletInstance - > SetMinVersion ( FEATURE_ NO_DEFAULT_KEY ) ;
walletInstance - > SetMinVersion ( FEATURE_ LATEST ) ;
// generate a new master key
// generate a new master key
CPubKey masterPubKey = walletInstance - > GenerateNewHDMasterKey ( ) ;
CPubKey masterPubKey = walletInstance - > GenerateNewHDMasterKey ( ) ;