Use uints to save RAM/disk on block stats; fix ntz serialization

This commit is contained in:
Jonathan "Duke" Leto
2019-08-21 11:25:38 -07:00
parent 3b49c1d256
commit c91d1d1fdf
2 changed files with 25 additions and 23 deletions

View File

@@ -263,50 +263,47 @@ public:
//! Number of notarization transactions in this block. //! Number of notarization transactions in this block.
unsigned int nNotarizations; unsigned int nNotarizations;
// TODO: convert block-stats to unsigned int ?
//! (memory only) Number of payments (shielded or transparent) in the block //! (memory only) Number of payments (shielded or transparent) in the block
//! up to and including this block. One transaction can contain one or more //! up to and including this block. One transaction can contain one or more
//! payments. This stat allows us to calculate ratios of shielded/transparent //! payments. This stat allows us to calculate ratios of shielded/transparent
//! when combined with shielded payment stats //! 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. //! (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 //! 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 //! shielding/de-shielding and other complex transaction possibilties including multiple taddrs/zaddrs as
//! inputs and outputs. //! inputs and outputs.
int64_t nShieldedTx; unsigned int nShieldedTx;
//! (memory only) Number of fully shielded transactions. A fully shielded transaction is defined //! (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 //! 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... // 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 //! (memory only) Number of shielding payments. A shielding payment is defined
//! as having a shielded output but transparent input: t->z //! 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 //! (memory only) Number of shielded payments. A shielded payment is defined
//! as having a shielded input or output: t->z or z->t //! 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 //! (memory only) Number of fully shielded payments. A fully shielded payment is defined
//! as having a shielded input and shielded output: z->z //! 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 //! (memory only) Number of deshielding transactions. A deshielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent output. //! 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 //! (memory only) Number of deshielding payments. A deshielding payment is defined
//! as one transparent input and one shielded output: z->t //! 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 //! (memory only) Number of shielding transactions. A shielding transaction is defined
//! as a transaction containing JoinSplits and at least one transparent input //! as a transaction containing JoinSplits and at least one transparent input
// i.e. t->z or t->(z,t) or z->(z,z,t) // i.e. t->z or t->(z,t) or z->(z,z,t)
int64_t nShieldingTx; unsigned int nShieldingTx;
// chain stats // chain stats
//! (memory only) Number of transactions in the chain up to and including this block. //! (memory only) Number of transactions in the chain up to and including this block.
@@ -634,7 +631,7 @@ public:
READWRITE(VARINT(nDeshieldingPayments)); READWRITE(VARINT(nDeshieldingPayments));
READWRITE(VARINT(nFullyShieldedPayments)); READWRITE(VARINT(nFullyShieldedPayments));
READWRITE(VARINT(nChainNotarizations)); READWRITE(VARINT(nNotarizations));
} }
if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO)) if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO))

View File

@@ -1994,21 +1994,13 @@ UniValue getchaintxstats(const UniValue& params, bool fHelp)
const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount); const CBlockIndex* pindexPast = pindex->GetAncestor(pindex->GetHeight() - blockcount);
int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast(); int nTimeDiff = pindex->GetMedianTimePast() - pindexPast->GetMedianTimePast();
int nTxDiff = pindex->nChainTx - pindexPast->nChainTx; 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); UniValue ret(UniValue::VOBJ);
ret.pushKV("time", (int64_t)pindex->nTime); ret.pushKV("time", (int64_t)pindex->nTime);
ret.pushKV("txcount", (int64_t)pindex->nChainTx); ret.pushKV("txcount", (int64_t)pindex->nChainTx);
if (fZindex) { if (fZindex) {
ret.pushKV("notarizations", (int64_t)pindex->nChainNotarizations);
ret.pushKV("shielded_txcount", (int64_t)pindex->nChainShieldedTx); ret.pushKV("shielded_txcount", (int64_t)pindex->nChainShieldedTx);
ret.pushKV("fully_shielded_txcount", (int64_t)pindex->nChainFullyShieldedTx); ret.pushKV("fully_shielded_txcount", (int64_t)pindex->nChainFullyShieldedTx);
ret.pushKV("deshielding_txcount", (int64_t)pindex->nChainDeshieldingTx); 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); ret.pushKV("window_block_count", blockcount);
if (blockcount > 0) { 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_interval", nTimeDiff);
ret.pushKV("window_txcount", nTxDiff); ret.pushKV("window_txcount", nTxDiff);
ret.pushKV("window_payments", nPaymentsDiff); ret.pushKV("window_payments", nPaymentsDiff);
ret.pushKV("window_notarizations", (int) nNotarizationsDiff);
if (nTimeDiff > 0) { if (nTimeDiff > 0) {
ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff); ret.pushKV("txrate", ((double)nTxDiff) / nTimeDiff);
if (fZindex) { if (fZindex) {
ret.pushKV("notarization_txrate", ((double)nNotarizationsDiff) / nTimeDiff);
ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / nTimeDiff); ret.pushKV("shielded_txrate", ((double)nShieldedTxDiff) / nTimeDiff);
ret.pushKV("fully_shielded_txrate", ((double)nFullyShieldedTxDiff) / nTimeDiff); ret.pushKV("fully_shielded_txrate", ((double)nFullyShieldedTxDiff) / nTimeDiff);
ret.pushKV("paymentrate", ((double)nPaymentsDiff) / nTimeDiff); ret.pushKV("paymentrate", ((double)nPaymentsDiff) / nTimeDiff);