From 50bfe7047625679d4ecb2e90382a7dbca67bb4c6 Mon Sep 17 00:00:00 2001 From: random-zebra Date: Tue, 10 Sep 2019 22:21:26 +0200 Subject: [PATCH] Fix spork RPC to use new spork defs This also removes the need for SPORK_START/SPORK_END --- src/rpc/misc.cpp | 20 +++++++++----------- src/spork.cpp | 21 ++++++--------------- src/spork.h | 1 + src/sporkid.h | 2 -- 4 files changed, 16 insertions(+), 28 deletions(-) diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index 449787fa3e116..c0846e73a6b6f 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -27,6 +27,8 @@ #include +extern std::vector sporkDefs; + /** * @note Do not add or change anything in the information returned by this @@ -289,27 +291,23 @@ class DescribeAddressVisitor : public boost::static_visitor */ UniValue spork(const UniValue& params, bool fHelp) { - SporkId nSporkID; if (params.size() == 1 && params[0].get_str() == "show") { UniValue ret(UniValue::VOBJ); - for (int i = SPORK_START; i <= SPORK_END; i++) { - nSporkID = (SporkId) i; - if (sporkManager.GetSporkNameByID((SporkId) nSporkID) != "Unknown") - ret.push_back(Pair(sporkManager.GetSporkNameByID(nSporkID), sporkManager.GetSporkValue(nSporkID))); + for (const auto& sporkDef : sporkDefs) { + ret.push_back(Pair(sporkDef.name, sporkManager.GetSporkValue(sporkDef.sporkId))); } return ret; } else if (params.size() == 1 && params[0].get_str() == "active") { UniValue ret(UniValue::VOBJ); - for (int i = SPORK_START; i <= SPORK_END; i++) { - nSporkID = (SporkId) i; - if (sporkManager.GetSporkNameByID(nSporkID) != "Unknown") - ret.push_back(Pair(sporkManager.GetSporkNameByID(nSporkID), sporkManager.IsSporkActive(nSporkID))); + for (const auto& sporkDef : sporkDefs) { + ret.push_back(Pair(sporkDef.name, sporkManager.IsSporkActive(sporkDef.sporkId))); } return ret; } else if (params.size() == 2) { - nSporkID = sporkManager.GetSporkIDByName(params[0].get_str()); + // advanced mode, update spork values + SporkId nSporkID = sporkManager.GetSporkIDByName(params[0].get_str()); if (nSporkID == SPORK_INVALID) { - return "Invalid spork name"; + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid spork name"); } // SPORK VALUE diff --git a/src/spork.cpp b/src/spork.cpp index 517e64ec3bea4..50985675ff79f 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -9,12 +9,6 @@ #include "spork.h" #include "sporkdb.h" -class CSporkMessage; -class CSporkManager; - -CSporkManager sporkManager; - -std::map mapSporks; #define MAKE_SPORK_DEF(name, defaultValue) CSporkDef(name, defaultValue, #name) @@ -31,6 +25,9 @@ std::vector sporkDefs = { MAKE_SPORK_DEF(SPORK_16_ZEROCOIN_MAINTENANCE_MODE, 4070908800ULL), // OFF }; +CSporkManager sporkManager; +std::map mapSporks; + CSporkManager::CSporkManager() { for (auto& sporkDef : sporkDefs) { @@ -48,17 +45,11 @@ void CSporkManager::Clear() // PIVX: on startup load spork values from previous session if they exist in the sporkDB void CSporkManager::LoadSporksFromDB() { - SporkId id; - for (int i = SPORK_START; i <= SPORK_END; ++i) { - id = (SporkId) i; - // Since not all spork IDs are in use, we have to exclude undefined IDs - std::string strSpork = sporkManager.GetSporkNameByID(id); - if (strSpork == "Unknown") continue; - + for (const auto& sporkDef : sporkDefs) { // attempt to read spork from sporkDB CSporkMessage spork; - if (!pSporkDB->ReadSpork(id, spork)) { - LogPrintf("%s : no previous value for %s found in database\n", __func__, strSpork); + if (!pSporkDB->ReadSpork(sporkDef.sporkId, spork)) { + LogPrintf("%s : no previous value for %s found in database\n", __func__, sporkDef.name); continue; } diff --git a/src/spork.h b/src/spork.h index f9dc691a3730c..45538aea68634 100644 --- a/src/spork.h +++ b/src/spork.h @@ -23,6 +23,7 @@ class CSporkMessage; class CSporkManager; +extern std::vector sporkDefs; extern std::map mapSporks; extern CSporkManager sporkManager; diff --git a/src/sporkid.h b/src/sporkid.h index a98d2a1007393..7d681725926c2 100644 --- a/src/sporkid.h +++ b/src/sporkid.h @@ -23,8 +23,6 @@ enum SporkId : int32_t { SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2 = 10014, SPORK_16_ZEROCOIN_MAINTENANCE_MODE = 10015, - SPORK_START = SPORK_2_SWIFTTX, - SPORK_END = SPORK_16_ZEROCOIN_MAINTENANCE_MODE, SPORK_INVALID = -1 };