@ -3374,16 +3374,8 @@ std::string CWallet::GetWalletHelpString(bool showDebug)
return strUsage ;
return strUsage ;
}
}
bool CWallet : : InitLoadWallet ( )
CWallet * CWallet : : CreateWalletFromFile ( const std : : string walletFile )
{
{
if ( GetBoolArg ( " -disablewallet " , DEFAULT_DISABLE_WALLET ) ) {
pwalletMain = NULL ;
LogPrintf ( " Wallet disabled! \n " ) ;
return true ;
}
std : : string walletFile = GetArg ( " -wallet " , DEFAULT_WALLET_DAT ) ;
// needed to restore wallet transaction meta data after -zapwallettxes
// needed to restore wallet transaction meta data after -zapwallettxes
std : : vector < CWalletTx > vWtx ;
std : : vector < CWalletTx > vWtx ;
@ -3393,7 +3385,8 @@ bool CWallet::InitLoadWallet()
CWallet * tempWallet = new CWallet ( walletFile ) ;
CWallet * tempWallet = new CWallet ( walletFile ) ;
DBErrors nZapWalletRet = tempWallet - > ZapWalletTx ( vWtx ) ;
DBErrors nZapWalletRet = tempWallet - > ZapWalletTx ( vWtx ) ;
if ( nZapWalletRet ! = DB_LOAD_OK ) {
if ( nZapWalletRet ! = DB_LOAD_OK ) {
return InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
return NULL ;
}
}
delete tempWallet ;
delete tempWallet ;
@ -3408,23 +3401,29 @@ bool CWallet::InitLoadWallet()
DBErrors nLoadWalletRet = walletInstance - > LoadWallet ( fFirstRun ) ;
DBErrors nLoadWalletRet = walletInstance - > LoadWallet ( fFirstRun ) ;
if ( nLoadWalletRet ! = DB_LOAD_OK )
if ( nLoadWalletRet ! = DB_LOAD_OK )
{
{
if ( nLoadWalletRet = = DB_CORRUPT )
if ( nLoadWalletRet = = DB_CORRUPT ) {
return InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
return NULL ;
}
else if ( nLoadWalletRet = = DB_NONCRITICAL_ERROR )
else if ( nLoadWalletRet = = DB_NONCRITICAL_ERROR )
{
{
InitWarning ( strprintf ( _ ( " Error reading %s! All keys read correctly, but transaction data "
InitWarning ( strprintf ( _ ( " Error reading %s! All keys read correctly, but transaction data "
" or address book entries might be missing or incorrect. " ) ,
" or address book entries might be missing or incorrect. " ) ,
walletFile ) ) ;
walletFile ) ) ;
}
}
else if ( nLoadWalletRet = = DB_TOO_NEW )
else if ( nLoadWalletRet = = DB_TOO_NEW ) {
return InitError ( strprintf ( _ ( " Error loading %s: Wallet requires newer version of %s " ) ,
InitError ( strprintf ( _ ( " Error loading %s: Wallet requires newer version of %s " ) , walletFile , _ ( PACKAGE_NAME ) ) ) ;
walletFile , _ ( PACKAGE_NAME ) ) ) ;
return NULL ;
}
else if ( nLoadWalletRet = = DB_NEED_REWRITE )
else if ( nLoadWalletRet = = DB_NEED_REWRITE )
{
{
return InitError ( strprintf ( _ ( " Wallet needed to be rewritten: restart %s to complete " ) , _ ( PACKAGE_NAME ) ) ) ;
InitError ( strprintf ( _ ( " Wallet needed to be rewritten: restart %s to complete " ) , _ ( PACKAGE_NAME ) ) ) ;
return NULL ;
}
else {
InitError ( strprintf ( _ ( " Error loading %s " ) , walletFile ) ) ;
return NULL ;
}
}
else
return InitError ( strprintf ( _ ( " Error loading %s " ) , walletFile ) ) ;
}
}
if ( GetBoolArg ( " -upgradewallet " , fFirstRun ) )
if ( GetBoolArg ( " -upgradewallet " , fFirstRun ) )
@ -3440,7 +3439,8 @@ bool CWallet::InitLoadWallet()
LogPrintf ( " Allowing wallet upgrade up to %i \n " , nMaxVersion ) ;
LogPrintf ( " Allowing wallet upgrade up to %i \n " , nMaxVersion ) ;
if ( nMaxVersion < walletInstance - > GetVersion ( ) )
if ( nMaxVersion < walletInstance - > GetVersion ( ) )
{
{
return InitError ( _ ( " Cannot downgrade wallet " ) ) ;
InitError ( _ ( " Cannot downgrade wallet " ) ) ;
return NULL ;
}
}
walletInstance - > SetMaxVersion ( nMaxVersion ) ;
walletInstance - > SetMaxVersion ( nMaxVersion ) ;
}
}
@ -3457,18 +3457,24 @@ bool CWallet::InitLoadWallet()
CPubKey newDefaultKey ;
CPubKey newDefaultKey ;
if ( walletInstance - > GetKeyFromPool ( newDefaultKey ) ) {
if ( walletInstance - > GetKeyFromPool ( newDefaultKey ) ) {
walletInstance - > SetDefaultKey ( newDefaultKey ) ;
walletInstance - > SetDefaultKey ( newDefaultKey ) ;
if ( ! walletInstance - > SetAddressBook ( walletInstance - > vchDefaultKey . GetID ( ) , " " , " receive " ) )
if ( ! walletInstance - > SetAddressBook ( walletInstance - > vchDefaultKey . GetID ( ) , " " , " receive " ) ) {
return InitError ( _ ( " Cannot write default address " ) + = " \n " ) ;
InitError ( _ ( " Cannot write default address " ) + = " \n " ) ;
return NULL ;
}
}
}
walletInstance - > SetBestChain ( chainActive . GetLocator ( ) ) ;
walletInstance - > SetBestChain ( chainActive . GetLocator ( ) ) ;
}
}
else if ( mapArgs . count ( " -usehd " ) ) {
else if ( mapArgs . count ( " -usehd " ) ) {
bool useHD = GetBoolArg ( " -usehd " , DEFAULT_USE_HD_WALLET ) ;
bool useHD = GetBoolArg ( " -usehd " , DEFAULT_USE_HD_WALLET ) ;
if ( walletInstance - > IsHDEnabled ( ) & & ! useHD )
if ( walletInstance - > IsHDEnabled ( ) & & ! useHD ) {
return InitError ( strprintf ( _ ( " Error loading %s: You can't disable HD on a already existing HD wallet " ) , walletFile ) ) ;
InitError ( strprintf ( _ ( " Error loading %s: You can't disable HD on a already existing HD wallet " ) , walletFile ) ) ;
if ( ! walletInstance - > IsHDEnabled ( ) & & useHD )
return NULL ;
return InitError ( strprintf ( _ ( " Error loading %s: You can't enable HD on a already existing non-HD wallet " ) , walletFile ) ) ;
}
if ( ! walletInstance - > IsHDEnabled ( ) & & useHD ) {
InitError ( strprintf ( _ ( " Error loading %s: You can't enable HD on a already existing non-HD wallet " ) , walletFile ) ) ;
return NULL ;
}
}
}
LogPrintf ( " wallet %15dms \n " , GetTimeMillis ( ) - nStart ) ;
LogPrintf ( " wallet %15dms \n " , GetTimeMillis ( ) - nStart ) ;
@ -3498,8 +3504,10 @@ bool CWallet::InitLoadWallet()
while ( block & & block - > pprev & & ( block - > pprev - > nStatus & BLOCK_HAVE_DATA ) & & block - > pprev - > nTx > 0 & & pindexRescan ! = block )
while ( block & & block - > pprev & & ( block - > pprev - > nStatus & BLOCK_HAVE_DATA ) & & block - > pprev - > nTx > 0 & & pindexRescan ! = block )
block = block - > pprev ;
block = block - > pprev ;
if ( pindexRescan ! = block )
if ( pindexRescan ! = block ) {
return InitError ( _ ( " Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) " )) ;
InitError ( _ ( " Prune: last wallet synchronisation goes beyond pruned data. You need to -reindex (download the whole blockchain again in case of pruned node) " ) ) ;
return NULL ;
}
}
}
uiInterface . InitMessage ( _ ( " Rescanning... " ) ) ;
uiInterface . InitMessage ( _ ( " Rescanning... " ) ) ;
@ -3544,7 +3552,24 @@ bool CWallet::InitLoadWallet()
LogPrintf ( " mapAddressBook.size() = %u \n " , walletInstance - > mapAddressBook . size ( ) ) ;
LogPrintf ( " mapAddressBook.size() = %u \n " , walletInstance - > mapAddressBook . size ( ) ) ;
}
}
pwalletMain = walletInstance ;
return walletInstance ;
}
bool CWallet : : InitLoadWallet ( )
{
if ( GetBoolArg ( " -disablewallet " , DEFAULT_DISABLE_WALLET ) ) {
pwalletMain = NULL ;
LogPrintf ( " Wallet disabled! \n " ) ;
return true ;
}
std : : string walletFile = GetArg ( " -wallet " , DEFAULT_WALLET_DAT ) ;
CWallet * const pwallet = CreateWalletFromFile ( walletFile ) ;
if ( ! pwallet ) {
return false ;
}
pwalletMain = pwallet ;
return true ;
return true ;
}
}