Add total number of commitments to getblockchaininfo
This commit is contained in:
@@ -533,6 +533,7 @@ Value getblockchaininfo(const Array& params, bool fHelp)
|
|||||||
" \"difficulty\": xxxxxx, (numeric) the current difficulty\n"
|
" \"difficulty\": xxxxxx, (numeric) the current difficulty\n"
|
||||||
" \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n"
|
" \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n"
|
||||||
" \"chainwork\": \"xxxx\" (string) total amount of work in active chain, in hexadecimal\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"
|
" \"softforks\": [ (array) status of softforks in progress\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" \"id\": \"xxxx\", (string) name of softfork\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("chainwork", chainActive.Tip()->nChainWork.GetHex()));
|
||||||
obj.push_back(Pair("pruned", fPruneMode));
|
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();
|
const Consensus::Params& consensusParams = Params().GetConsensus();
|
||||||
CBlockIndex* tip = chainActive.Tip();
|
CBlockIndex* tip = chainActive.Tip();
|
||||||
Array softforks;
|
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>
|
template<size_t Depth, typename Hash>
|
||||||
void IncrementalMerkleTree<Depth, Hash>::append(Hash obj) {
|
void IncrementalMerkleTree<Depth, Hash>::append(Hash obj) {
|
||||||
if (is_complete(Depth)) {
|
if (is_complete(Depth)) {
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ public:
|
|||||||
parents.size() * 32; // parents
|
parents.size() * 32; // parents
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t size() const;
|
||||||
|
|
||||||
void append(Hash obj);
|
void append(Hash obj);
|
||||||
Hash root() const {
|
Hash root() const {
|
||||||
return root(Depth, std::deque<Hash>());
|
return root(Depth, std::deque<Hash>());
|
||||||
|
|||||||
Reference in New Issue
Block a user