@ -3405,16 +3405,8 @@ std::string CWallet::GetWalletHelpString(bool showDebug)
@@ -3405,16 +3405,8 @@ std::string CWallet::GetWalletHelpString(bool showDebug)
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
std : : vector < CWalletTx > vWtx ;
@ -3424,7 +3416,8 @@ bool CWallet::InitLoadWallet()
@@ -3424,7 +3416,8 @@ bool CWallet::InitLoadWallet()
CWallet * tempWallet = new CWallet ( walletFile ) ;
DBErrors nZapWalletRet = tempWallet - > ZapWalletTx ( vWtx ) ;
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 ;
@ -3439,23 +3432,29 @@ bool CWallet::InitLoadWallet()
@@ -3439,23 +3432,29 @@ bool CWallet::InitLoadWallet()
DBErrors nLoadWalletRet = walletInstance - > LoadWallet ( fFirstRun ) ;
if ( nLoadWalletRet ! = DB_LOAD_OK )
{
if ( nLoadWalletRet = = DB_CORRUPT )
return InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
if ( nLoadWalletRet = = DB_CORRUPT ) {
InitError ( strprintf ( _ ( " Error loading %s: Wallet corrupted " ) , walletFile ) ) ;
return NULL ;
}
else if ( nLoadWalletRet = = DB_NONCRITICAL_ERROR )
{
InitWarning ( strprintf ( _ ( " Error reading %s! All keys read correctly, but transaction data "
" or address book entries might be missing or incorrect. " ) ,
walletFile ) ) ;
}
else if ( nLoadWalletRet = = DB_TOO_NEW )
return InitError ( strprintf ( _ ( " Error loading %s: Wallet requires newer version of %s " ) ,
walletFile , _ ( PACKAGE_NAME ) ) ) ;
else if ( nLoadWalletRet = = DB_TOO_NEW ) {
InitError ( strprintf ( _ ( " Error loading %s: Wallet requires newer version of %s " ) , walletFile , _ ( PACKAGE_NAME ) ) ) ;
return NULL ;
}
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 ) )
@ -3471,7 +3470,8 @@ bool CWallet::InitLoadWallet()
@@ -3471,7 +3470,8 @@ bool CWallet::InitLoadWallet()
LogPrintf ( " Allowing wallet upgrade up to %i \n " , nMaxVersion ) ;
if ( nMaxVersion < walletInstance - > GetVersion ( ) )
{
return InitError ( _ ( " Cannot downgrade wallet " ) ) ;
InitError ( _ ( " Cannot downgrade wallet " ) ) ;
return NULL ;
}
walletInstance - > SetMaxVersion ( nMaxVersion ) ;
}
@ -3488,18 +3488,24 @@ bool CWallet::InitLoadWallet()
@@ -3488,18 +3488,24 @@ bool CWallet::InitLoadWallet()
CPubKey newDefaultKey ;
if ( walletInstance - > GetKeyFromPool ( newDefaultKey ) ) {
walletInstance - > SetDefaultKey ( newDefaultKey ) ;
if ( ! walletInstance - > SetAddressBook ( walletInstance - > vchDefaultKey . GetID ( ) , " " , " receive " ) )
return InitError ( _ ( " Cannot write default address " ) + = " \n " ) ;
if ( ! walletInstance - > SetAddressBook ( walletInstance - > vchDefaultKey . GetID ( ) , " " , " receive " ) ) {
InitError ( _ ( " Cannot write default address " ) + = " \n " ) ;
return NULL ;
}
}
walletInstance - > SetBestChain ( chainActive . GetLocator ( ) ) ;
}
else if ( IsArgSet ( " -usehd " ) ) {
bool useHD = GetBoolArg ( " -usehd " , DEFAULT_USE_HD_WALLET ) ;
if ( walletInstance - > IsHDEnabled ( ) & & ! useHD )
return InitError ( strprintf ( _ ( " Error loading %s: You can't disable HD on a already existing HD wallet " ) , walletFile ) ) ;
if ( ! walletInstance - > IsHDEnabled ( ) & & useHD )
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 disable HD on a already existing HD wallet " ) , walletFile ) ) ;
return NULL ;
}
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 ) ;
@ -3529,8 +3535,10 @@ bool CWallet::InitLoadWallet()
@@ -3529,8 +3535,10 @@ bool CWallet::InitLoadWallet()
while ( block & & block - > pprev & & ( block - > pprev - > nStatus & BLOCK_HAVE_DATA ) & & block - > pprev - > nTx > 0 & & pindexRescan ! = block )
block = block - > pprev ;
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) " )) ;
if ( pindexRescan ! = block ) {
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... " ) ) ;
@ -3575,11 +3583,30 @@ bool CWallet::InitLoadWallet()
@@ -3575,11 +3583,30 @@ bool CWallet::InitLoadWallet()
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 ;
}
std : : atomic < bool > CWallet : : fFlushThreadRunning ( false ) ;
void CWallet : : postInitProcess ( boost : : thread_group & threadGroup )
{
// Add wallet transactions that aren't already in a block to mempool
@ -3587,7 +3614,9 @@ void CWallet::postInitProcess(boost::thread_group& threadGroup)
@@ -3587,7 +3614,9 @@ void CWallet::postInitProcess(boost::thread_group& threadGroup)
ReacceptWalletTransactions ( ) ;
// Run a thread to flush wallet periodically
threadGroup . create_thread ( boost : : bind ( & ThreadFlushWalletDB , boost : : ref ( this - > strWalletFile ) ) ) ;
if ( ! CWallet : : fFlushThreadRunning . exchange ( true ) ) {
threadGroup . create_thread ( ThreadFlushWalletDB ) ;
}
}
bool CWallet : : ParameterInteraction ( )