more -zindex
This commit is contained in:
@@ -400,6 +400,7 @@ std::string HelpMessage(HelpMessageMode mode)
|
||||
strUsage += HelpMessageOpt("-addressindex", strprintf(_("Maintain a full address index, used to query for the balance, txids and unspent outputs for addresses (default: %u)"), DEFAULT_ADDRESSINDEX));
|
||||
strUsage += HelpMessageOpt("-timestampindex", strprintf(_("Maintain a timestamp index for block hashes, used to query blocks hashes by a range of timestamps (default: %u)"), DEFAULT_TIMESTAMPINDEX));
|
||||
strUsage += HelpMessageOpt("-spentindex", strprintf(_("Maintain a full spent index, used to query the spending txid and input index for an outpoint (default: %u)"), DEFAULT_SPENTINDEX));
|
||||
strUsage += HelpMessageOpt("-zindex", strprintf(_("Maintain extra statistics about shielded transactions and payments (default: %u)"), 0));
|
||||
strUsage += HelpMessageGroup(_("Connection options:"));
|
||||
strUsage += HelpMessageOpt("-addnode=<ip>", _("Add a node to connect to and attempt to keep the connection open"));
|
||||
strUsage += HelpMessageOpt("-banscore=<n>", strprintf(_("Threshold for disconnecting misbehaving peers (default: %u)"), 100));
|
||||
|
||||
112
src/main.cpp
112
src/main.cpp
@@ -4777,6 +4777,7 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
||||
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
|
||||
@@ -4789,10 +4790,19 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
||||
sproutValue += js.vpub_old;
|
||||
sproutValue -= js.vpub_new;
|
||||
}
|
||||
|
||||
if (!fZindex)
|
||||
continue;
|
||||
|
||||
nShieldedSpends = tx.vShieldedSpend.size();
|
||||
nShieldedOutputs = tx.vShieldedOutput.size();
|
||||
isShieldedTx = (nShieldedSpends + nShieldedOutputs) > 0 ? true : false;
|
||||
|
||||
|
||||
if(tx.vin.size()==13 && tx.vout.size()==2) {
|
||||
nNotarizations++;
|
||||
}
|
||||
|
||||
if(isShieldedTx) {
|
||||
nShieldedTx++;
|
||||
if(tx.vin.size()==0 && tx.vout.size()==0) {
|
||||
@@ -4852,15 +4862,17 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
||||
pindexNew->nStatus |= BLOCK_HAVE_DATA;
|
||||
pindexNew->RaiseValidity(BLOCK_VALID_TRANSACTIONS);
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
setDirtyBlockIndex.insert(pindexNew);
|
||||
|
||||
@@ -4874,17 +4886,19 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
||||
CBlockIndex *pindex = queue.front();
|
||||
queue.pop_front();
|
||||
|
||||
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx;
|
||||
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;
|
||||
if (fZindex) {
|
||||
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx;
|
||||
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;
|
||||
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) {
|
||||
@@ -4922,8 +4936,10 @@ bool ReceivedBlockTransactions(const CBlock &block, CValidationState& state, CBl
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "ht.%d, ShieldedPayments=%d, ShieldedTx=%d, FullyShieldedTx=%d\n",
|
||||
pindexNew->GetHeight(), nShieldedPayments, nShieldedTx, nFullyShieldedTx );
|
||||
if (fZindex)
|
||||
fprintf(stderr, "ht.%d, ShieldedPayments=%d, ShieldedTx=%d, FullyShieldedTx=%d, ntz=%d\n",
|
||||
pindexNew->GetHeight(), nShieldedPayments, nShieldedTx, nFullyShieldedTx, nNotarizations );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -6155,15 +6171,17 @@ bool static LoadBlockIndexDB()
|
||||
if (pindex->pprev) {
|
||||
if (pindex->pprev->nChainTx) {
|
||||
|
||||
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 (fZindex) {
|
||||
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;
|
||||
@@ -6177,29 +6195,33 @@ bool static LoadBlockIndexDB()
|
||||
}
|
||||
} else {
|
||||
pindex->nChainTx = 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;
|
||||
if (fZindex) {
|
||||
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));
|
||||
}
|
||||
} else {
|
||||
pindex->nChainTx = pindex->nTx;
|
||||
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;
|
||||
pindex->nChainSproutValue = pindex->nSproutValue;
|
||||
pindex->nChainSaplingValue = pindex->nSaplingValue;
|
||||
if (fZindex) {
|
||||
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.
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
using namespace std;
|
||||
|
||||
extern int32_t KOMODO_INSYNC;
|
||||
extern bool fZindex;
|
||||
extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, UniValue& entry);
|
||||
void ScriptPubKeyToJSON(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex);
|
||||
int32_t komodo_notarized_height(int32_t *prevMoMheightp,uint256 *hashp,uint256 *txidp);
|
||||
@@ -2007,14 +2008,16 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp)
|
||||
ret.pushKV("time", (int64_t)pindex->nTime);
|
||||
|
||||
ret.pushKV("txcount", (int64_t)pindex->nChainTx);
|
||||
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);
|
||||
if (fZindex) {
|
||||
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());
|
||||
@@ -2024,46 +2027,51 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp)
|
||||
ret.pushKV("window_interval", nTimeDiff);
|
||||
ret.pushKV("window_txcount", nTxDiff);
|
||||
ret.pushKV("window_payments", nPaymentsDiff);
|
||||
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);
|
||||
|
||||
if (nTimeDiff > 0) {
|
||||
ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff);
|
||||
ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / 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 (nTxDiff > 0) {
|
||||
ret.pushKV("shielded_tx_percent", ((double)pindex->nShieldedTx) / nTxDiff);
|
||||
ret.pushKV("fully_shielded_tx_percent", ((double)pindex->nFullyShieldedTx) / nTxDiff);
|
||||
ret.pushKV("shielding_tx_percent", ((double)pindex->nShieldingTx) / nTxDiff);
|
||||
ret.pushKV("deshielding_tx_percent", ((double)pindex->nDeshieldingTx) / nTxDiff);
|
||||
}
|
||||
if (nPaymentsDiff > 0) {
|
||||
ret.pushKV("shielded_payments_percent", ((double)pindex->nShieldedPayments) / nPaymentsDiff);
|
||||
ret.pushKV("fully_shielded_payments_percent", ((double)pindex->nFullyShieldedPayments) / nPaymentsDiff);
|
||||
ret.pushKV("shielding_payments_percent", ((double)pindex->nShieldingPayments) / nPaymentsDiff);
|
||||
ret.pushKV("deshielding_payments_percent", ((double)pindex->nDeshieldingPayments) / nPaymentsDiff);
|
||||
if (fZindex) {
|
||||
ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / 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);
|
||||
}
|
||||
}
|
||||
|
||||
// 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 (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);
|
||||
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_only", shielded);
|
||||
}
|
||||
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_only", shielded);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user