From a4f827faeb49adad78b0e68df2a78084d201b201 Mon Sep 17 00:00:00 2001 From: Duke Leto Date: Fri, 25 Oct 2019 18:23:15 -0400 Subject: [PATCH] remove zindex stuff that should not be on this branch --- src/chain.h | 17 ---- src/main.cpp | 136 +------------------------------- src/rpc/blockchain.cpp | 172 ----------------------------------------- src/txdb.cpp | 8 -- 4 files changed, 1 insertion(+), 332 deletions(-) diff --git a/src/chain.h b/src/chain.h index 787c339fd..9a29026f4 100644 --- a/src/chain.h +++ b/src/chain.h @@ -326,23 +326,6 @@ public: nTx = 0; nChainTx = 0; - nChainShieldedTx = 0; - nChainShieldingTx = 0; - nChainDeshieldingTx = 0; - nChainFullyShieldedTx = 0; - nChainShieldedPayments = 0; - nChainShieldingPayments = 0; - nChainDeshieldingPayments = 0; - nChainFullyShieldedPayments = 0; - nShieldedTx = 0; - nShieldingTx = 0; - nDeshieldingTx = 0; - nFullyShieldedTx = 0; - nShieldedPayments = 0; - nShieldingPayments = 0; - nDeshieldingPayments = 0; - nFullyShieldedPayments = 0; - nStatus = 0; nCachedBranchId = boost::none; hashSproutAnchor = uint256(); diff --git a/src/main.cpp b/src/main.cpp index 187d201c2..88f9f1de4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4781,14 +4781,9 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl { pindexNew->nTx = block.vtx.size(); pindexNew->nChainTx = 0; - pindexNew->nChainPayments = 0; CAmount sproutValue = 0; CAmount saplingValue = 0; bool isShieldedTx = false; - int64_t nShieldedSpends=0,nShieldedOutputs=0,nPayments=0; - int64_t nShieldedTx=0,nFullyShieldedTx=0,nDeshieldingTx=0,nShieldingTx=0; - int64_t nShieldedPayments=0,nFullyShieldedPayments=0,nShieldingPayments=0,nDeshieldingPayments=0; - int64_t nNotarizations=0; for (auto tx : block.vtx) { // Negative valueBalance "takes" money from the transparent value pool @@ -4801,70 +4796,7 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl sproutValue += js.vpub_old; sproutValue -= js.vpub_new; } - - // Ignore following stats unless -zindex - if (!fZindex) - continue; - - nShieldedSpends = tx.vShieldedSpend.size(); - nShieldedOutputs = tx.vShieldedOutput.size(); - isShieldedTx = (nShieldedSpends + nShieldedOutputs) > 0 ? true : false; - - // We want to avoid full verification with a low false-positive rate - if(tx.vin.size()==13 && tx.vout.size()==2 && tx.vout[1].scriptPubKey.IsOpReturn() && tx.vout[1].nValue==0) { - nNotarizations++; - } - - if(isShieldedTx) { - nShieldedTx++; - if(tx.vin.size()==0 && tx.vout.size()==0) { - nFullyShieldedTx++; - } else if(tx.vin.size()>0) { - nShieldingTx++; - } else if(tx.vout.size()>0) { - nDeshieldingTx++; - } - //NOTE: These are at best heuristics. Improve them as much as possible. - // You cannot compare stats generated from different sets of heuristics, so - // if you change this code, you must delete and resync from scratch, or you - // will be mixing together data from two set of heuristics. - - if (nShieldedOutputs >= 1) { - // If there are shielded outputs, count each as a payment - // By default, if there is more than 1 output, we assume 1 change output which is not a payment. - // In the case of multiple outputs which spend inputs exactly, there is no change output and this - // heuristic will undercount payments. Since this edge case is rare, this seems acceptable. - // t->(t,t,z) = 1 shielded payment - // z->(z,z) = 1 shielded payment + shielded change - // t->(z,z) = 1 shielded payment + shielded change - // t->(t,z) = 1 shielded payment + transparent change - // (z,z)->z = 1 shielded payment (has this xtn ever occurred?) - // z->(z,z,z) = 2 shielded payments + shielded change - // Assume that there is always 1 change output when there are more than one - nShieldedPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1; - - // Fully shielded do not count toward shielding/deshielding - if(tx.vin.size()==0 && tx.vout.size()==0) { - nFullyShieldedPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1; - } else { - nShieldingPayments += nShieldedOutputs > 1 ? (nShieldedOutputs-1) : 1; - } - } else if (nShieldedSpends >=1) { - // Shielded inputs with no shielded outputs. We know none are change output because - // change would flow back to the zaddr - // z->t = 1 shielded payment - // z->(t,t) = 2 shielded payments - // z->(t,t,t) = 3 shielded payments - nShieldedPayments += tx.vout.size(); - nDeshieldingPayments += tx.vout.size() > 1 ? tx.vout.size()-1 : tx.vout.size(); - } - //TODO: correctly add shielded payments to total chain payments - nPayments += nShieldedPayments; - } else { - // No shielded payments, add transparent payments minus a change address - nPayments += tx.vout.size() > 1 ? tx.vout.size()-1 : tx.vout.size(); - } - } + } pindexNew->nSproutValue = sproutValue; pindexNew->nChainSproutValue = boost::none; @@ -4876,19 +4808,6 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl pindexNew->nStatus |= BLOCK_HAVE_DATA; pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS); - if (fZindex) { - pindexNew->nPayments = nPayments; - pindexNew->nShieldedTx = nShieldedTx; - pindexNew->nFullyShieldedTx = nFullyShieldedTx; - pindexNew->nDeshieldingTx = nDeshieldingTx; - pindexNew->nShieldingTx = nShieldingTx; - pindexNew->nShieldedPayments = nShieldedPayments; - pindexNew->nFullyShieldedPayments = nFullyShieldedPayments; - pindexNew->nDeshieldingPayments = nDeshieldingPayments; - pindexNew->nShieldingPayments = nShieldingPayments; - pindexNew->nNotarizations = nNotarizations; - } - setDirtyBlockIndex.insert(pindexNew); if (pindexNew->pprev == NULL || pindexNew->pprev->nChainTx) { @@ -4901,21 +4820,6 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl CBlockIndex *pindex = queue.front(); queue.pop_front(); - if (fZindex) { - pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx; - pindex->nChainNotarizations = (pindex->pprev ? pindex->pprev->nChainNotarizations : 0) + pindex->nNotarizations; - pindex->nChainShieldedTx = (pindex->pprev ? pindex->pprev->nChainShieldedTx : 0) + pindex->nShieldedTx; - pindex->nChainFullyShieldedTx = (pindex->pprev ? pindex->pprev->nChainFullyShieldedTx : 0) + pindex->nFullyShieldedTx; - pindex->nChainShieldingTx = (pindex->pprev ? pindex->pprev->nChainShieldingTx : 0) + pindex->nShieldingTx; - pindex->nChainDeshieldingTx = (pindex->pprev ? pindex->pprev->nChainDeshieldingTx : 0) + pindex->nDeshieldingTx; - - pindex->nChainPayments = (pindex->pprev ? pindex->pprev->nChainPayments : 0) + pindex->nPayments; - pindex->nChainShieldedPayments = (pindex->pprev ? pindex->pprev->nChainShieldedPayments : 0) + pindex->nShieldedPayments; - pindex->nChainFullyShieldedPayments = (pindex->pprev ? pindex->pprev->nChainFullyShieldedPayments : 0) + pindex->nFullyShieldedPayments; - pindex->nChainShieldingPayments = (pindex->pprev ? pindex->pprev->nChainShieldingPayments : 0) + pindex->nShieldingPayments; - pindex->nChainDeshieldingPayments = (pindex->pprev ? pindex->pprev->nChainDeshieldingPayments : 0) + pindex->nDeshieldingPayments; - } - if (pindex->pprev) { if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) { pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue; @@ -4952,10 +4856,6 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl } } - if (fZindex) - fprintf(stderr, "ht.%d, ShieldedPayments=%d, ShieldedTx=%d, FullyShieldedTx=%d, ntz=%d\n", - pindexNew->GetHeight(), nShieldedPayments, nShieldedTx, nFullyShieldedTx, nNotarizations ); - return true; } @@ -6187,19 +6087,6 @@ bool static LoadBlockIndexDB() if (pindex->pprev) { if (pindex->pprev->nChainTx) { - if (fZindex) { - pindex->nChainNotarizations = pindex->pprev->nChainNotarizations + pindex->nNotarizations; - pindex->nChainTx = pindex->pprev->nChainTx + pindex->nTx; - pindex->nChainShieldedTx = pindex->pprev->nChainShieldedTx + pindex->nShieldedTx; - pindex->nChainShieldedPayments = pindex->pprev->nChainShieldedPayments + pindex->nShieldedPayments; - pindex->nChainShieldingTx = pindex->pprev->nChainShieldingTx + pindex->nShieldingTx; - pindex->nChainShieldingPayments = pindex->pprev->nChainShieldingPayments + pindex->nShieldingPayments; - pindex->nChainDeshieldingTx = pindex->pprev->nChainShieldedTx + pindex->nShieldedTx; - pindex->nChainDeshieldingPayments = pindex->pprev->nChainShieldedPayments + pindex->nShieldedPayments; - pindex->nChainFullyShieldedTx = pindex->pprev->nChainFullyShieldedTx + pindex->nFullyShieldedTx; - pindex->nChainFullyShieldedPayments = pindex->pprev->nChainFullyShieldedPayments + pindex->nFullyShieldedPayments; - } - if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) { pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue; } else { @@ -6212,17 +6099,6 @@ bool static LoadBlockIndexDB() } } else { pindex->nChainTx = 0; - if (fZindex) { - pindex->nChainNotarizations = 0; - pindex->nChainShieldedTx = 0; - pindex->nChainFullyShieldedTx = 0; - pindex->nChainShieldedPayments = 0; - pindex->nChainShieldingPayments = 0; - pindex->nChainDeshieldingTx = 0; - pindex->nChainDeshieldingPayments = 0; - pindex->nChainFullyShieldedTx = 0; - pindex->nChainFullyShieldedPayments = 0; - } pindex->nChainSproutValue = boost::none; pindex->nChainSaplingValue = boost::none; mapBlocksUnlinked.insert(std::make_pair(pindex->pprev, pindex)); @@ -6231,16 +6107,6 @@ bool static LoadBlockIndexDB() pindex->nChainTx = pindex->nTx; pindex->nChainSproutValue = pindex->nSproutValue; pindex->nChainSaplingValue = pindex->nSaplingValue; - if (fZindex) { - pindex->nChainNotarizations = pindex->nNotarizations; - pindex->nChainShieldedTx = pindex->nShieldedTx; - pindex->nChainShieldedPayments = pindex->nShieldedPayments; - pindex->nChainShieldingTx = pindex->nShieldingTx; - pindex->nChainShieldingPayments = pindex->nShieldingPayments; - pindex->nChainDeshieldingTx = pindex->nDeshieldingTx; - pindex->nChainDeshieldingPayments = pindex->nDeshieldingPayments; - pindex->nChainFullyShieldedPayments = pindex->nFullyShieldedPayments; - } } } // Construct in-memory chain of branch IDs. diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 8c355981b..4f7374767 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1944,177 +1944,6 @@ inline CBlockIndex* LookupBlockIndex(const uint256& hash) #define ORG(X) (X - blockcount - nNotarizationsDiff) -UniValue getchaintxstats(const UniValue& params, bool fHelp) -{ - if (fHelp || params.size() > 2) - throw runtime_error( - "getchaintxstats\n" - "\nCompute statistics about the total number and rate of transactions in the chain.\n" - "\nThis RPC will return extra data about shielded transactions, payments and notarizations if the zindex is enabled .\n" - "\nArguments:\n" - "1. nblocks (numeric, optional) Number of blocks in averaging window.\n" - "2. blockhash (string, optional) The hash of the block which ends the window.\n" - "\nResult:\n" - "{\n" - " \"time\": xxxxx, (numeric) The timestamp for the final block in the window in UNIX format.\n" - " \"notarizations\": xxxxx, (optional, numeric) The number of notarizations in the chain.\n" - " \"txcount\": xxxxx, (numeric) The total number of transactions in the chain up to that point.\n" - " \"window_final_block_hash\": \"...\", (string) The hash of the final block in the window.\n" - " \"window_block_count\": xxxxx, (numeric) Size of the window in number of blocks.\n" - " \"window_notarizations\": xxxxx, (optional, numeric) Number of notarization transactions in window.\n" - " \"window_tx_count\": xxxxx, (numeric) The number of transactions in the window. Only returned if \"window_block_count\" is > 0.\n" - " \"window_interval\": xxxxx, (numeric) The elapsed time in the window in seconds. Only returned if \"window_block_count\" is > 0.\n" - " \"txrate\": x.xx, (numeric) The average rate of transactions per second in the window. Only returned if \"window_interval\" is > 0.\n" - "}\n" - "\nExamples:\n" - + HelpExampleCli("getchaintxstats", "") - + HelpExampleRpc("getchaintxstats", "2016") - ); - - const CBlockIndex* pindex; - int blockcount = 30 * 24 * 60 * 60 / Params().GetConsensus().nPowTargetSpacing; // By default: 1 month - - if (params[1].isNull()) { - LOCK(cs_main); - pindex = chainActive.Tip(); - } else { - uint256 hash(ParseHashV(params[1], "blockhash")); - LOCK(cs_main); - pindex = LookupBlockIndex(hash); - if (!pindex) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); - } - if (!chainActive.Contains(pindex)) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Block is not in main chain"); - } - } - - assert(pindex != nullptr); - - if (params[0].isNull()) { - blockcount = std::max(0, std::min(blockcount, pindex->GetHeight() - 1)); - } else { - blockcount = params[0].get_int(); - - if (blockcount < 0 || (blockcount > 0 && blockcount >= pindex->GetHeight())) { - throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid block count: should be between 0 and the block's height - 1"); - } - } - - const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount); - int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast(); - int nTxDiff = pindex->nChainTx - pindexPast->nChainTx; - - UniValue ret(UniValue::VOBJ); - ret.pushKV("time", (int64_t)pindex->nTime); - ret.pushKV("txcount", (int64_t)pindex->nChainTx); - - if (fZindex) { - ret.pushKV("notarizations", (int64_t)pindex->nChainNotarizations); - ret.pushKV("shielded_txcount", (int64_t)pindex->nChainShieldedTx); - ret.pushKV("fully_shielded_txcount", (int64_t)pindex->nChainFullyShieldedTx); - ret.pushKV("deshielding_txcount", (int64_t)pindex->nChainDeshieldingTx); - ret.pushKV("shielding_txcount", (int64_t)pindex->nChainShieldingTx); - ret.pushKV("shielded_payments", (int64_t)pindex->nChainShieldedPayments); - ret.pushKV("fully_shielded_payments",(int64_t)pindex->nChainFullyShieldedPayments); - ret.pushKV("deshielding_payments", (int64_t)pindex->nChainDeshieldingPayments); - ret.pushKV("shielding_payments", (int64_t)pindex->nChainShieldingPayments); - } - - ret.pushKV("window_final_block_hash", pindex->GetBlockHash().GetHex()); - ret.pushKV("window_final_block_height", pindex->GetHeight()); - ret.pushKV("window_block_count", blockcount); - - if (blockcount > 0) { - int64_t nPaymentsDiff = pindex->nChainPayments - pindexPast->nChainPayments; - int64_t nShieldedTxDiff = pindex->nChainShieldedTx - pindexPast->nChainShieldedTx; - int64_t nShieldingTxDiff = pindex->nChainShieldingTx - pindexPast->nChainShieldingTx; - int64_t nDeshieldingTxDiff = pindex->nChainDeshieldingTx - pindexPast->nChainDeshieldingTx; - int64_t nFullyShieldedTxDiff = pindex->nChainFullyShieldedTx - pindexPast->nChainFullyShieldedTx; - int64_t nShieldedPaymentsDiff = pindex->nChainShieldedPayments - pindexPast->nChainShieldedPayments; - int64_t nShieldingPaymentsDiff = pindex->nChainShieldingPayments - pindexPast->nChainShieldingPayments; - int64_t nDeshieldingPaymentsDiff = pindex->nChainDeshieldingPayments - pindexPast->nChainDeshieldingPayments; - int64_t nFullyShieldedPaymentsDiff = pindex->nChainFullyShieldedPayments - pindexPast->nChainFullyShieldedPayments; - unsigned int nNotarizationsDiff = pindex->nChainNotarizations - pindexPast->nChainNotarizations; - - ret.pushKV("window_interval", nTimeDiff); - ret.pushKV("window_txcount", nTxDiff); - ret.pushKV("window_payments", nPaymentsDiff); - ret.pushKV("window_notarizations", (int) nNotarizationsDiff); - - if (nTimeDiff > 0) { - ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff); - if (fZindex) { - ret.pushKV("notarization_txrate", ((double)nNotarizationsDiff) / nTimeDiff); - ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / nTimeDiff); - ret.pushKV("shielding_txrate", ((double)nShieldingTxDiff) / nTimeDiff); - ret.pushKV("deshielding_txrate", ((double)nDeshieldingTxDiff) / nTimeDiff); - ret.pushKV("fully_shielded_txrate", ((double)nFullyShieldedTxDiff) / nTimeDiff); - ret.pushKV("paymentrate", ((double)nPaymentsDiff) / nTimeDiff); - ret.pushKV("shielded_paymentrate", ((double)nShieldedPaymentsDiff) / nTimeDiff); - ret.pushKV("fully_shielded_paymentrate", ((double)nFullyShieldedPaymentsDiff) / nTimeDiff); - } - } - - if (fZindex) { - ret.pushKV("window_fully_shielded_payments", nFullyShieldedPaymentsDiff); - ret.pushKV("window_shielded_payments", nShieldedPaymentsDiff); - ret.pushKV("window_shielding_payments", nShieldingPaymentsDiff); - ret.pushKV("window_deshielding_payments", nDeshieldingPaymentsDiff); - ret.pushKV("window_shielded_txcount", nShieldedTxDiff); - - if (nTxDiff > 0) { - ret.pushKV("shielded_tx_percent", ((double)nShieldedTxDiff) / nTxDiff); - ret.pushKV("fully_shielded_tx_percent", ((double)nFullyShieldedTxDiff) / nTxDiff); - ret.pushKV("shielding_tx_percent", ((double)nShieldingTxDiff) / nTxDiff); - ret.pushKV("deshielding_tx_percent", ((double)nDeshieldingTxDiff) / nTxDiff); - } - if (nPaymentsDiff > 0) { - ret.pushKV("shielded_payments_percent", ((double)nShieldedPaymentsDiff) / nPaymentsDiff); - ret.pushKV("fully_shielded_payments_percent", ((double)nFullyShieldedPaymentsDiff) / nPaymentsDiff); - ret.pushKV("shielding_payments_percent", ((double)nShieldingPaymentsDiff) / nPaymentsDiff); - ret.pushKV("deshielding_payments_percent", ((double)nDeshieldingPaymentsDiff) / nPaymentsDiff); - } - - // Shielded-only statistics - UniValue shielded(UniValue::VOBJ); - if (nShieldedTxDiff > 0) { - shielded.pushKV("fully_shielded_tx_percent", ((double)nFullyShieldedTxDiff) / nShieldedTxDiff ); - shielded.pushKV("shielding_tx_percent", ((double)nShieldingTxDiff) / nShieldedTxDiff ); - shielded.pushKV("deshielding_tx_percent", ((double)nDeshieldingTxDiff) / nShieldedTxDiff ); - } - if (nShieldedPaymentsDiff > 0) { - shielded.pushKV("fully_shielded_payments_percent", ((double)nFullyShieldedPaymentsDiff) / nShieldedPaymentsDiff ); - shielded.pushKV("shielding_payments_percent", ((double)nShieldingPaymentsDiff) / nShieldedPaymentsDiff ); - shielded.pushKV("deshielding_payments_percent", ((double)nDeshieldingPaymentsDiff) / nShieldedPaymentsDiff ); - } - if(nShieldedTxDiff+nShieldedPaymentsDiff > 0) - ret.pushKV("shielded", shielded); - - // Organic tx stats = Raw - Coinbase - DPoW - if (nTxDiff > 0) { - UniValue organic(UniValue::VOBJ); - - organic.pushKV("shielded_tx_percent", ((double)nShieldedTxDiff) / ORG(nTxDiff)); - organic.pushKV("fully_shielded_tx_percent", ((double)nFullyShieldedTxDiff) / ORG(nTxDiff)); - organic.pushKV("shielding_tx_percent", ((double)nShieldingTxDiff) / ORG(nTxDiff)); - organic.pushKV("deshielding_tx_percent", ((double)nDeshieldingTxDiff) / ORG(nTxDiff)); - organic.pushKV("shielded_payments_percent", ((double)nShieldedPaymentsDiff) / ORG(nPaymentsDiff)); - organic.pushKV("fully_shielded_payments_percent", ((double)nFullyShieldedPaymentsDiff) / ORG(nPaymentsDiff)); - organic.pushKV("shielding_payments_percent", ((double)nShieldingPaymentsDiff) / ORG(nPaymentsDiff)); - organic.pushKV("deshielding_payments_percent", ((double)nDeshieldingPaymentsDiff) / ORG(nPaymentsDiff)); - organic.pushKV("paymentrate", ((double)ORG(nPaymentsDiff)) / nTimeDiff); - organic.pushKV("txrate", ((double)ORG(nTxDiff)) / nTimeDiff); - organic.pushKV("txcount", (int) ORG(nTxDiff)); - organic.pushKV("payments", (int) ORG(nPaymentsDiff)); - ret.pushKV("organic", organic); - } - } - } - - return ret; -} - UniValue invalidateblock(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) @@ -2202,7 +2031,6 @@ static const CRPCCommand commands[] = { "blockchain", "getblockhash", &getblockhash, true }, { "blockchain", "getblockheader", &getblockheader, true }, { "blockchain", "getchaintips", &getchaintips, true }, - { "blockchain", "getchaintxstats", &getchaintxstats, true }, { "blockchain", "getdifficulty", &getdifficulty, true }, { "blockchain", "getmempoolinfo", &getmempoolinfo, true }, { "blockchain", "getrawmempool", &getrawmempool, true }, diff --git a/src/txdb.cpp b/src/txdb.cpp index a462061a1..a2ae3fb21 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -716,14 +716,6 @@ bool CBlockTreeDB::LoadBlockIndexGuts() pindexNew->nStatus = diskindex.nStatus; pindexNew->nCachedBranchId = diskindex.nCachedBranchId; pindexNew->nTx = diskindex.nTx; - pindexNew->nShieldedTx = diskindex.nShieldedTx; - pindexNew->nShieldedPayments = diskindex.nShieldedPayments; - pindexNew->nShieldingTx = diskindex.nShieldingTx; - pindexNew->nShieldingPayments = diskindex.nShieldingPayments; - pindexNew->nDeshieldingTx = diskindex.nDeshieldingTx; - pindexNew->nDeshieldingPayments = diskindex.nDeshieldingPayments; - pindexNew->nFullyShieldedTx = diskindex.nFullyShieldedTx; - pindexNew->nFullyShieldedPayments = diskindex.nFullyShieldedPayments; pindexNew->nSproutValue = diskindex.nSproutValue; pindexNew->nSaplingValue = diskindex.nSaplingValue; pindexNew->segid = diskindex.segid;