Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (#3009)
* Add "isValidMember" and "memberIndex" to output of "quorum memberof" * Allow to specify how many quorums to scan for in "quorum memberof"
This commit is contained in:
parent
99824a8792
commit
9ac7a998be
@ -192,20 +192,29 @@ UniValue quorum_dkgstatus(const JSONRPCRequest& request)
|
|||||||
void quorum_memberof_help()
|
void quorum_memberof_help()
|
||||||
{
|
{
|
||||||
throw std::runtime_error(
|
throw std::runtime_error(
|
||||||
"quorum memberof \"proTxHash\"\n"
|
"quorum memberof \"proTxHash\" (quorumCount)\n"
|
||||||
"Checks which quorums the given masternode is a member of.\n"
|
"Checks which quorums the given masternode is a member of.\n"
|
||||||
"\nArguments:\n"
|
"\nArguments:\n"
|
||||||
"1. \"proTxHash\" (string, required) ProTxHash of the masternode.\n"
|
"1. \"proTxHash\" (string, required) ProTxHash of the masternode.\n"
|
||||||
|
"2. scanQuorumsCount (number, optional) Number of quorums to scan for. If not specified,\n"
|
||||||
|
" the active quorum count for each specific quorum type is used."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
UniValue quorum_memberof(const JSONRPCRequest& request)
|
UniValue quorum_memberof(const JSONRPCRequest& request)
|
||||||
{
|
{
|
||||||
if (request.fHelp || (request.params.size() != 2)) {
|
if (request.fHelp || (request.params.size() < 2 || request.params.size() > 3)) {
|
||||||
quorum_memberof_help();
|
quorum_memberof_help();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint256 protxHash = ParseHashV(request.params[1], "proTxHash");
|
uint256 protxHash = ParseHashV(request.params[1], "proTxHash");
|
||||||
|
int scanQuorumsCount = -1;
|
||||||
|
if (request.params.size() >= 3) {
|
||||||
|
scanQuorumsCount = ParseInt32V(request.params[2], "scanQuorumsCount");
|
||||||
|
if (scanQuorumsCount <= 0) {
|
||||||
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "invalid scanQuorumsCount parameter");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const CBlockIndex* pindexTip;
|
const CBlockIndex* pindexTip;
|
||||||
{
|
{
|
||||||
@ -219,25 +228,24 @@ UniValue quorum_memberof(const JSONRPCRequest& request)
|
|||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "masternode not found");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "masternode not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::pair<Consensus::LLMQType, uint256>> quorumHashes;
|
UniValue result(UniValue::VARR);
|
||||||
|
|
||||||
for (const auto& p : Params().GetConsensus().llmqs) {
|
for (const auto& p : Params().GetConsensus().llmqs) {
|
||||||
auto& params = p.second;
|
auto& params = p.second;
|
||||||
auto quorums = llmq::quorumManager->ScanQuorums(params.type, params.signingActiveQuorumCount);
|
size_t count = params.signingActiveQuorumCount;
|
||||||
|
if (scanQuorumsCount != -1) {
|
||||||
|
count = (size_t)scanQuorumsCount;
|
||||||
|
}
|
||||||
|
auto quorums = llmq::quorumManager->ScanQuorums(params.type, count);
|
||||||
for (auto& quorum : quorums) {
|
for (auto& quorum : quorums) {
|
||||||
for (auto& m : quorum->members) {
|
if (quorum->IsMember(dmn->proTxHash)) {
|
||||||
if (m->proTxHash == dmn->proTxHash) {
|
auto json = BuildQuorumInfo(quorum, false, false);
|
||||||
quorumHashes.emplace(params.type, quorum->qc.quorumHash);
|
json.push_back(Pair("isValidMember", quorum->IsValidMember(dmn->proTxHash)));
|
||||||
|
json.push_back(Pair("memberIndex", quorum->GetMemberIndex(dmn->proTxHash)));
|
||||||
|
result.push_back(json);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
UniValue result(UniValue::VARR);
|
|
||||||
for (auto& p : quorumHashes) {
|
|
||||||
auto quorum = llmq::quorumManager->GetQuorum(p.first, p.second);
|
|
||||||
assert(quorum);
|
|
||||||
result.push_back(BuildQuorumInfo(quorum, false, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user