From a48536f5a219f8d77a576ed5d82a4f490a03461e Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Thu, 29 Aug 2024 21:07:08 -0500 Subject: [PATCH 01/12] Update configure.ac bumped version --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3fb3f6cb47f2..17074b640f80 100644 --- a/configure.ac +++ b/configure.ac @@ -2,9 +2,9 @@ AC_PREREQ([2.69]) define(_CLIENT_VERSION_MAJOR, 3) define(_CLIENT_VERSION_MINOR, 4) define(_CLIENT_VERSION_REVISION, 7) -define(_CLIENT_VERSION_BUILD, 0) +define(_CLIENT_VERSION_BUILD, 1) define(_CLIENT_VERSION_RC, 0) -define(_CLIENT_VERSION_IS_RELEASE, false) +define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2023) define(_COPYRIGHT_HOLDERS,[The %s developers]) define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[SCC Core]]) From 65d7a61054f144c3564144136a9b9dfc629ca0ad Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:09:47 -0500 Subject: [PATCH 02/12] masternodeshortlist testing --- configure.ac | 2 +- src/rpc/masternode.cpp | 171 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 17074b640f80..0e9a058d8349 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ([2.69]) define(_CLIENT_VERSION_MAJOR, 3) define(_CLIENT_VERSION_MINOR, 4) define(_CLIENT_VERSION_REVISION, 7) -define(_CLIENT_VERSION_BUILD, 1) +define(_CLIENT_VERSION_BUILD, 2) define(_CLIENT_VERSION_RC, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2023) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index e28878c97b82..a688e7a8e7ee 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -67,6 +67,21 @@ static UniValue masternode_list(const JSONRPCRequest& request) return masternodelist(newRequest); } +static UniValue masternode_shortlist(const JSONRPCRequest& request) +{ + if (request.fHelp) + masternode_list_help(request); + JSONRPCRequest newRequest = request; + newRequest.params.setArray(); + // forward params but skip "list" + for (unsigned int i = 1; i < request.params.size(); i++) { + if ( + + newRequest.params.push_back(request.params[i]); + } + return masternodeshortlist(newRequest); +} + static void masternode_connect_help(const JSONRPCRequest& request) { RPCHelpMan{"masternode connect", @@ -545,6 +560,8 @@ static UniValue masternode(const JSONRPCRequest& request) if (strCommand == "list") { return masternode_list(request); + } else if (strCommand == "shortlist") { + return masternode_shortlist(request); } else if (strCommand == "connect") { return masternode_connect(request); } else if (strCommand == "count") { @@ -721,6 +738,7 @@ static const CRPCCommand commands[] = // --------------------- ------------------------ ----------------------- ---------- { "scc", "masternode", &masternode, {} }, { "scc", "masternodelist", &masternodelist, {} }, + { "scc", "masternodeshortlist", &masternodeshortlist, {} }, }; // clang-format on void RegisterMasternodeRPCCommands(CRPCTable &t) @@ -728,3 +746,156 @@ void RegisterMasternodeRPCCommands(CRPCTable &t) for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++) t.appendCommand(commands[vcidx].name, &commands[vcidx]); } + +static UniValue masternodeshortlist(const JSONRPCRequest& request) +{ + std::string strMode = "json"; + std::string strFilter = ""; + + if (!request.params[0].isNull()) strMode = request.params[0].get_str(); + if (!request.params[1].isNull()) strFilter = request.params[1].get_str(); + + strMode = ToLower(strMode); + + if (request.fHelp || ( + strMode != "addr" && strMode != "full" && strMode != "info" && strMode != "json" && + strMode != "owneraddress" && strMode != "votingaddress" && + strMode != "lastpaidtime" && strMode != "lastpaidblock" && + strMode != "payee" && strMode != "pubkeyoperator" && + strMode != "status")) + { + masternode_list_help(request); + } + + UniValue obj(UniValue::VOBJ); + + auto mnList = deterministicMNManager->GetActiveListAtChainTip(); + auto dmnToStatus = [&](auto& dmn) { + if (mnList.IsMNValid(dmn)) { + return "ENABLED"; + } + if (mnList.IsMNPoSeBanned(dmn)) { + return "POSE_BANNED"; + } + return "UNKNOWN"; + }; + auto dmnToLastPaidTime = [&](auto& dmn) { + if (dmn.pdmnState->nLastPaidHeight == 0) { + return (int)0; + } + + LOCK(cs_main); + const CBlockIndex* pindex = ::ChainActive()[dmn.pdmnState->nLastPaidHeight]; + return (int)pindex->nTime; + }; + + mnList.ForEachMN(false, [&](auto& dmn) { + + if (mnlist.IsMNPoSeBanned(dmn) { + return + } + + std::string strOutpoint = dmn.collateralOutpoint.ToStringShort(); + Coin coin; + std::string collateralAddressStr = "UNKNOWN"; + if (GetUTXOCoin(dmn.collateralOutpoint, coin)) { + CTxDestination collateralDest; + if (ExtractDestination(coin.out.scriptPubKey, collateralDest)) { + collateralAddressStr = EncodeDestination(collateralDest); + } + } + + CScript payeeScript = dmn.pdmnState->scriptPayout; + CTxDestination payeeDest; + std::string payeeStr = "UNKNOWN"; + if (ExtractDestination(payeeScript, payeeDest)) { + payeeStr = EncodeDestination(payeeDest); + } + + if (strMode == "addr") { + std::string strAddress = dmn.pdmnState->addr.ToString(false); + if (strFilter !="" && strAddress.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, strAddress); + } else if (strMode == "full") { + std::ostringstream streamFull; + streamFull << std::setw(18) << + dmnToStatus(dmn) << " " << + dmn.pdmnState->nPoSePenalty << " " << + payeeStr << " " << std::setw(10) << + dmnToLastPaidTime(dmn) << " " << std::setw(6) << + dmn.pdmnState->nLastPaidHeight << " " << + dmn.pdmnState->addr.ToString(); + std::string strFull = streamFull.str(); + if (strFilter !="" && strFull.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, strFull); + } else if (strMode == "info") { + std::ostringstream streamInfo; + streamInfo << std::setw(18) << + dmnToStatus(dmn) << " " << + dmn.pdmnState->nPoSePenalty << " " << + payeeStr << " " << + dmn.pdmnState->addr.ToString(); + std::string strInfo = streamInfo.str(); + if (strFilter !="" && strInfo.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, strInfo); + } else if (strMode == "json") { + std::ostringstream streamInfo; + streamInfo << dmn.proTxHash.ToString() << " " << + dmn.pdmnState->addr.ToString() << " " << + payeeStr << " " << + dmnToStatus(dmn) << " " << + dmn.pdmnState->nPoSePenalty << " " << + dmnToLastPaidTime(dmn) << " " << + dmn.pdmnState->nLastPaidHeight << " " << + EncodeDestination(dmn.pdmnState->keyIDOwner) << " " << + EncodeDestination(dmn.pdmnState->keyIDVoting) << " " << + collateralAddressStr << " " << + dmn.pdmnState->pubKeyOperator.Get().ToString(); + std::string strInfo = streamInfo.str(); + if (strFilter !="" && strInfo.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + UniValue objMN(UniValue::VOBJ); + objMN.pushKV("proTxHash", dmn.proTxHash.ToString()); + objMN.pushKV("address", dmn.pdmnState->addr.ToString()); + objMN.pushKV("payee", payeeStr); + objMN.pushKV("status", dmnToStatus(dmn)); + objMN.pushKV("pospenaltyscore", dmn.pdmnState->nPoSePenalty); + objMN.pushKV("lastpaidtime", dmnToLastPaidTime(dmn)); + objMN.pushKV("lastpaidblock", dmn.pdmnState->nLastPaidHeight); + objMN.pushKV("owneraddress", EncodeDestination(dmn.pdmnState->keyIDOwner)); + objMN.pushKV("votingaddress", EncodeDestination(dmn.pdmnState->keyIDVoting)); + objMN.pushKV("collateraladdress", collateralAddressStr); + objMN.pushKV("pubkeyoperator", dmn.pdmnState->pubKeyOperator.Get().ToString()); + obj.pushKV(strOutpoint, objMN); + } else if (strMode == "lastpaidblock") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, dmn.pdmnState->nLastPaidHeight); + } else if (strMode == "lastpaidtime") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, dmnToLastPaidTime(dmn)); + } else if (strMode == "payee") { + if (strFilter !="" && payeeStr.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, payeeStr); + } else if (strMode == "owneraddress") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, EncodeDestination(dmn.pdmnState->keyIDOwner)); + } else if (strMode == "pubkeyoperator") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, dmn.pdmnState->pubKeyOperator.Get().ToString()); + } else if (strMode == "status") { + std::string strStatus = dmnToStatus(dmn); + if (strFilter !="" && strStatus.find(strFilter) == std::string::npos && + strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, strStatus); + } else if (strMode == "votingaddress") { + if (strFilter !="" && strOutpoint.find(strFilter) == std::string::npos) return; + obj.pushKV(strOutpoint, EncodeDestination(dmn.pdmnState->keyIDVoting)); + } + }); + + return obj; +} From 2ad923a29d2b8f09cd3923254f1c9f803b466c00 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:50:13 -0500 Subject: [PATCH 03/12] Update masternode.cpp --- src/rpc/masternode.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index a688e7a8e7ee..0fd53d67fcef 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -732,20 +732,6 @@ static UniValue masternodelist(const JSONRPCRequest& request) return obj; } -// clang-format off -static const CRPCCommand commands[] = -{ // category name actor (function) argNames - // --------------------- ------------------------ ----------------------- ---------- - { "scc", "masternode", &masternode, {} }, - { "scc", "masternodelist", &masternodelist, {} }, - { "scc", "masternodeshortlist", &masternodeshortlist, {} }, -}; -// clang-format on -void RegisterMasternodeRPCCommands(CRPCTable &t) -{ - for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++) - t.appendCommand(commands[vcidx].name, &commands[vcidx]); -} static UniValue masternodeshortlist(const JSONRPCRequest& request) { @@ -899,3 +885,20 @@ static UniValue masternodeshortlist(const JSONRPCRequest& request) return obj; } + + +// clang-format off +static const CRPCCommand commands[] = +{ // category name actor (function) argNames + // --------------------- ------------------------ ----------------------- ---------- + { "scc", "masternode", &masternode, {} }, + { "scc", "masternodelist", &masternodelist, {} }, + { "scc", "masternodeshortlist", &masternodeshortlist, {} }, +}; +// clang-format on +void RegisterMasternodeRPCCommands(CRPCTable &t) +{ + for (unsigned int vcidx = 0; vcidx < ARRAYLEN(commands); vcidx++) + t.appendCommand(commands[vcidx].name, &commands[vcidx]); +} + From 4ca7161c7589cc2e600246a17cae8009e69cddd4 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:51:59 -0500 Subject: [PATCH 04/12] Update masternode.cpp --- src/rpc/masternode.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 0fd53d67fcef..e1aff01a7b12 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -24,6 +24,7 @@ #include static UniValue masternodelist(const JSONRPCRequest& request); +static UniValue masternodeshortlist(const JSONRPCRequest& request); static void masternode_list_help(const JSONRPCRequest& request) { From 360554341d1cf883afc88c5af33074b75391e4aa Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:53:09 -0500 Subject: [PATCH 05/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index e1aff01a7b12..24777f23c660 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -756,7 +756,7 @@ static UniValue masternodeshortlist(const JSONRPCRequest& request) UniValue obj(UniValue::VOBJ); - auto mnList = deterministicMNManager->GetActiveListAtChainTip(); + auto mnList = deterministicMNManager->GetListAtChainTip(); auto dmnToStatus = [&](auto& dmn) { if (mnList.IsMNValid(dmn)) { return "ENABLED"; From 9c1c40e250d82e41016ccae4007c5283cc993ca0 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:54:09 -0500 Subject: [PATCH 06/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 24777f23c660..2277d4df8bc2 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -76,8 +76,6 @@ static UniValue masternode_shortlist(const JSONRPCRequest& request) newRequest.params.setArray(); // forward params but skip "list" for (unsigned int i = 1; i < request.params.size(); i++) { - if ( - newRequest.params.push_back(request.params[i]); } return masternodeshortlist(newRequest); From abbe21b0968f6a394406eb28203f5b800a1c1f4c Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:55:50 -0500 Subject: [PATCH 07/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 2277d4df8bc2..be64c6ede533 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -776,7 +776,7 @@ static UniValue masternodeshortlist(const JSONRPCRequest& request) mnList.ForEachMN(false, [&](auto& dmn) { - if (mnlist.IsMNPoSeBanned(dmn) { + if (mnList.IsMNPoSeBanned(dmn) { return } From ca8ef074809ce0ad5f641891db6d0c257b0446ab Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:56:47 -0500 Subject: [PATCH 08/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index be64c6ede533..e4324a725054 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -776,7 +776,7 @@ static UniValue masternodeshortlist(const JSONRPCRequest& request) mnList.ForEachMN(false, [&](auto& dmn) { - if (mnList.IsMNPoSeBanned(dmn) { + if (mnList.IsMNPoSeBanned(dmn)) { return } From 42374ddf4436645da62b1da92f602fa8797e453b Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:57:24 -0500 Subject: [PATCH 09/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index e4324a725054..35f44bd1df42 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -777,7 +777,7 @@ static UniValue masternodeshortlist(const JSONRPCRequest& request) mnList.ForEachMN(false, [&](auto& dmn) { if (mnList.IsMNPoSeBanned(dmn)) { - return + return; } std::string strOutpoint = dmn.collateralOutpoint.ToStringShort(); From ef0d0bd9997281e5968013fcfb4fadd651dead50 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Mon, 30 Sep 2024 08:51:32 -0500 Subject: [PATCH 10/12] Update masternode.cpp relabeled from short to enabled added help menu entries --- src/rpc/masternode.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 35f44bd1df42..b59e1eb749cd 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -24,7 +24,7 @@ #include static UniValue masternodelist(const JSONRPCRequest& request); -static UniValue masternodeshortlist(const JSONRPCRequest& request); +static UniValue masternodeenabledlist(const JSONRPCRequest& request); static void masternode_list_help(const JSONRPCRequest& request) { @@ -68,7 +68,7 @@ static UniValue masternode_list(const JSONRPCRequest& request) return masternodelist(newRequest); } -static UniValue masternode_shortlist(const JSONRPCRequest& request) +static UniValue masternode_list(const JSONRPCRequest& request) { if (request.fHelp) masternode_list_help(request); @@ -78,7 +78,7 @@ static UniValue masternode_shortlist(const JSONRPCRequest& request) for (unsigned int i = 1; i < request.params.size(); i++) { newRequest.params.push_back(request.params[i]); } - return masternodeshortlist(newRequest); + return masternodeenabledlist(newRequest); } static void masternode_connect_help(const JSONRPCRequest& request) @@ -530,6 +530,7 @@ static UniValue masternode_payments(const JSONRPCRequest& request) "\nAvailable commands:\n" " count - Get information about number of masternodes\n" " current - DEPRECATED Print info on current masternode winner to be paid the next block (calculated locally)\n" + " enabledlist - Get list of ALL enabled nodes\n" #ifdef ENABLE_WALLET " outputs - Print masternode compatible outputs\n" #endif // ENABLE_WALLET @@ -559,8 +560,8 @@ static UniValue masternode(const JSONRPCRequest& request) if (strCommand == "list") { return masternode_list(request); - } else if (strCommand == "shortlist") { - return masternode_shortlist(request); + } else if (strCommand == "enabledlist") { + return masternode_enabledlist(request); } else if (strCommand == "connect") { return masternode_connect(request); } else if (strCommand == "count") { @@ -732,7 +733,7 @@ static UniValue masternodelist(const JSONRPCRequest& request) return obj; } -static UniValue masternodeshortlist(const JSONRPCRequest& request) +static UniValue masternodeenabledlist(const JSONRPCRequest& request) { std::string strMode = "json"; std::string strFilter = ""; @@ -892,7 +893,7 @@ static const CRPCCommand commands[] = // --------------------- ------------------------ ----------------------- ---------- { "scc", "masternode", &masternode, {} }, { "scc", "masternodelist", &masternodelist, {} }, - { "scc", "masternodeshortlist", &masternodeshortlist, {} }, + { "scc", "masternodeenabledlist", &masternodeenabledlist, {} }, }; // clang-format on void RegisterMasternodeRPCCommands(CRPCTable &t) From 91380255ad3b1cc725b9655d325bc26b5e96b4c0 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Mon, 30 Sep 2024 09:03:40 -0500 Subject: [PATCH 11/12] Update masternode.cpp --- src/rpc/masternode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index b59e1eb749cd..280346bf3e94 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -68,7 +68,7 @@ static UniValue masternode_list(const JSONRPCRequest& request) return masternodelist(newRequest); } -static UniValue masternode_list(const JSONRPCRequest& request) +static UniValue masternode_enabledlist(const JSONRPCRequest& request) { if (request.fHelp) masternode_list_help(request); From 395bb083066ddc060612fca98dffd6a2bd7a8e66 Mon Sep 17 00:00:00 2001 From: grigzy28 <30666305+grigzy28@users.noreply.github.com> Date: Mon, 30 Sep 2024 09:17:38 -0500 Subject: [PATCH 12/12] Update masternode.cpp --- src/rpc/masternode.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/rpc/masternode.cpp b/src/rpc/masternode.cpp index 280346bf3e94..a2a38eaac4db 100644 --- a/src/rpc/masternode.cpp +++ b/src/rpc/masternode.cpp @@ -55,6 +55,35 @@ static void masternode_list_help(const JSONRPCRequest& request) }.Check(request); } +static void masternode_list_enabledhelp(const JSONRPCRequest& request) +{ + RPCHelpMan{"masternodeenabledlist", + "Get a list of masternodes in different modes. This call is identical to 'masternode list' call.\n" + "Available modes:\n" + " addr - Print ip address associated with a masternode (can be additionally filtered, partial match)\n" + " full - Print info in format 'status payee lastpaidtime lastpaidblock IP'\n" + " (can be additionally filtered, partial match)\n" + " info - Print info in format 'status payee IP'\n" + " (can be additionally filtered, partial match)\n" + " json - Print info in JSON format (can be additionally filtered, partial match)\n" + " lastpaidblock - Print the last block height a node was paid on the network\n" + " lastpaidtime - Print the last time a node was paid on the network\n" + " owneraddress - Print the masternode owner Dash address\n" + " payee - Print the masternode payout Dash address (can be additionally filtered,\n" + " partial match)\n" + " pubKeyOperator - Print the masternode operator public key\n" + " status - Print masternode status: ENABLED / POSE_BANNED\n" + " (can be additionally filtered, partial match)\n" + " votingaddress - Print the masternode voting Dash address\n", + { + {"mode", RPCArg::Type::STR, /* default */ "json", "The mode to run list in"}, + {"filter", RPCArg::Type::STR, /* default */ "", "Filter results. Partial match by outpoint by default in all modes, additional matches in some modes are also available"}, + }, + RPCResults{}, + RPCExamples{""}, + }.Check(request); +} + static UniValue masternode_list(const JSONRPCRequest& request) { if (request.fHelp) @@ -750,7 +779,7 @@ static UniValue masternodeenabledlist(const JSONRPCRequest& request) strMode != "payee" && strMode != "pubkeyoperator" && strMode != "status")) { - masternode_list_help(request); + masternode_list_enabledhelp(request); } UniValue obj(UniValue::VOBJ); @@ -893,7 +922,7 @@ static const CRPCCommand commands[] = // --------------------- ------------------------ ----------------------- ---------- { "scc", "masternode", &masternode, {} }, { "scc", "masternodelist", &masternodelist, {} }, - { "scc", "masternodeenabledlist", &masternodeenabledlist, {} }, + { "scc", "masternodeenabledlist", &masternodeenabledlist, {} }, }; // clang-format on void RegisterMasternodeRPCCommands(CRPCTable &t)