remove zindex stuff that should not be on this branch
This commit is contained in:
17
src/chain.h
17
src/chain.h
@@ -326,23 +326,6 @@ public:
|
|||||||
nTx = 0;
|
nTx = 0;
|
||||||
nChainTx = 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;
|
nStatus = 0;
|
||||||
nCachedBranchId = boost::none;
|
nCachedBranchId = boost::none;
|
||||||
hashSproutAnchor = uint256();
|
hashSproutAnchor = uint256();
|
||||||
|
|||||||
136
src/main.cpp
136
src/main.cpp
@@ -4781,14 +4781,9 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
|||||||
{
|
{
|
||||||
pindexNew->nTx = block.vtx.size();
|
pindexNew->nTx = block.vtx.size();
|
||||||
pindexNew->nChainTx = 0;
|
pindexNew->nChainTx = 0;
|
||||||
pindexNew->nChainPayments = 0;
|
|
||||||
CAmount sproutValue = 0;
|
CAmount sproutValue = 0;
|
||||||
CAmount saplingValue = 0;
|
CAmount saplingValue = 0;
|
||||||
bool isShieldedTx = false;
|
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) {
|
for (auto tx : block.vtx) {
|
||||||
// Negative valueBalance "takes" money from the transparent value pool
|
// 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_old;
|
||||||
sproutValue -= js.vpub_new;
|
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->nSproutValue = sproutValue;
|
||||||
pindexNew->nChainSproutValue = boost::none;
|
pindexNew->nChainSproutValue = boost::none;
|
||||||
@@ -4876,19 +4808,6 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
|||||||
pindexNew->nStatus |= BLOCK_HAVE_DATA;
|
pindexNew->nStatus |= BLOCK_HAVE_DATA;
|
||||||
pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS);
|
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);
|
setDirtyBlockIndex.insert(pindexNew);
|
||||||
|
|
||||||
if (pindexNew->pprev == NULL || pindexNew->pprev->nChainTx) {
|
if (pindexNew->pprev == NULL || pindexNew->pprev->nChainTx) {
|
||||||
@@ -4901,21 +4820,6 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
|||||||
CBlockIndex *pindex = queue.front();
|
CBlockIndex *pindex = queue.front();
|
||||||
queue.pop_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) {
|
||||||
if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) {
|
if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) {
|
||||||
pindex->nChainSproutValue = *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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6187,19 +6087,6 @@ bool static LoadBlockIndexDB()
|
|||||||
if (pindex->pprev) {
|
if (pindex->pprev) {
|
||||||
if (pindex->pprev->nChainTx) {
|
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) {
|
if (pindex->pprev->nChainSproutValue && pindex->nSproutValue) {
|
||||||
pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue;
|
pindex->nChainSproutValue = *pindex->pprev->nChainSproutValue + *pindex->nSproutValue;
|
||||||
} else {
|
} else {
|
||||||
@@ -6212,17 +6099,6 @@ bool static LoadBlockIndexDB()
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pindex->nChainTx = 0;
|
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->nChainSproutValue = boost::none;
|
||||||
pindex->nChainSaplingValue = boost::none;
|
pindex->nChainSaplingValue = boost::none;
|
||||||
mapBlocksUnlinked.insert(std::make_pair(pindex->pprev, pindex));
|
mapBlocksUnlinked.insert(std::make_pair(pindex->pprev, pindex));
|
||||||
@@ -6231,16 +6107,6 @@ bool static LoadBlockIndexDB()
|
|||||||
pindex->nChainTx = pindex->nTx;
|
pindex->nChainTx = pindex->nTx;
|
||||||
pindex->nChainSproutValue = pindex->nSproutValue;
|
pindex->nChainSproutValue = pindex->nSproutValue;
|
||||||
pindex->nChainSaplingValue = pindex->nSaplingValue;
|
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.
|
// Construct in-memory chain of branch IDs.
|
||||||
|
|||||||
@@ -1944,177 +1944,6 @@ inline CBlockIndex* LookupBlockIndex(const uint256& hash)
|
|||||||
|
|
||||||
#define ORG(X) (X - blockcount - nNotarizationsDiff)
|
#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)
|
UniValue invalidateblock(const UniValue& params, bool fHelp)
|
||||||
{
|
{
|
||||||
if (fHelp || params.size() != 1)
|
if (fHelp || params.size() != 1)
|
||||||
@@ -2202,7 +2031,6 @@ static const CRPCCommand commands[] =
|
|||||||
{ "blockchain", "getblockhash", &getblockhash, true },
|
{ "blockchain", "getblockhash", &getblockhash, true },
|
||||||
{ "blockchain", "getblockheader", &getblockheader, true },
|
{ "blockchain", "getblockheader", &getblockheader, true },
|
||||||
{ "blockchain", "getchaintips", &getchaintips, true },
|
{ "blockchain", "getchaintips", &getchaintips, true },
|
||||||
{ "blockchain", "getchaintxstats", &getchaintxstats, true },
|
|
||||||
{ "blockchain", "getdifficulty", &getdifficulty, true },
|
{ "blockchain", "getdifficulty", &getdifficulty, true },
|
||||||
{ "blockchain", "getmempoolinfo", &getmempoolinfo, true },
|
{ "blockchain", "getmempoolinfo", &getmempoolinfo, true },
|
||||||
{ "blockchain", "getrawmempool", &getrawmempool, true },
|
{ "blockchain", "getrawmempool", &getrawmempool, true },
|
||||||
|
|||||||
@@ -716,14 +716,6 @@ bool CBlockTreeDB::LoadBlockIndexGuts()
|
|||||||
pindexNew->nStatus = diskindex.nStatus;
|
pindexNew->nStatus = diskindex.nStatus;
|
||||||
pindexNew->nCachedBranchId = diskindex.nCachedBranchId;
|
pindexNew->nCachedBranchId = diskindex.nCachedBranchId;
|
||||||
pindexNew->nTx = diskindex.nTx;
|
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->nSproutValue = diskindex.nSproutValue;
|
||||||
pindexNew->nSaplingValue = diskindex.nSaplingValue;
|
pindexNew->nSaplingValue = diskindex.nSaplingValue;
|
||||||
pindexNew->segid = diskindex.segid;
|
pindexNew->segid = diskindex.segid;
|
||||||
|
|||||||
Reference in New Issue
Block a user