From c91d1d1fdfabae2c496a0dabe1344698cdfe2137 Mon Sep 17 00:00:00 2001 From: "Jonathan \"Duke\" Leto" Date: Wed, 21 Aug 2019 11:25:38 -0700 Subject: [PATCH] Use uints to save RAM/disk on block stats; fix ntz serialization --- src/chain.h | 23 ++++++++++------------- src/rpc/blockchain.cpp | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/chain.h b/src/chain.h index 0ae37a90e..f6c2bf980 100644 --- a/src/chain.h +++ b/src/chain.h @@ -263,50 +263,47 @@ public: //! Number of notarization transactions in this block. unsigned int nNotarizations; - // TODO: convert block-stats to unsigned int ? //! (memory only) Number of payments (shielded or transparent) in the block //! up to and including this block. One transaction can contain one or more //! payments. This stat allows us to calculate ratios of shielded/transparent //! when combined with shielded payment stats - int64_t nPayments; + unsigned int nPayments; //! (memory only) Number of shielded transactions (of any kind) in the block up to and including this block. //! A shielded transaction is defined as a transaction that contains at least 1 JoinSplit, which includes //! shielding/de-shielding and other complex transaction possibilties including multiple taddrs/zaddrs as //! inputs and outputs. - int64_t nShieldedTx; + unsigned int nShieldedTx; //! (memory only) Number of fully shielded transactions. A fully shielded transaction is defined //! as a transaction containing JoinSplits and only shielded inputs and outputs, i.e. no transparent // inputs or outputs: z->z or z->(z,z) or z->(z,z,z,) etc... - int64_t nFullyShieldedTx; + unsigned int nFullyShieldedTx; //! (memory only) Number of shielding payments. A shielding payment is defined //! as having a shielded output but transparent input: t->z - int64_t nShieldingPayments; + unsigned int nShieldingPayments; //! (memory only) Number of shielded payments. A shielded payment is defined //! as having a shielded input or output: t->z or z->t - int64_t nShieldedPayments; + unsigned int nShieldedPayments; //! (memory only) Number of fully shielded payments. A fully shielded payment is defined //! as having a shielded input and shielded output: z->z - int64_t nFullyShieldedPayments; + unsigned int nFullyShieldedPayments; //! (memory only) Number of deshielding transactions. A deshielding transaction is defined //! as a transaction containing JoinSplits and at least one transparent output. - int64_t nDeshieldingTx; + unsigned int nDeshieldingTx; //! (memory only) Number of deshielding payments. A deshielding payment is defined //! as one transparent input and one shielded output: z->t - int64_t nDeshieldingPayments; + unsigned int nDeshieldingPayments; //! (memory only) Number of shielding transactions. A shielding transaction is defined //! as a transaction containing JoinSplits and at least one transparent input // i.e. t->z or t->(z,t) or z->(z,z,t) - int64_t nShieldingTx; - - + unsigned int nShieldingTx; // chain stats //! (memory only) Number of transactions in the chain up to and including this block. @@ -634,7 +631,7 @@ public: READWRITE(VARINT(nDeshieldingPayments)); READWRITE(VARINT(nFullyShieldedPayments)); - READWRITE(VARINT(nChainNotarizations)); + READWRITE(VARINT(nNotarizations)); } if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO)) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 2df621066..f965fdeef 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1994,21 +1994,13 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp) const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount); int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast(); int nTxDiff = pindex->nChainTx - pindexPast->nChainTx; - 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; 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); @@ -2024,13 +2016,26 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp) 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("fully_shielded_txrate", ((double)nFullyShieldedTxDiff) / nTimeDiff); ret.pushKV("paymentrate", ((double)nPaymentsDiff) / nTimeDiff);