@@ -192,20 +192,29 @@ UniValue quorum_dkgstatus(const JSONRPCRequest& request)
192192void 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 " \n Arguments:\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
202204UniValue 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