From 86592934cbd32d7ffb708126408da6bbd6c2ed3c Mon Sep 17 00:00:00 2001 From: Kay Kurokawa Date: Wed, 4 Jan 2017 13:57:28 -0500 Subject: [PATCH] Adding effective amount function to CClaimTrie --- src/claimtrie.cpp | 25 ++++++++++++++++++++ src/claimtrie.h | 3 ++- src/rpc/claimtrie.cpp | 2 +- src/test/claimtriebranching_tests.cpp | 34 +++++++++++++++++---------- 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/src/claimtrie.cpp b/src/claimtrie.cpp index 5bc04348a..59f12eaf2 100644 --- a/src/claimtrie.cpp +++ b/src/claimtrie.cpp @@ -525,6 +525,31 @@ claimsForNameType CClaimTrie::getClaimsForName(const std::string& name) const return allClaims; } +//return effective amount form claim, retuns 0 if claim is not found +CAmount CClaimTrie::getEffectiveAmountForClaim(const std::string& name, uint160 claimId) const +{ + claimsForNameType claims = getClaimsForName(name); + CAmount effectiveAmount = 0; + bool claim_found = false; + for (std::vector::iterator it=claims.claims.begin(); it!=claims.claims.end(); ++it) + { + if (it->claimId == claimId && it->nValidAtHeight < nCurrentHeight) + effectiveAmount += it->nAmount; + claim_found = true; + break; + } + if (!claim_found) + return effectiveAmount; + + for (std::vector::iterator it=claims.supports.begin(); it!=claims.supports.end(); ++it) + { + if (it->supportedClaimId == claimId && it->nValidAtHeight < nCurrentHeight) + effectiveAmount += it->nAmount; + } + return effectiveAmount; + +} + bool CClaimTrie::checkConsistency() const { if (empty()) diff --git a/src/claimtrie.h b/src/claimtrie.h index 6d6396ba7..7b6ab254d 100644 --- a/src/claimtrie.h +++ b/src/claimtrie.h @@ -302,7 +302,8 @@ public: bool getLastTakeoverForName(const std::string& name, int& lastTakeoverHeight) const; claimsForNameType getClaimsForName(const std::string& name) const; - + CAmount getEffectiveAmountForClaim(const std::string& name, uint160 claimId) const; + bool queueEmpty() const; bool supportEmpty() const; bool supportQueueEmpty() const; diff --git a/src/rpc/claimtrie.cpp b/src/rpc/claimtrie.cpp index cd9ec1b8a..ae7a3b126 100644 --- a/src/rpc/claimtrie.cpp +++ b/src/rpc/claimtrie.cpp @@ -187,7 +187,7 @@ UniValue getvalueforname(const UniValue& params, bool fHelp) ret.push_back(Pair("txid", claim.outPoint.hash.GetHex())); ret.push_back(Pair("n", (int)claim.outPoint.n)); ret.push_back(Pair("amount", claim.nAmount)); - ret.push_back(Pair("effective amount", claim.nEffectiveAmount)); + ret.push_back(Pair("effective amount", pclaimTrie->getEffectiveAmountForClaim(name, claim.claimId))); ret.push_back(Pair("height", claim.nHeight)); return ret; } diff --git a/src/test/claimtriebranching_tests.cpp b/src/test/claimtriebranching_tests.cpp index a024aaf55..f2bdd1f9e 100644 --- a/src/test/claimtriebranching_tests.cpp +++ b/src/test/claimtriebranching_tests.cpp @@ -68,18 +68,22 @@ best_claim_effective_amount_equals(std::string name, CAmount amount) if (!have_info) { boost::test_tools::predicate_result res(false); - res.message()<<"No claim found"; - return res; - } - else if (val.nEffectiveAmount != amount) - { - boost::test_tools::predicate_result res(false); - res.message()<getEffectiveAmountForClaim(name, val.claimId); + if (val.nEffectiveAmount != amount) + { + boost::test_tools::predicate_result res(false); + res.message()<