From 3709ba8d72d704f043c02d1cfa554fdbffa2a02d Mon Sep 17 00:00:00 2001 From: random-zebra Date: Tue, 10 Sep 2019 19:45:05 +0200 Subject: [PATCH] [Spork] Introduce CSporkDef and remove if/else blocks --- src/spork.cpp | 89 ++++++++++++++++++++++++++------------------------- src/spork.h | 17 +++------- src/sporkid.h | 10 ++++++ 3 files changed, 61 insertions(+), 55 deletions(-) diff --git a/src/spork.cpp b/src/spork.cpp index b8eea54b07..517e64ec3b 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -16,6 +16,29 @@ CSporkManager sporkManager; std::map mapSporks; +#define MAKE_SPORK_DEF(name, defaultValue) CSporkDef(name, defaultValue, #name) + +std::vector sporkDefs = { + MAKE_SPORK_DEF(SPORK_2_SWIFTTX, 0), // ON + MAKE_SPORK_DEF(SPORK_3_SWIFTTX_BLOCK_FILTERING, 0), // ON + MAKE_SPORK_DEF(SPORK_5_MAX_VALUE, 1000), // 1000 PIV + MAKE_SPORK_DEF(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT, 4070908800ULL), // OFF + MAKE_SPORK_DEF(SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT, 4070908800ULL), // OFF + MAKE_SPORK_DEF(SPORK_10_MASTERNODE_PAY_UPDATED_NODES, 0), // OFF + MAKE_SPORK_DEF(SPORK_13_ENABLE_SUPERBLOCKS, 4070908800ULL), // OFF + MAKE_SPORK_DEF(SPORK_14_NEW_PROTOCOL_ENFORCEMENT, 4070908800ULL), // OFF + MAKE_SPORK_DEF(SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2, 4070908800ULL), // OFF + MAKE_SPORK_DEF(SPORK_16_ZEROCOIN_MAINTENANCE_MODE, 4070908800ULL), // OFF +}; + +CSporkManager::CSporkManager() +{ + for (auto& sporkDef : sporkDefs) { + sporkDefsById.emplace(sporkDef.sporkId, &sporkDef); + sporkDefsByName.emplace(sporkDef.name, &sporkDef); + } +} + void CSporkManager::Clear() { strMasterPrivKey = ""; @@ -145,67 +168,47 @@ bool CSporkManager::UpdateSpork(SporkId nSporkID, int64_t nValue) // grab the spork value, and see if it's off bool CSporkManager::IsSporkActive(SporkId nSporkID) { - int64_t r = GetSporkValue(nSporkID); - if (r == -1) return false; - return r < GetAdjustedTime(); + return GetSporkValue(nSporkID) < GetAdjustedTime(); } // grab the value of the spork on the network, or the default int64_t CSporkManager::GetSporkValue(SporkId nSporkID) { LOCK(cs); - int64_t r = -1; if (mapSporksActive.count(nSporkID)) { - r = mapSporksActive[nSporkID].nValue; + return mapSporksActive[nSporkID].nValue; + } else { - if (nSporkID == SPORK_2_SWIFTTX) r = SPORK_2_SWIFTTX_DEFAULT; - if (nSporkID == SPORK_3_SWIFTTX_BLOCK_FILTERING) r = SPORK_3_SWIFTTX_BLOCK_FILTERING_DEFAULT; - if (nSporkID == SPORK_5_MAX_VALUE) r = SPORK_5_MAX_VALUE_DEFAULT; - if (nSporkID == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) r = SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT; - if (nSporkID == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) r = SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT; - if (nSporkID == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) r = SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT; - if (nSporkID == SPORK_13_ENABLE_SUPERBLOCKS) r = SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT; - if (nSporkID == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) r = SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT; - if (nSporkID == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) r = SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT; - if (nSporkID == SPORK_16_ZEROCOIN_MAINTENANCE_MODE) r = SPORK_16_ZEROCOIN_MAINTENANCE_MODE_DEFAULT; - - if (r == -1) LogPrintf("%s : Unknown Spork %d\n", __func__, nSporkID); + auto it = sporkDefsById.find(nSporkID); + if (it != sporkDefsById.end()) { + return it->second->defaultValue; + } else { + LogPrintf("%s : Unknown Spork %d\n", __func__, nSporkID); + } } - return r; + return -1; } SporkId CSporkManager::GetSporkIDByName(std::string strName) { - if (strName == "SPORK_2_SWIFTTX") return SPORK_2_SWIFTTX; - if (strName == "SPORK_3_SWIFTTX_BLOCK_FILTERING") return SPORK_3_SWIFTTX_BLOCK_FILTERING; - if (strName == "SPORK_5_MAX_VALUE") return SPORK_5_MAX_VALUE; - if (strName == "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT") return SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT; - if (strName == "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT") return SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT; - if (strName == "SPORK_10_MASTERNODE_PAY_UPDATED_NODES") return SPORK_10_MASTERNODE_PAY_UPDATED_NODES; - if (strName == "SPORK_13_ENABLE_SUPERBLOCKS") return SPORK_13_ENABLE_SUPERBLOCKS; - if (strName == "SPORK_14_NEW_PROTOCOL_ENFORCEMENT") return SPORK_14_NEW_PROTOCOL_ENFORCEMENT; - if (strName == "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2") return SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2; - if (strName == "SPORK_16_ZEROCOIN_MAINTENANCE_MODE") return SPORK_16_ZEROCOIN_MAINTENANCE_MODE; - - return SPORK_INVALID; + auto it = sporkDefsByName.find(strName); + if (it == sporkDefsByName.end()) { + LogPrintf("%s -- Unknown Spork name '%s'\n", __func__, strName); + return SPORK_INVALID; + } + return it->second->sporkId; } -std::string CSporkManager::GetSporkNameByID(SporkId id) +std::string CSporkManager::GetSporkNameByID(SporkId nSporkID) { - if (id == SPORK_2_SWIFTTX) return "SPORK_2_SWIFTTX"; - if (id == SPORK_3_SWIFTTX_BLOCK_FILTERING) return "SPORK_3_SWIFTTX_BLOCK_FILTERING"; - if (id == SPORK_5_MAX_VALUE) return "SPORK_5_MAX_VALUE"; - if (id == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) return "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"; - if (id == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) return "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT"; - if (id == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) return "SPORK_10_MASTERNODE_PAY_UPDATED_NODES"; - if (id == SPORK_13_ENABLE_SUPERBLOCKS) return "SPORK_13_ENABLE_SUPERBLOCKS"; - if (id == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) return "SPORK_14_NEW_PROTOCOL_ENFORCEMENT"; - if (id == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) return "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2"; - if (id == SPORK_16_ZEROCOIN_MAINTENANCE_MODE) return "SPORK_16_ZEROCOIN_MAINTENANCE_MODE"; - - return "Unknown"; + auto it = sporkDefsById.find(nSporkID); + if (it == sporkDefsById.end()) { + LogPrint("%s -- Unknown Spork ID %d\n", __func__, nSporkID); + return "Unknown"; + } + return it->second->name; } bool CSporkManager::SetPrivKey(std::string strPrivKey) diff --git a/src/spork.h b/src/spork.h index ea636e103d..5fc84fa7a2 100644 --- a/src/spork.h +++ b/src/spork.h @@ -6,6 +6,8 @@ #ifndef SPORK_H #define SPORK_H +#include + #include "base58.h" #include "hash.h" #include "key.h" @@ -18,17 +20,6 @@ #include "obfuscation.h" #include "protocol.h" -#define SPORK_2_SWIFTTX_DEFAULT 978307200 //2001-1-1 -#define SPORK_3_SWIFTTX_BLOCK_FILTERING_DEFAULT 1424217600 //2015-2-18 -#define SPORK_5_MAX_VALUE_DEFAULT 1000 //1000 PIV -#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT 4070908800 //OFF -#define SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT 4070908800 //OFF -#define SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT 4070908800 //OFF -#define SPORK_16_ZEROCOIN_MAINTENANCE_MODE_DEFAULT 4070908800 //OFF - class CSporkMessage; class CSporkManager; @@ -77,10 +68,12 @@ class CSporkManager private: mutable CCriticalSection cs; std::string strMasterPrivKey; + std::unordered_map sporkDefsById; + std::unordered_map sporkDefsByName; std::map mapSporksActive; public: - CSporkManager() {} + CSporkManager(); ADD_SERIALIZE_METHODS; diff --git a/src/sporkid.h b/src/sporkid.h index 9ff3eb3aab..a98d2a1007 100644 --- a/src/sporkid.h +++ b/src/sporkid.h @@ -28,4 +28,14 @@ enum SporkId : int32_t { SPORK_INVALID = -1 }; +// Default values +struct CSporkDef +{ + CSporkDef(): sporkId(SPORK_INVALID), defaultValue(0) {} + CSporkDef(SporkId id, int64_t val, std::string n): sporkId(id), defaultValue(val), name(n) {} + SporkId sporkId; + int64_t defaultValue; + std::string name; +}; + #endif