diff --git a/src/spork.cpp b/src/spork.cpp index ba26f80d4e7cc..e9628fcf11aac 100644 --- a/src/spork.cpp +++ b/src/spork.cpp @@ -16,6 +16,12 @@ CSporkManager sporkManager; std::map mapSporks; +void CSporkManager::Clear() +{ + strMasterPrivKey = ""; + mapSporksActive.clear(); +} + // PIVX: on startup load spork values from previous session if they exist in the sporkDB void CSporkManager::LoadSporksFromDB() { @@ -213,6 +219,12 @@ bool CSporkManager::SetPrivKey(std::string strPrivKey) return false; } +std::string CSporkManager::ToString() const +{ + LOCK(cs); + return strprintf("Sporks: %llu", mapSporksActive.size()); +} + bool CSporkMessage::Sign(std::string strSignKey) { std::string strMessage = std::to_string(nSporkID) + std::to_string(nValue) + std::to_string(nTimeSigned); diff --git a/src/spork.h b/src/spork.h index 6fc51c285990c..5e0f441b386ee 100644 --- a/src/spork.h +++ b/src/spork.h @@ -100,14 +100,23 @@ class CSporkMessage class CSporkManager { private: - CCriticalSection cs; - std::vector vchSig; + mutable CCriticalSection cs; std::string strMasterPrivKey; std::map mapSporksActive; public: CSporkManager() {} + ADD_SERIALIZE_METHODS; + + template + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) + { + READWRITE(mapSporksActive); + // we don't serialize private key to prevent its leakage + } + + void Clear(); void LoadSporksFromDB(); void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); @@ -120,6 +129,7 @@ class CSporkManager int GetSporkIDByName(std::string strName); bool SetPrivKey(std::string strPrivKey); + std::string ToString() const; }; #endif