X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Finit.cpp;h=2437e3bfdf02641861a464c5fb87801dded0be75;hb=126e51d5d96f8bc2c900df18af5827c279967dcc;hp=1c80723c61a9941bb12dc83032ad27c45b1e0520;hpb=64f815a4a18993c77629234a4d09dd2adfedaec7;p=novacoin.git diff --git a/src/init.cpp b/src/init.cpp index 1c80723..2437e3b 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -31,15 +31,14 @@ CClientUIInterface uiInterface; std::string strWalletFileName; bool fConfChange; unsigned int nNodeLifespan; -unsigned int nMinerSleep; bool fUseFastIndex; -bool fUseFastStakeMiner; bool fUseMemoryLog; enum Checkpoints::CPMode CheckpointsMode; // Ping and address broadcast intervals extern int64_t nPingInterval; extern int64_t nBroadcastInterval; +extern int64_t nReserveBalance; ////////////////////////////////////////////////////////////////////////////// // @@ -86,6 +85,7 @@ void Shutdown(void* parg) if (fFirstThread) { fShutdown = true; + fRequestShutdown = true; nTransactionsUpdated++; // CTxDB().Close(); bitdb.Flush(false); @@ -273,7 +273,7 @@ std::string HelpMessage() " -detachdb " + _("Detach block and address databases. Increases shutdown time (default: 0)") + "\n" + #ifdef DB_LOG_IN_MEMORY - " -memorylog " + _("Use in-memory logging for block index database (default: 1)") + "\n" + + " -memorylog " + _("Use in-memory logging for block index database (default: 1)") + "\n" + #endif " -paytxfee= " + _("Fee per KB to add to transactions you send") + "\n" + @@ -304,6 +304,7 @@ std::string HelpMessage() " -upgradewallet " + _("Upgrade wallet to latest format") + "\n" + " -keypool= " + _("Set key pool size to (default: 100)") + "\n" + " -rescan " + _("Rescan the block chain for missing wallet transactions") + "\n" + + " -zapwallettxes " + _("Clear list of wallet transactions (diagnostic tool; implies -rescan)") + "\n" + " -salvagewallet " + _("Attempt to recover private keys from a corrupt wallet.dat") + "\n" + " -checkblocks= " + _("How many blocks to check at startup (default: 2500, 0 = all)") + "\n" + " -checklevel= " + _("How thorough the block verification is (0-6, default: 1)") + "\n" + @@ -373,10 +374,9 @@ bool AppInit2() // ********************************************************* Step 2: parameter interactions - nNodeLifespan = GetArg("-addrlifespan", 7); + nNodeLifespan = (unsigned int)(GetArg("-addrlifespan", 7)); fUseFastIndex = GetBoolArg("-fastindex", true); fUseMemoryLog = GetBoolArg("-memorylog", true); - nMinerSleep = GetArg("-minersleep", 500); // Ping and address broadcast intervals nPingInterval = max(10 * 60, GetArg("-keepalive", 30 * 60)); @@ -436,10 +436,16 @@ bool AppInit2() SoftSetBoolArg("-rescan", true); } + if (GetBoolArg("-zapwallettxes", false)) { + // -zapwallettx implies a rescan + if (SoftSetBoolArg("-rescan", true)) + printf("AppInit2 : parameter interaction: -zapwallettxes=1 -> setting -rescan=1\n"); + } + // ********************************************************* Step 3: parameter-to-internal-flags // -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency - nScriptCheckThreads = GetArg("-par", 0); + nScriptCheckThreads = (int)(GetArg("-par", 0)); if (nScriptCheckThreads == 0) nScriptCheckThreads = boost::thread::hardware_concurrency(); if (nScriptCheckThreads <= 1) @@ -478,7 +484,7 @@ bool AppInit2() if (mapArgs.count("-timeout")) { - int nNewTimeout = GetArg("-timeout", 5000); + int nNewTimeout = (int)(GetArg("-timeout", 5000)); if (nNewTimeout > 0 && nNewTimeout < 600000) nConnectTimeout = nNewTimeout; } @@ -603,7 +609,7 @@ bool AppInit2() // ********************************************************* Step 6: network initialization - int nSocksVersion = GetArg("-socks", 5); + int nSocksVersion = (int)(GetArg("-socks", 5)); if (nSocksVersion != 4 && nSocksVersion != 5) return InitError(strprintf(_("Unknown -socks proxy version requested: %i"), nSocksVersion)); @@ -731,7 +737,6 @@ bool AppInit2() if (mapArgs.count("-reservebalance")) // ppcoin: reserve balance amount { - int64_t nReserveBalance = 0; if (!ParseMoney(mapArgs["-reservebalance"], nReserveBalance)) { InitError(_("Invalid amount for -reservebalance=")); @@ -766,12 +771,36 @@ bool AppInit2() return false; } - uiInterface.InitMessage(_("Loading block index...")); + printf("Loading block index...\n"); - nStart = GetTimeMillis(); - if (!LoadBlockIndex()) - return InitError(_("Error loading blkindex.dat")); + bool fLoaded = false; + while (!fLoaded) { + std::string strLoadError; + uiInterface.InitMessage(_("Loading block index...")); + + nStart = GetTimeMillis(); + do { + try { + UnloadBlockIndex(); + + if (!LoadBlockIndex()) { + strLoadError = _("Error loading block database"); + break; + } + } catch(std::exception &e) { + (void)e; + strLoadError = _("Error opening block database"); + break; + } + + fLoaded = true; + } while(false); + if (!fLoaded) { + // TODO: suggest reindex here + return InitError(strLoadError); + } + } // as LoadBlockIndex can take several minutes, it's possible the user // requested to kill bitcoin-qt during the last operation. If so, exit. @@ -814,6 +843,19 @@ bool AppInit2() // ********************************************************* Step 8: load wallet + if (GetBoolArg("-zapwallettxes", false)) { + uiInterface.InitMessage(_("Zapping all transactions from wallet...")); + + pwalletMain = new CWallet(strWalletFileName); + DBErrors nZapWalletRet = pwalletMain->ZapWalletTx(); + if (nZapWalletRet != DB_LOAD_OK) { + uiInterface.InitMessage(_("Error loading wallet.dat: Wallet corrupted")); + return false; + } + delete pwalletMain; + pwalletMain = NULL; + } + uiInterface.InitMessage(_("Loading wallet...")); printf("Loading wallet...\n"); nStart = GetTimeMillis(); @@ -844,7 +886,7 @@ bool AppInit2() if (GetBoolArg("-upgradewallet", fFirstRun)) { - int nMaxVersion = GetArg("-upgradewallet", 0); + int nMaxVersion = (int)(GetArg("-upgradewallet", 0)); if (nMaxVersion == 0) // the -upgradewallet without argument case { printf("Performing wallet upgrade to %i\n", FEATURE_LATEST);