Skip to content

Commit 87b3011

Browse files
committed
refactor: duplicated code between governance RPC list and diff
1 parent faa6179 commit 87b3011

File tree

1 file changed

+15
-35
lines changed

1 file changed

+15
-35
lines changed

src/rpc/governance.cpp

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -656,10 +656,14 @@ static UniValue ListObjects(CGovernanceManager& govman, const CDeterministicMNLi
656656
}
657657

658658
// USERS CAN QUERY THE SYSTEM FOR A LIST OF VARIOUS GOVERNANCE ITEMS
659-
static RPCHelpMan gobject_list()
659+
static RPCHelpMan gobject_list_helper(const bool make_a_diff)
660660
{
661-
return RPCHelpMan{"gobject list",
662-
"List governance objects (can be filtered by signal and/or object type)\n",
661+
const std::string command{make_a_diff ? "gobject diff" : "gobject list"};
662+
const std::string description{make_a_diff ? "List differences since last diff or list\n"
663+
: "List governance objects (can be filtered by signal and/or object type)\n"};
664+
665+
return RPCHelpMan{command,
666+
description,
663667
{
664668
{"signal", RPCArg::Type::STR, /* default */ "valid", "cached signal, possible values: [valid|funding|delete|endorsed|all]"},
665669
{"type", RPCArg::Type::STR, /* default */ "all", "object type, possible values: [proposals|triggers|all]"},
@@ -687,44 +691,20 @@ static RPCHelpMan gobject_list()
687691
CHECK_NONFATAL(node.dmnman);
688692
CHECK_NONFATAL(node.govman);
689693

690-
return ListObjects(*node.govman, node.dmnman->GetListAtChainTip(), chainman, strCachedSignal, strType, 0);
694+
const int64_t last_time = make_a_diff ? node.govman->GetLastDiffTime() : 0;
695+
return ListObjects(*node.govman, node.dmnman->GetListAtChainTip(), chainman, strCachedSignal, strType, last_time);
691696
},
692697
};
693698
}
694699

695-
static RPCHelpMan gobject_diff()
696-
{
697-
return RPCHelpMan{"gobject diff",
698-
"List differences since last diff or list\n",
699-
{
700-
{"signal", RPCArg::Type::STR, /* default */ "valid", "cached signal, possible values: [valid|funding|delete|endorsed|all]"},
701-
{"type", RPCArg::Type::STR, /* default */ "all", "object type, possible values: [proposals|triggers|all]"},
702-
},
703-
RPCResults{},
704-
RPCExamples{""},
705-
[&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
700+
static RPCHelpMan gobject_list()
706701
{
707-
std::string strCachedSignal = "valid";
708-
if (!request.params[0].isNull()) {
709-
strCachedSignal = request.params[0].get_str();
710-
}
711-
if (strCachedSignal != "valid" && strCachedSignal != "funding" && strCachedSignal != "delete" && strCachedSignal != "endorsed" && strCachedSignal != "all")
712-
return "Invalid signal, should be 'valid', 'funding', 'delete', 'endorsed' or 'all'";
713-
714-
std::string strType = "all";
715-
if (!request.params[1].isNull()) {
716-
strType = request.params[1].get_str();
717-
}
718-
if (strType != "proposals" && strType != "triggers" && strType != "all")
719-
return "Invalid type, should be 'proposals', 'triggers' or 'all'";
720-
721-
const NodeContext& node = EnsureAnyNodeContext(request.context);
722-
const ChainstateManager& chainman = EnsureChainman(node);
723-
CHECK_NONFATAL(node.dmnman && node.govman);
702+
return gobject_list_helper(false);
703+
}
724704

725-
return ListObjects(*node.govman, node.dmnman->GetListAtChainTip(), chainman, strCachedSignal, strType, node.govman->GetLastDiffTime());
726-
},
727-
};
705+
static RPCHelpMan gobject_diff()
706+
{
707+
return gobject_list_helper(true);
728708
}
729709

730710
// GET SPECIFIC GOVERNANCE ENTRY

0 commit comments

Comments
 (0)