|
|
@ -690,13 +690,13 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if (!SetupNetworking())
|
|
|
|
if (!SetupNetworking())
|
|
|
|
return InitError("Error: Initializing networking failed");
|
|
|
|
return InitError("Initializing networking failed");
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef WIN32
|
|
|
|
#ifndef WIN32
|
|
|
|
if (GetBoolArg("-sysperms", false)) {
|
|
|
|
if (GetBoolArg("-sysperms", false)) {
|
|
|
|
#ifdef ENABLE_WALLET
|
|
|
|
#ifdef ENABLE_WALLET
|
|
|
|
if (!GetBoolArg("-disablewallet", false))
|
|
|
|
if (!GetBoolArg("-disablewallet", false))
|
|
|
|
return InitError("Error: -sysperms is not allowed in combination with enabled wallet functionality");
|
|
|
|
return InitError("-sysperms is not allowed in combination with enabled wallet functionality");
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
umask(077);
|
|
|
|
umask(077);
|
|
|
@ -826,16 +826,16 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
|
|
|
|
|
|
|
|
// Check for -debugnet
|
|
|
|
// Check for -debugnet
|
|
|
|
if (GetBoolArg("-debugnet", false))
|
|
|
|
if (GetBoolArg("-debugnet", false))
|
|
|
|
InitWarning(_("Warning: Unsupported argument -debugnet ignored, use -debug=net."));
|
|
|
|
InitWarning(_("Unsupported argument -debugnet ignored, use -debug=net."));
|
|
|
|
// Check for -socks - as this is a privacy risk to continue, exit here
|
|
|
|
// Check for -socks - as this is a privacy risk to continue, exit here
|
|
|
|
if (mapArgs.count("-socks"))
|
|
|
|
if (mapArgs.count("-socks"))
|
|
|
|
return InitError(_("Error: Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported."));
|
|
|
|
return InitError(_("Unsupported argument -socks found. Setting SOCKS version isn't possible anymore, only SOCKS5 proxies are supported."));
|
|
|
|
// Check for -tor - as this is a privacy risk to continue, exit here
|
|
|
|
// Check for -tor - as this is a privacy risk to continue, exit here
|
|
|
|
if (GetBoolArg("-tor", false))
|
|
|
|
if (GetBoolArg("-tor", false))
|
|
|
|
return InitError(_("Error: Unsupported argument -tor found, use -onion."));
|
|
|
|
return InitError(_("Unsupported argument -tor found, use -onion."));
|
|
|
|
|
|
|
|
|
|
|
|
if (GetBoolArg("-benchmark", false))
|
|
|
|
if (GetBoolArg("-benchmark", false))
|
|
|
|
InitWarning(_("Warning: Unsupported argument -benchmark ignored, use -debug=bench."));
|
|
|
|
InitWarning(_("Unsupported argument -benchmark ignored, use -debug=bench."));
|
|
|
|
|
|
|
|
|
|
|
|
// Checkmempool and checkblockindex default to true in regtest mode
|
|
|
|
// Checkmempool and checkblockindex default to true in regtest mode
|
|
|
|
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
|
|
|
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
|
|
@ -846,7 +846,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
int64_t nMempoolSizeLimit = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
|
|
|
|
int64_t nMempoolSizeLimit = GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000;
|
|
|
|
int64_t nMempoolDescendantSizeLimit = GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT) * 1000;
|
|
|
|
int64_t nMempoolDescendantSizeLimit = GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT) * 1000;
|
|
|
|
if (nMempoolSizeLimit < 0 || nMempoolSizeLimit < nMempoolDescendantSizeLimit * 40)
|
|
|
|
if (nMempoolSizeLimit < 0 || nMempoolSizeLimit < nMempoolDescendantSizeLimit * 40)
|
|
|
|
return InitError(strprintf(_("Error: -maxmempool must be at least %d MB"), GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT) / 25));
|
|
|
|
return InitError(strprintf(_("-maxmempool must be at least %d MB"), GetArg("-limitdescendantsize", DEFAULT_DESCENDANT_SIZE_LIMIT) / 25));
|
|
|
|
|
|
|
|
|
|
|
|
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
|
|
|
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
|
|
|
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
|
|
|
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
|
|
@ -915,7 +915,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
if (!ParseMoney(mapArgs["-paytxfee"], nFeePerK))
|
|
|
|
if (!ParseMoney(mapArgs["-paytxfee"], nFeePerK))
|
|
|
|
return InitError(strprintf(_("Invalid amount for -paytxfee=<amount>: '%s'"), mapArgs["-paytxfee"]));
|
|
|
|
return InitError(strprintf(_("Invalid amount for -paytxfee=<amount>: '%s'"), mapArgs["-paytxfee"]));
|
|
|
|
if (nFeePerK > nHighTransactionFeeWarning)
|
|
|
|
if (nFeePerK > nHighTransactionFeeWarning)
|
|
|
|
InitWarning(_("Warning: -paytxfee is set very high! This is the transaction fee you will pay if you send a transaction."));
|
|
|
|
InitWarning(_("-paytxfee is set very high! This is the transaction fee you will pay if you send a transaction."));
|
|
|
|
payTxFee = CFeeRate(nFeePerK, 1000);
|
|
|
|
payTxFee = CFeeRate(nFeePerK, 1000);
|
|
|
|
if (payTxFee < ::minRelayTxFee)
|
|
|
|
if (payTxFee < ::minRelayTxFee)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -929,7 +929,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
if (!ParseMoney(mapArgs["-maxtxfee"], nMaxFee))
|
|
|
|
if (!ParseMoney(mapArgs["-maxtxfee"], nMaxFee))
|
|
|
|
return InitError(strprintf(_("Invalid amount for -maxtxfee=<amount>: '%s'"), mapArgs["-maptxfee"]));
|
|
|
|
return InitError(strprintf(_("Invalid amount for -maxtxfee=<amount>: '%s'"), mapArgs["-maptxfee"]));
|
|
|
|
if (nMaxFee > nHighTransactionMaxFeeWarning)
|
|
|
|
if (nMaxFee > nHighTransactionMaxFeeWarning)
|
|
|
|
InitWarning(_("Warning: -maxtxfee is set very high! Fees this large could be paid on a single transaction."));
|
|
|
|
InitWarning(_("-maxtxfee is set very high! Fees this large could be paid on a single transaction."));
|
|
|
|
maxTxFee = nMaxFee;
|
|
|
|
maxTxFee = nMaxFee;
|
|
|
|
if (CFeeRate(maxTxFee, 1000) < ::minRelayTxFee)
|
|
|
|
if (CFeeRate(maxTxFee, 1000) < ::minRelayTxFee)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1056,12 +1056,12 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
BOOST_FOREACH(string cmt, mapMultiArgs["-uacomment"])
|
|
|
|
BOOST_FOREACH(string cmt, mapMultiArgs["-uacomment"])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
|
|
|
|
if (cmt != SanitizeString(cmt, SAFE_CHARS_UA_COMMENT))
|
|
|
|
return InitError(strprintf("User Agent comment (%s) contains unsafe characters.", cmt));
|
|
|
|
return InitError(strprintf(_("User Agent comment (%s) contains unsafe characters."), cmt));
|
|
|
|
uacomments.push_back(SanitizeString(cmt, SAFE_CHARS_UA_COMMENT));
|
|
|
|
uacomments.push_back(SanitizeString(cmt, SAFE_CHARS_UA_COMMENT));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strSubVersion = FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, uacomments);
|
|
|
|
strSubVersion = FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, uacomments);
|
|
|
|
if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) {
|
|
|
|
if (strSubVersion.size() > MAX_SUBVERSION_LENGTH) {
|
|
|
|
return InitError(strprintf("Total length of network version string %i exceeds maximum of %i characters. Reduce the number and/or size of uacomments.",
|
|
|
|
return InitError(strprintf(_("Total length of network version string (%i) exceeds maximum length (%i). Reduce the number or size of uacomments."),
|
|
|
|
strSubVersion.size(), MAX_SUBVERSION_LENGTH));
|
|
|
|
strSubVersion.size(), MAX_SUBVERSION_LENGTH));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1382,9 +1382,8 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
|
|
|
strErrors << _("Error loading wallet.dat: Wallet corrupted") << "\n";
|
|
|
|
strErrors << _("Error loading wallet.dat: Wallet corrupted") << "\n";
|
|
|
|
else if (nLoadWalletRet == DB_NONCRITICAL_ERROR)
|
|
|
|
else if (nLoadWalletRet == DB_NONCRITICAL_ERROR)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
string msg(_("Warning: error reading wallet.dat! All keys read correctly, but transaction data"
|
|
|
|
InitWarning(_("Error reading wallet.dat! 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."));
|
|
|
|
InitWarning(msg);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (nLoadWalletRet == DB_TOO_NEW)
|
|
|
|
else if (nLoadWalletRet == DB_TOO_NEW)
|
|
|
|
strErrors << _("Error loading wallet.dat: Wallet requires newer version of Bitcoin Core") << "\n";
|
|
|
|
strErrors << _("Error loading wallet.dat: Wallet requires newer version of Bitcoin Core") << "\n";
|
|
|
|