#include "httprpc.h"
#include "key.h"
#include "notarisationdb.h"
-#ifdef ENABLE_MINING
#include "key_io.h"
-#endif
#include "main.h"
#include "metrics.h"
#include "miner.h"
extern void ThreadSendAlert();
extern int32_t KOMODO_LOADINGBLOCKS;
extern bool VERUS_MINTBLOCKS;
-extern std::string VERUS_CHEATCATCHER;
+extern std::string VERUS_DEFAULT_ZADDR;
ZCJoinSplit* pzcashParams = NULL;
CVerusHash::init();
CVerusHashV2::init();
CBlockHeader::SetVerusV2Hash();
- if (strcmp(ASSETCHAINS_SYMBOL,"VRSC") == 0)
+ if (IsVerusMainnetActive())
{
CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV2, 310000);
- CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV3, 782000);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV3, 800200);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV4, 800200);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5, 1053660);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5_1, 1053660);
+ }
+ else if (IsVerusActive())
+ {
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV2, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV3, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV4, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5_1, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV6, 1);
}
else
{
CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV2, 1);
- CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV3, 110);
- //CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV4, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV3, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV4, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV5_1, 1);
+ CConstVerusSolutionVector::activationHeight.SetActivationHeight(CActivationHeight::SOLUTION_VERUSV6, 1);
+ }
+ }
+
+ // get default IDs and addresses
+ auto defaultIDDest = DecodeDestination(GetArg("-defaultid", ""));
+ VERUS_DEFAULTID = defaultIDDest.which() == COptCCParams::ADDRTYPE_ID ? CIdentityID(GetDestinationID(defaultIDDest)) : CIdentityID();
+ auto notaryIDDest = DecodeDestination(GetArg("-notaryid", ""));
+ VERUS_NOTARYID = notaryIDDest.which() == COptCCParams::ADDRTYPE_ID ? CIdentityID(GetDestinationID(notaryIDDest)) : CIdentityID();
+ auto nodeIDDest = DecodeDestination(GetArg("-nodeid", ""));
+ VERUS_NODEID = nodeIDDest.which() == COptCCParams::ADDRTYPE_ID ? GetDestinationID(nodeIDDest) : uint160();
+ VERUS_DEFAULT_ZADDR = GetArg("-cheatcatcher", "");
+ VERUS_DEFAULT_ZADDR = GetArg("-defaultzaddr", VERUS_DEFAULT_ZADDR);
+ MAX_OUR_UTXOS_ID_RESCAN = GetArg("-maxourutxosidrescan", MAX_OUR_UTXOS_ID_RESCAN);
+ MAX_UTXOS_ID_RESCAN = GetArg("-maxutxosidrescan", std::min(MAX_UTXOS_ID_RESCAN, MAX_OUR_UTXOS_ID_RESCAN));
+
+ // if we are supposed to catch stake cheaters, there must be a valid sapling parameter, we need it at
+ // initialization, and this is the first time we can get it. store the Sapling address here
+ extern boost::optional<libzcash::SaplingPaymentAddress> defaultSaplingDest;
+ libzcash::PaymentAddress addr = DecodePaymentAddress(VERUS_DEFAULT_ZADDR);
+ if (VERUS_DEFAULT_ZADDR.size() > 0 && IsValidPaymentAddress(addr))
+ {
+ try
+ {
+ defaultSaplingDest = boost::get<libzcash::SaplingPaymentAddress>(addr);
+ }
+ catch (...)
+ {
}
}
+ VERUS_PRIVATECHANGE = GetBoolArg("-privatechange", !GetArg("-defaultzaddr", VERUS_DEFAULT_ZADDR).empty());
// Sanity check
if (!InitSanityCheck())
- return InitError(_("Initialization sanity check failed. Komodo is shutting down."));
+ return InitError(_("Initialization sanity check failed. Verus is shutting down."));
std::string strDataDir = GetDataDir().string();
#ifdef ENABLE_WALLET
try {
static boost::interprocess::file_lock lock(pathLockFile.string().c_str());
if (!lock.try_lock())
- return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Komodo is probably already running."), strDataDir));
+ return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Verus is probably already running."), strDataDir));
} catch(const boost::interprocess::interprocess_exception& e) {
- return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Komodo is probably already running.") + " %s.", strDataDir, e.what()));
+ return InitError(strprintf(_("Cannot obtain a lock on data directory %s. Verus is probably already running.") + " %s.", strDataDir, e.what()));
}
#ifndef _WIN32
if (GetBoolArg("-shrinkdebugfile", !fDebug))
ShrinkDebugFile();
LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
- LogPrintf("Komodo version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
+ LogPrintf("Verus version %s (%s)\n", FormatFullVersion(), CLIENT_DATE);
if (fPrintToDebugLog)
OpenDebugLog();
}
}
- BOOST_FOREACH(const std::string& strDest, mapMultiArgs["-seednode"])
- AddOneShot(strDest);
+ for (auto &oneNode : ConnectedChains.defaultPeerNodes)
+ {
+ AddOneShot(oneNode.networkAddress);
+ }
#if ENABLE_ZMQ
pzmqNotificationInterface = CZMQNotificationInterface::CreateWithArguments(mapArgs);
bool checkval,fAddressIndex,fSpentIndex,fTimeStampIndex;
pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex, dbCompression, dbMaxOpenFiles);
- fAddressIndex = GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX);
+ fAddressIndex = true;
pblocktree->ReadFlag("addressindex", checkval);
if ( checkval != fAddressIndex )
{
fReindex = true;
}
- fSpentIndex = GetBoolArg("-spentindex", DEFAULT_SPENTINDEX);
+ fSpentIndex = true;
pblocktree->ReadFlag("spentindex", checkval);
if ( checkval != fSpentIndex )
{
fReindex = true;
}
- pblocktree->ReadFlag("timestampindex", checkval);
- bool defaultState = DEFAULT_TIMESTAMPINDEX ? DEFAULT_TIMESTAMPINDEX : checkval;
- fTimeStampIndex = GetBoolArg("-timestampindex", defaultState);
- if (checkval != fTimeStampIndex)
+ fInsightExplorer = GetBoolArg("-insightexplorer", DEFAULT_INSIGHTEXPLORER);
+ pblocktree->ReadFlag("insightexplorer", checkval);
+ if ( checkval != fInsightExplorer )
{
- pblocktree->WriteFlag("timestampindex", fTimeStampIndex);
- fprintf(stderr,"set timestamp index, will reindex. sorry will take a while.\n");
+ pblocktree->WriteFlag("insightexplorer", fInsightExplorer);
+ fprintf(stderr,"set insightexplorer, will reindex. sorry will take a while.\n");
fReindex = true;
}
- pblocktree->ReadFlag("insightexplorer", checkval);
- defaultState = DEFAULT_INSIGHTEXPLORER ? DEFAULT_INSIGHTEXPLORER : checkval;
- fInsightExplorer = GetBoolArg("-insightexplorer", defaultState);
- if (checkval != fInsightExplorer)
+ fTimeStampIndex = GetBoolArg("-timestampindex", DEFAULT_TIMESTAMPINDEX);
+ pblocktree->ReadFlag("timestampindex", checkval);
+ if ( checkval != fTimeStampIndex )
{
- pblocktree->WriteFlag("insightexplorer", fInsightExplorer);
- fprintf(stderr,"set main indexes, will reindex. sorry will take a while.\n");
+ pblocktree->WriteFlag("timestampindex", fTimeStampIndex);
+ fprintf(stderr,"set timestampindex, will reindex. sorry will take a while.\n");
fReindex = true;
}
}
break;
}
KOMODO_LOADINGBLOCKS = 0;
+
// Check for changed -txindex state
- if (fTxIndex != GetBoolArg("-txindex", true)) {
+ if (!fReindex && fTxIndex != GetBoolArg("-txindex", true)) {
strLoadError = _("You need to rebuild the database using -reindex to change -txindex");
break;
}
// Check for changed -insightexplorer state
- if (fInsightExplorer != GetBoolArg("-insightexplorer", false)) {
+ if (!fReindex && fInsightExplorer != GetBoolArg("-insightexplorer", DEFAULT_INSIGHTEXPLORER) ) {
strLoadError = _("You need to rebuild the database using -reindex to change -insightexplorer");
break;
}
// Check for changed -prune state. What we are concerned about is a user who has pruned blocks
// in the past, but is now trying to run unpruned.
- if (fHavePruned && !fPruneMode) {
+ if (!fReindex && fHavePruned && !fPruneMode) {
strLoadError = _("You need to rebuild the database using -reindex to go back to unpruned mode. This will redownload the entire blockchain");
break;
}
#ifdef ENABLE_MINING
#ifndef ENABLE_WALLET
if (GetBoolArg("-minetolocalwallet", false)) {
- return InitError(_("Zcash was not built with wallet support. Set -minetolocalwallet=0 to use -mineraddress, or rebuild Zcash with wallet support."));
+ return InitError(_("Verus was not built with wallet support. Set -minetolocalwallet=0 to use -mineraddress, or rebuild Verus with wallet support."));
}
if (GetArg("-mineraddress", "").empty() && GetBoolArg("-gen", false)) {
- return InitError(_("Zcash was not built with wallet support. Set -mineraddress, or rebuild Zcash with wallet support."));
+ return InitError(_("Verus was not built with wallet support. Set -mineraddress, or rebuild Verus with wallet support."));
}
#endif // !ENABLE_WALLET
if (pwalletMain) {
// Address has already been validated
CTxDestination addr = DecodeDestination(mapArgs["-mineraddress"]);
- CKeyID keyID = boost::get<CKeyID>(addr);
- minerAddressInLocalWallet = pwalletMain->HaveKey(keyID);
+ if (addr.which() == COptCCParams::ADDRTYPE_ID)
+ {
+ std::pair<CIdentityMapKey, CIdentityMapValue> keyAndIdentity;
+ minerAddressInLocalWallet = pwalletMain->GetIdentity(GetDestinationID(addr), keyAndIdentity) &&
+ keyAndIdentity.first.CanSpend();
+ }
+ else
+ {
+ CKeyID keyID = boost::get<CKeyID>(addr);
+ minerAddressInLocalWallet = pwalletMain->HaveKey(keyID);
+ }
}
if (GetBoolArg("-minetolocalwallet", true) && !minerAddressInLocalWallet) {
return InitError(_("-mineraddress is not in the local wallet. Either use a local address, or set -minetolocalwallet=0"));
if ( !ActivateBestChain(state, Params()))
strErrors << "Failed to connect best block";
}
+ InitializePremineSupply();
std::vector<boost::filesystem::path> vImportFiles;
if (mapArgs.count("-loadblock"))
{
StartNode(threadGroup, scheduler);
- VERUS_CHEATCATCHER = GetArg("-cheatcatcher", "");
bool gen = GetBoolArg("-gen", false);
#ifdef ENABLE_MINING