Auto merge of #1946 - str4d:blockchain-stats-num-commitments, r=ebfull
Add total number of commitments to getblockchaininfo
This commit is contained in:
commit
57a0725ae1
|
@ -79,6 +79,9 @@ void test_tree(
|
|||
// The tree doesn't have a 'last' element added since it's blank.
|
||||
ASSERT_THROW(tree.last(), std::runtime_error);
|
||||
|
||||
// The tree is empty.
|
||||
ASSERT_TRUE(tree.size() == 0);
|
||||
|
||||
// We need to witness at every single point in the tree, so
|
||||
// that the consistency of the tree and the merkle paths can
|
||||
// be checked.
|
||||
|
@ -93,6 +96,9 @@ void test_tree(
|
|||
// Now append a commitment to the tree
|
||||
tree.append(test_commitment);
|
||||
|
||||
// Size incremented by one.
|
||||
ASSERT_TRUE(tree.size() == i+1);
|
||||
|
||||
// Last element added to the tree was `test_commitment`
|
||||
ASSERT_TRUE(tree.last() == test_commitment);
|
||||
|
||||
|
|
|
@ -533,6 +533,7 @@ Value getblockchaininfo(const Array& params, bool fHelp)
|
|||
" \"difficulty\": xxxxxx, (numeric) the current difficulty\n"
|
||||
" \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n"
|
||||
" \"chainwork\": \"xxxx\" (string) total amount of work in active chain, in hexadecimal\n"
|
||||
" \"commitments\": xxxxxx, (numeric) the current number of note commitments in the commitment tree\n"
|
||||
" \"softforks\": [ (array) status of softforks in progress\n"
|
||||
" {\n"
|
||||
" \"id\": \"xxxx\", (string) name of softfork\n"
|
||||
|
@ -564,6 +565,10 @@ Value getblockchaininfo(const Array& params, bool fHelp)
|
|||
obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex()));
|
||||
obj.push_back(Pair("pruned", fPruneMode));
|
||||
|
||||
ZCIncrementalMerkleTree tree;
|
||||
pcoinsTip->GetAnchorAt(pcoinsTip->GetBestAnchor(), tree);
|
||||
obj.push_back(Pair("commitments", tree.size()));
|
||||
|
||||
const Consensus::Params& consensusParams = Params().GetConsensus();
|
||||
CBlockIndex* tip = chainActive.Tip();
|
||||
Array softforks;
|
||||
|
|
|
@ -81,6 +81,25 @@ Hash IncrementalMerkleTree<Depth, Hash>::last() const {
|
|||
}
|
||||
}
|
||||
|
||||
template<size_t Depth, typename Hash>
|
||||
size_t IncrementalMerkleTree<Depth, Hash>::size() const {
|
||||
size_t ret = 0;
|
||||
if (left) {
|
||||
ret++;
|
||||
}
|
||||
if (right) {
|
||||
ret++;
|
||||
}
|
||||
// Treat occupation of parents array as a binary number
|
||||
// (right-shifted by 1)
|
||||
for (size_t i = 0; i < parents.size(); i++) {
|
||||
if (parents[i]) {
|
||||
ret += (1 << (i+1));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<size_t Depth, typename Hash>
|
||||
void IncrementalMerkleTree<Depth, Hash>::append(Hash obj) {
|
||||
if (is_complete(Depth)) {
|
||||
|
|
|
@ -75,6 +75,8 @@ public:
|
|||
parents.size() * 32; // parents
|
||||
}
|
||||
|
||||
size_t size() const;
|
||||
|
||||
void append(Hash obj);
|
||||
Hash root() const {
|
||||
return root(Depth, std::deque<Hash>());
|
||||
|
|
Loading…
Reference in New Issue