1313
1414#include < string>
1515
16- CSporkManager sporkManager;
17-
1816const std::string CSporkManager::SERIALIZATION_VERSION_STRING = " CSporkManager-Version-2" ;
1917
20- std::map<int , int64_t > mapSporkDefaults = {
21- {SPORK_2_INSTANTSEND_ENABLED, 0 }, // ON
22- {SPORK_3_INSTANTSEND_BLOCK_FILTERING, 0 }, // ON
23- {SPORK_5_INSTANTSEND_MAX_VALUE, 1000 }, // 1000 Dash
24- {SPORK_6_NEW_SIGS, 4070908800ULL }, // OFF
25- {SPORK_9_SUPERBLOCKS_ENABLED, 4070908800ULL }, // OFF
26- {SPORK_12_RECONSIDER_BLOCKS, 0 }, // 0 BLOCKS
27- {SPORK_15_DETERMINISTIC_MNS_ENABLED, 4070908800ULL }, // OFF
28- {SPORK_16_INSTANTSEND_AUTOLOCKS, 4070908800ULL }, // OFF
29- {SPORK_17_QUORUM_DKG_ENABLED, 4070908800ULL }, // OFF
30- {SPORK_19_CHAINLOCKS_ENABLED, 4070908800ULL }, // OFF
31- {SPORK_20_INSTANTSEND_LLMQ_BASED, 4070908800ULL }, // OFF
18+ #define MAKE_SPORK_DEF (name, defaultValue ) CSporkDef{name, defaultValue, #name}
19+ std::vector<CSporkDef> sporkDefs = {
20+ MAKE_SPORK_DEF (SPORK_2_INSTANTSEND_ENABLED, 0 ), // ON
21+ MAKE_SPORK_DEF (SPORK_3_INSTANTSEND_BLOCK_FILTERING, 0 ), // ON
22+ MAKE_SPORK_DEF (SPORK_5_INSTANTSEND_MAX_VALUE, 1000 ), // 1000 Dash
23+ MAKE_SPORK_DEF (SPORK_6_NEW_SIGS, 4070908800ULL ), // OFF
24+ MAKE_SPORK_DEF (SPORK_9_SUPERBLOCKS_ENABLED, 4070908800ULL ), // OFF
25+ MAKE_SPORK_DEF (SPORK_12_RECONSIDER_BLOCKS, 0 ), // 0 BLOCKS
26+ MAKE_SPORK_DEF (SPORK_15_DETERMINISTIC_MNS_ENABLED, 4070908800ULL ), // OFF
27+ MAKE_SPORK_DEF (SPORK_16_INSTANTSEND_AUTOLOCKS, 4070908800ULL ), // OFF
28+ MAKE_SPORK_DEF (SPORK_17_QUORUM_DKG_ENABLED, 4070908800ULL ), // OFF
29+ MAKE_SPORK_DEF (SPORK_19_CHAINLOCKS_ENABLED, 4070908800ULL ), // OFF
30+ MAKE_SPORK_DEF (SPORK_20_INSTANTSEND_LLMQ_BASED, 4070908800ULL ), // OFF
3231};
3332
34- bool CSporkManager::SporkValueIsActive (int nSporkID, int64_t &nActiveValueRet) const
33+ CSporkManager sporkManager;
34+
35+ CSporkManager::CSporkManager ()
36+ {
37+ for (auto & sporkDef : sporkDefs) {
38+ sporkDefsById.emplace (sporkDef.sporkId , &sporkDef);
39+ sporkDefsByName.emplace (sporkDef.name , &sporkDef);
40+ }
41+ }
42+
43+ bool CSporkManager::SporkValueIsActive (SporkId nSporkID, int64_t &nActiveValueRet) const
3544{
3645 LOCK (cs);
3746
@@ -192,7 +201,7 @@ void CSporkManager::ProcessSpork(CNode* pfrom, const std::string& strCommand, CD
192201
193202}
194203
195- void CSporkManager::ExecuteSpork (int nSporkID, int nValue)
204+ void CSporkManager::ExecuteSpork (SporkId nSporkID, int nValue)
196205{
197206 // correct fork via spork technology
198207 if (nSporkID == SPORK_12_RECONSIDER_BLOCKS && nValue > 0 ) {
@@ -221,7 +230,7 @@ void CSporkManager::ExecuteSpork(int nSporkID, int nValue)
221230 }
222231}
223232
224- bool CSporkManager::UpdateSpork (int nSporkID, int64_t nValue, CConnman& connman)
233+ bool CSporkManager::UpdateSpork (SporkId nSporkID, int64_t nValue, CConnman& connman)
225234{
226235 CSporkMessage spork = CSporkMessage (nSporkID, nValue, GetAdjustedTime ());
227236
@@ -244,24 +253,13 @@ bool CSporkManager::UpdateSpork(int nSporkID, int64_t nValue, CConnman& connman)
244253 return false ;
245254}
246255
247- bool CSporkManager::IsSporkActive (int nSporkID)
256+ bool CSporkManager::IsSporkActive (SporkId nSporkID)
248257{
249- LOCK (cs);
250- int64_t nSporkValue = -1 ;
251-
252- if (SporkValueIsActive (nSporkID, nSporkValue)) {
253- return nSporkValue < GetAdjustedTime ();
254- }
255-
256- if (mapSporkDefaults.count (nSporkID)) {
257- return mapSporkDefaults[nSporkID] < GetAdjustedTime ();
258- }
259-
260- LogPrint (BCLog::SPORK, " CSporkManager::IsSporkActive -- Unknown Spork ID %d\n " , nSporkID);
261- return false ;
258+ int64_t nSporkValue = GetSporkValue (nSporkID);
259+ return nSporkValue < GetAdjustedTime ();
262260}
263261
264- int64_t CSporkManager::GetSporkValue (int nSporkID)
262+ int64_t CSporkManager::GetSporkValue (SporkId nSporkID)
265263{
266264 LOCK (cs);
267265
@@ -270,50 +268,33 @@ int64_t CSporkManager::GetSporkValue(int nSporkID)
270268 return nSporkValue;
271269 }
272270
273- if (mapSporkDefaults.count (nSporkID)) {
274- return mapSporkDefaults[nSporkID];
271+ auto it = sporkDefsById.find (nSporkID);
272+ if (it != sporkDefsById.end ()) {
273+ return it->second ->defaultValue ;
275274 }
276275
277276 LogPrint (BCLog::SPORK, " CSporkManager::GetSporkValue -- Unknown Spork ID %d\n " , nSporkID);
278277 return -1 ;
279278}
280279
281- int CSporkManager::GetSporkIDByName (const std::string& strName)
280+ SporkId CSporkManager::GetSporkIDByName (const std::string& strName)
282281{
283- if (strName == " SPORK_2_INSTANTSEND_ENABLED" ) return SPORK_2_INSTANTSEND_ENABLED;
284- if (strName == " SPORK_3_INSTANTSEND_BLOCK_FILTERING" ) return SPORK_3_INSTANTSEND_BLOCK_FILTERING;
285- if (strName == " SPORK_5_INSTANTSEND_MAX_VALUE" ) return SPORK_5_INSTANTSEND_MAX_VALUE;
286- if (strName == " SPORK_6_NEW_SIGS" ) return SPORK_6_NEW_SIGS;
287- if (strName == " SPORK_9_SUPERBLOCKS_ENABLED" ) return SPORK_9_SUPERBLOCKS_ENABLED;
288- if (strName == " SPORK_12_RECONSIDER_BLOCKS" ) return SPORK_12_RECONSIDER_BLOCKS;
289- if (strName == " SPORK_15_DETERMINISTIC_MNS_ENABLED" ) return SPORK_15_DETERMINISTIC_MNS_ENABLED;
290- if (strName == " SPORK_16_INSTANTSEND_AUTOLOCKS" ) return SPORK_16_INSTANTSEND_AUTOLOCKS;
291- if (strName == " SPORK_17_QUORUM_DKG_ENABLED" ) return SPORK_17_QUORUM_DKG_ENABLED;
292- if (strName == " SPORK_19_CHAINLOCKS_ENABLED" ) return SPORK_19_CHAINLOCKS_ENABLED;
293- if (strName == " SPORK_20_INSTANTSEND_LLMQ_BASED" ) return SPORK_20_INSTANTSEND_LLMQ_BASED;
294-
295- LogPrint (BCLog::SPORK, " CSporkManager::GetSporkIDByName -- Unknown Spork name '%s'\n " , strName);
296- return -1 ;
282+ auto it = sporkDefsByName.find (strName);
283+ if (it == sporkDefsByName.end ()) {
284+ LogPrint (BCLog::SPORK, " CSporkManager::GetSporkIDByName -- Unknown Spork name '%s'\n " , strName);
285+ return SPORK_INVALID;
286+ }
287+ return it->second ->sporkId ;
297288}
298289
299- std::string CSporkManager::GetSporkNameByID (int nSporkID)
290+ std::string CSporkManager::GetSporkNameByID (SporkId nSporkID)
300291{
301- switch (nSporkID) {
302- case SPORK_2_INSTANTSEND_ENABLED: return " SPORK_2_INSTANTSEND_ENABLED" ;
303- case SPORK_3_INSTANTSEND_BLOCK_FILTERING: return " SPORK_3_INSTANTSEND_BLOCK_FILTERING" ;
304- case SPORK_5_INSTANTSEND_MAX_VALUE: return " SPORK_5_INSTANTSEND_MAX_VALUE" ;
305- case SPORK_6_NEW_SIGS: return " SPORK_6_NEW_SIGS" ;
306- case SPORK_9_SUPERBLOCKS_ENABLED: return " SPORK_9_SUPERBLOCKS_ENABLED" ;
307- case SPORK_12_RECONSIDER_BLOCKS: return " SPORK_12_RECONSIDER_BLOCKS" ;
308- case SPORK_15_DETERMINISTIC_MNS_ENABLED: return " SPORK_15_DETERMINISTIC_MNS_ENABLED" ;
309- case SPORK_16_INSTANTSEND_AUTOLOCKS: return " SPORK_16_INSTANTSEND_AUTOLOCKS" ;
310- case SPORK_17_QUORUM_DKG_ENABLED: return " SPORK_17_QUORUM_DKG_ENABLED" ;
311- case SPORK_19_CHAINLOCKS_ENABLED: return " SPORK_19_CHAINLOCKS_ENABLED" ;
312- case SPORK_20_INSTANTSEND_LLMQ_BASED: return " SPORK_20_INSTANTSEND_LLMQ_BASED" ;
313- default :
314- LogPrint (BCLog::SPORK, " CSporkManager::GetSporkNameByID -- Unknown Spork ID %d\n " , nSporkID);
315- return " Unknown" ;
292+ auto it = sporkDefsById.find (nSporkID);
293+ if (it == sporkDefsById.end ()) {
294+ LogPrint (BCLog::SPORK, " CSporkManager::GetSporkNameByID -- Unknown Spork ID %d\n " , nSporkID);
295+ return " Unknown" ;
316296 }
297+ return it->second ->name ;
317298}
318299
319300bool CSporkManager::GetSporkByHash (const uint256& hash, CSporkMessage &sporkRet)
0 commit comments