X-Git-Url: https://repo.jachan.dev/VerusCoin.git/blobdiff_plain/7bf37e19d234d15547549ec59635230906d0304f..9ffe371d09de57420942b83ce24448837f270db2:/src/init.cpp diff --git a/src/init.cpp b/src/init.cpp index d127d55d7..54d6634a3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -8,7 +8,7 @@ #endif #include "init.h" - +#include "crypto/common.h" #include "addrman.h" #include "amount.h" #include "checkpoints.h" @@ -47,8 +47,14 @@ #include #include +#include "libsnark/common/profiling.hpp" + using namespace std; +extern void ThreadSendAlert(); + +ZCJoinSplit* pzcashParams = NULL; + #ifdef ENABLE_WALLET CWallet* pwalletMain = NULL; #endif @@ -202,6 +208,8 @@ void Shutdown() delete pwalletMain; pwalletMain = NULL; #endif + delete pzcashParams; + pzcashParams = NULL; ECC_Stop(); LogPrintf("%s: done\n", __func__); } @@ -272,7 +280,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-blocknotify=", _("Execute command when the best block changes (%s in cmd is replaced by block hash)")); strUsage += HelpMessageOpt("-checkblocks=", strprintf(_("How many blocks to check at startup (default: %u, 0 = all)"), 288)); strUsage += HelpMessageOpt("-checklevel=", strprintf(_("How thorough the block verification of -checkblocks is (0-4, default: %u)"), 3)); - strUsage += HelpMessageOpt("-conf=", strprintf(_("Specify configuration file (default: %s)"), "bitcoin.conf")); + strUsage += HelpMessageOpt("-conf=", strprintf(_("Specify configuration file (default: %s)"), "zcash.conf")); if (mode == HMM_BITCOIND) { #if !defined(WIN32) @@ -286,7 +294,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-par=", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"), -(int)boost::thread::hardware_concurrency(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS)); #ifndef WIN32 - strUsage += HelpMessageOpt("-pid=", strprintf(_("Specify pid file (default: %s)"), "bitcoind.pid")); + strUsage += HelpMessageOpt("-pid=", strprintf(_("Specify pid file (default: %s)"), "zcashd.pid")); #endif strUsage += HelpMessageOpt("-prune=", strprintf(_("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. " "Warning: Reverting this setting requires re-downloading the entire blockchain. " @@ -315,7 +323,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-onion=", strprintf(_("Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)"), "-proxy")); strUsage += HelpMessageOpt("-onlynet=", _("Only connect to nodes in network (ipv4, ipv6 or onion)")); strUsage += HelpMessageOpt("-permitbaremultisig", strprintf(_("Relay non-P2SH multisig (default: %u)"), 1)); - strUsage += HelpMessageOpt("-port=", strprintf(_("Listen for connections on (default: %u or testnet: %u)"), 8333, 18333)); + strUsage += HelpMessageOpt("-port=", strprintf(_("Listen for connections on (default: %u or testnet: %u)"), 8233, 18233)); strUsage += HelpMessageOpt("-proxy=", _("Connect through SOCKS5 proxy")); strUsage += HelpMessageOpt("-proxyrandomize", strprintf(_("Randomize credentials for every proxy connection. This enables Tor stream isolation (default: %u)"), 1)); strUsage += HelpMessageOpt("-seednode=", _("Connect to a node to retrieve peer addresses, and disconnect")); @@ -330,7 +338,6 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-whitebind=", _("Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6")); strUsage += HelpMessageOpt("-whitelist=", _("Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times.") + " " + _("Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway")); - #ifdef ENABLE_WALLET strUsage += HelpMessageGroup(_("Wallet options:")); @@ -383,7 +390,7 @@ std::string HelpMessage(HelpMessageMode mode) if (showDebug) { strUsage += HelpMessageOpt("-limitfreerelay=", strprintf("Continuously rate-limit free transactions to *1000 bytes per minute (default: %u)", 15)); - strUsage += HelpMessageOpt("-relaypriority", strprintf("Require high priority for relaying free or low-fee transactions (default: %u)", 1)); + strUsage += HelpMessageOpt("-relaypriority", strprintf("Require high priority for relaying free or low-fee transactions (default: %u)", 0)); strUsage += HelpMessageOpt("-maxsigcachesize=", strprintf("Limit size of signature cache to entries (default: %u)", 50000)); } strUsage += HelpMessageOpt("-minrelaytxfee=", strprintf(_("Fees (in BTC/Kb) smaller than this are considered zero fee for relaying (default: %s)"), FormatMoney(::minRelayTxFee.GetFeePerK()))); @@ -413,11 +420,14 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-rpcbind=", _("Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. This option can be specified multiple times (default: bind to all interfaces)")); strUsage += HelpMessageOpt("-rpcuser=", _("Username for JSON-RPC connections")); strUsage += HelpMessageOpt("-rpcpassword=", _("Password for JSON-RPC connections")); - strUsage += HelpMessageOpt("-rpcport=", strprintf(_("Listen for JSON-RPC connections on (default: %u or testnet: %u)"), 8332, 18332)); + strUsage += HelpMessageOpt("-rpcport=", strprintf(_("Listen for JSON-RPC connections on (default: %u or testnet: %u)"), 8232, 18232)); strUsage += HelpMessageOpt("-rpcallowip=", _("Allow JSON-RPC connections from specified source. Valid for are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times")); strUsage += HelpMessageOpt("-rpcthreads=", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4)); strUsage += HelpMessageOpt("-rpckeepalive", strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1)); + // Disabled until we can lock notes and also tune performance of libsnark which by default uses multiple threads + //strUsage += HelpMessageOpt("-rpcasyncthreads=", strprintf(_("Set the number of threads to service Async RPC calls (default: %d)"), 1)); + strUsage += HelpMessageGroup(_("RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)")); strUsage += HelpMessageOpt("-rpcssl", _("Use OpenSSL (https) for JSON-RPC connections")); strUsage += HelpMessageOpt("-rpcsslcertificatechainfile=", strprintf(_("Server certificate file (default: %s)"), "server.cert")); @@ -443,6 +453,7 @@ std::string HelpMessage(HelpMessageMode mode) std::string LicenseInfo() { return FormatParagraph(strprintf(_("Copyright (C) 2009-%i The Bitcoin Core Developers"), COPYRIGHT_YEAR)) + "\n" + + FormatParagraph(strprintf(_("Copyright (C) 2015-%i The Zcash Developers"), COPYRIGHT_YEAR)) + "\n" + "\n" + FormatParagraph(_("This is experimental software.")) + "\n" + "\n" + @@ -521,6 +532,11 @@ void ThreadImport(std::vector vImportFiles) RenameThread("bitcoin-loadblk"); // -reindex if (fReindex) { +#ifdef ENABLE_WALLET + if (pwalletMain) { + pwalletMain->ClearNoteWitnessCache(); + } +#endif CImportingNow imp; int nFile = 0; while (true) { @@ -591,6 +607,29 @@ bool InitSanityCheck(void) return true; } + +static void ZC_LoadParams() +{ + struct timeval tv_start, tv_end; + float elapsed; + + boost::filesystem::path pk_path = ZC_GetParamsDir() / "beta2-proving.key"; + boost::filesystem::path vk_path = ZC_GetParamsDir() / "beta2-verifying.key"; + + pzcashParams = ZCJoinSplit::Unopened(); + + LogPrintf("Loading verifying key from %s\n", vk_path.string().c_str()); + gettimeofday(&tv_start, 0); + + pzcashParams->loadVerifyingKey(vk_path.string()); + + gettimeofday(&tv_end, 0); + elapsed = float(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/float(1000000); + LogPrintf("Loaded verifying key in %fs seconds.\n", elapsed); + + pzcashParams->setProvingKeyPath(pk_path.string()); +} + /** Initialize bitcoin. * @pre Parameters should be parsed and config file should be read. */ @@ -875,6 +914,11 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log + // Initialize libsodium + if (init_and_check_sodium() == -1) { + return false; + } + // Initialize elliptic curve code ECC_Start(); @@ -930,6 +974,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler); threadGroup.create_thread(boost::bind(&TraceThread, "scheduler", serviceLoop)); + // Initialize Zcash circuit parameters + ZC_LoadParams(); + // These must be disabled for now, they are buggy and we probably don't + // want any of libsnark's profiling in production anyway. + libsnark::inhibit_profiling_info = true; + libsnark::inhibit_profiling_counters = true; + /* Start the RPC server already. It will be started in "warmup" mode * and not really process calls already (but it will signify connections * that the server is there and will be ready later). Warmup mode will @@ -1223,14 +1274,6 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) mempool.ReadFeeEstimates(est_filein); fFeeEstimatesInitialized = true; - // if prune mode, unset NODE_NETWORK and prune block files - if (fPruneMode) { - LogPrintf("Unsetting NODE_NETWORK on prune mode\n"); - nLocalServices &= ~NODE_NETWORK; - if (!fReindex) { - PruneAndFlush(); - } - } // ********************************************************* Step 8: load wallet #ifdef ENABLE_WALLET @@ -1372,7 +1415,21 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) #else // ENABLE_WALLET LogPrintf("No wallet support compiled in!\n"); #endif // !ENABLE_WALLET - // ********************************************************* Step 9: import blocks + + // ********************************************************* Step 9: data directory maintenance + + // if pruning, unset the service bit and perform the initial blockstore prune + // after any wallet rescanning has taken place. + if (fPruneMode) { + LogPrintf("Unsetting NODE_NETWORK on prune mode\n"); + nLocalServices &= ~NODE_NETWORK; + if (!fReindex) { + uiInterface.InitMessage(_("Pruning blockstore...")); + PruneAndFlush(); + } + } + + // ********************************************************* Step 10: import blocks if (mapArgs.count("-blocknotify")) uiInterface.NotifyBlockTip.connect(BlockNotifyCallback); @@ -1396,7 +1453,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) MilliSleep(10); } - // ********************************************************* Step 10: start node + // ********************************************************* Step 11: start node if (!CheckDiskSpace()) return false; @@ -1444,5 +1501,8 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) } #endif + // SENDALERT + threadGroup.create_thread(boost::bind(ThreadSendAlert)); + return !fRequestShutdown; }