diff --git a/src/chain.h b/src/chain.h index f815b5c8a..1a0a7057d 100644 --- a/src/chain.h +++ b/src/chain.h @@ -29,6 +29,7 @@ class CChainPower; #include "tinyformat.h" #include "uint256.h" extern int8_t is_STAKED(const char *chain_name); +extern bool fZindex; #include @@ -614,15 +615,19 @@ public: READWRITE(VARINT(nStatus)); READWRITE(VARINT(nTx)); - READWRITE(VARINT(nShieldedTx)); - READWRITE(VARINT(nShieldingTx)); - READWRITE(VARINT(nDeshieldingTx)); - READWRITE(VARINT(nFullyShieldedTx)); + // These values only serialized when -zindex=1 + //if (fZindex != GetBoolArg("-zindex", false)) { + if(fZindex) { + READWRITE(VARINT(nShieldedTx)); + READWRITE(VARINT(nShieldingTx)); + READWRITE(VARINT(nDeshieldingTx)); + READWRITE(VARINT(nFullyShieldedTx)); - READWRITE(VARINT(nShieldedPayments)); - READWRITE(VARINT(nShieldingPayments)); - READWRITE(VARINT(nDeshieldingPayments)); - READWRITE(VARINT(nFullyShieldedPayments)); + READWRITE(VARINT(nShieldedPayments)); + READWRITE(VARINT(nShieldingPayments)); + READWRITE(VARINT(nDeshieldingPayments)); + READWRITE(VARINT(nFullyShieldedPayments)); + } if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO)) READWRITE(VARINT(nFile)); diff --git a/src/init.cpp b/src/init.cpp index f8875af44..18985e842 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1668,6 +1668,12 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) break; } + // Check for changed -zindex state + if (fZindex != GetBoolArg("-zindex", false)) { + strLoadError = _("You need to rebuild the database using -reindex to change -zindex"); + 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) { diff --git a/src/main.cpp b/src/main.cpp index fda64ce02..f1057699f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -98,6 +98,7 @@ bool fExperimentalMode = true; bool fImporting = false; bool fReindex = false; bool fTxIndex = false; +bool fZindex = false; bool fAddressIndex = false; bool fTimestampIndex = false; bool fSpentIndex = false; @@ -6279,6 +6280,9 @@ bool static LoadBlockIndexDB() // Check whether we have an address index pblocktree->ReadFlag("addressindex", fAddressIndex); LogPrintf("%s: address index %s\n", __func__, fAddressIndex ? "enabled" : "disabled"); + // Check whether we have a shielded index + pblocktree->ReadFlag("zindex", fZindex); + LogPrintf("%s: shielded index %s\n", __func__, fZindex ? "enabled" : "disabled"); // Check whether we have a timestamp index pblocktree->ReadFlag("timestampindex", fTimestampIndex); @@ -6643,17 +6647,22 @@ bool InitBlockIndex() { // Use the provided setting for -txindex in the new database fTxIndex = GetBoolArg("-txindex", true); pblocktree->WriteFlag("txindex", fTxIndex); + // Use the provided setting for -addressindex in the new database fAddressIndex = GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX); pblocktree->WriteFlag("addressindex", fAddressIndex); - + + // Use the provided setting for -zindex in the new database + fAddressIndex = GetBoolArg("-zindex", DEFAULT_SHIELDEDINDEX); + pblocktree->WriteFlag("zindex", fZindex); + // Use the provided setting for -timestampindex in the new database fTimestampIndex = GetBoolArg("-timestampindex", DEFAULT_TIMESTAMPINDEX); pblocktree->WriteFlag("timestampindex", fTimestampIndex); - + fSpentIndex = GetBoolArg("-spentindex", DEFAULT_SPENTINDEX); pblocktree->WriteFlag("spentindex", fSpentIndex); - fprintf(stderr,"fAddressIndex.%d/%d fSpentIndex.%d/%d\n",fAddressIndex,DEFAULT_ADDRESSINDEX,fSpentIndex,DEFAULT_SPENTINDEX); + fprintf(stderr,"fAddressIndex.%d/%d fSpentIndex.%d/%d fZindex.%d/%d\n",fAddressIndex,DEFAULT_ADDRESSINDEX,fSpentIndex,DEFAULT_SPENTINDEX,fZindex, DEFAULT_SHIELDEDINDEX ); LogPrintf("Initializing databases...\n"); } // Only add the genesis block if not reindexing (in which case we reuse the one already on disk) diff --git a/src/main.h b/src/main.h index 931954da0..08104a885 100644 --- a/src/main.h +++ b/src/main.h @@ -125,6 +125,7 @@ static const int64_t DEFAULT_MAX_TIP_AGE = 24 * 60 * 60; #define DEFAULT_ADDRESSINDEX (GetArg("-ac_cc",0) != 0 || GetArg("-ac_ccactivate",0) != 0) #define DEFAULT_SPENTINDEX (GetArg("-ac_cc",0) != 0 || GetArg("-ac_ccactivate",0) != 0) static const bool DEFAULT_TIMESTAMPINDEX = false; +static const bool DEFAULT_SHIELDEDINDEX = false; static const unsigned int DEFAULT_DB_MAX_OPEN_FILES = 1000; static const bool DEFAULT_DB_COMPRESSION = true;