Skip to content

Commit db260ed

Browse files
committed
Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (dashpay#3009)
* Add "isValidMember" and "memberIndex" to output of "quorum memberof" * Allow to specify how many quorums to scan for in "quorum memberof"
1 parent 46099e9 commit db260ed

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

src/rpc/rpcquorums.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -192,20 +192,29 @@ UniValue quorum_dkgstatus(const JSONRPCRequest& request)
192192
void quorum_memberof_help()
193193
{
194194
throw std::runtime_error(
195-
"quorum memberof \"proTxHash\"\n"
195+
"quorum memberof \"proTxHash\" (quorumCount)\n"
196196
"Checks which quorums the given masternode is a member of.\n"
197197
"\nArguments:\n"
198198
"1. \"proTxHash\" (string, required) ProTxHash of the masternode.\n"
199+
"2. scanQuorumsCount (number, optional) Number of quorums to scan for. If not specified,\n"
200+
" the active quorum count for each specific quorum type is used."
199201
);
200202
}
201203

202204
UniValue quorum_memberof(const JSONRPCRequest& request)
203205
{
204-
if (request.fHelp || (request.params.size() != 2)) {
206+
if (request.fHelp || (request.params.size() < 2 || request.params.size() > 3)) {
205207
quorum_memberof_help();
206208
}
207209

208210
uint256 protxHash = ParseHashV(request.params[1], "proTxHash");
211+
int scanQuorumsCount = -1;
212+
if (request.params.size() >= 3) {
213+
scanQuorumsCount = ParseInt32V(request.params[2], "scanQuorumsCount");
214+
if (scanQuorumsCount <= 0) {
215+
throw JSONRPCError(RPC_INVALID_PARAMETER, "invalid scanQuorumsCount parameter");
216+
}
217+
}
209218

210219
const CBlockIndex* pindexTip;
211220
{
@@ -219,26 +228,25 @@ UniValue quorum_memberof(const JSONRPCRequest& request)
219228
throw JSONRPCError(RPC_INVALID_PARAMETER, "masternode not found");
220229
}
221230

222-
std::set<std::pair<Consensus::LLMQType, uint256>> quorumHashes;
231+
UniValue result(UniValue::VARR);
232+
223233
for (const auto& p : Params().GetConsensus().llmqs) {
224234
auto& params = p.second;
225-
auto quorums = llmq::quorumManager->ScanQuorums(params.type, params.signingActiveQuorumCount);
235+
size_t count = params.signingActiveQuorumCount;
236+
if (scanQuorumsCount != -1) {
237+
count = (size_t)scanQuorumsCount;
238+
}
239+
auto quorums = llmq::quorumManager->ScanQuorums(params.type, count);
226240
for (auto& quorum : quorums) {
227-
for (auto& m : quorum->members) {
228-
if (m->proTxHash == dmn->proTxHash) {
229-
quorumHashes.emplace(params.type, quorum->qc.quorumHash);
230-
}
241+
if (quorum->IsMember(dmn->proTxHash)) {
242+
auto json = BuildQuorumInfo(quorum, false, false);
243+
json.push_back(Pair("isValidMember", quorum->IsValidMember(dmn->proTxHash)));
244+
json.push_back(Pair("memberIndex", quorum->GetMemberIndex(dmn->proTxHash)));
245+
result.push_back(json);
231246
}
232247
}
233248
}
234249

235-
UniValue result(UniValue::VARR);
236-
for (auto& p : quorumHashes) {
237-
auto quorum = llmq::quorumManager->GetQuorum(p.first, p.second);
238-
assert(quorum);
239-
result.push_back(BuildQuorumInfo(quorum, false, false));
240-
}
241-
242250
return result;
243251
}
244252

0 commit comments

Comments
 (0)