neobytes/src/spork.h
2024-02-05 23:00:22 +01:00

123 lines
4.0 KiB
C++

// Copyright (c) 2014-2017 The Dash Core developers
// Copyright (c) 2021-2024 The NeoBytes Core developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#ifndef SPORK_H
#define SPORK_H
#include "hash.h"
#include "net.h"
#include "utilstrencodings.h"
class CSporkMessage;
class CSporkManager;
/*
Don't ever reuse these IDs for other sporks
- This would result in old clients getting confused about which spork is for what
*/
static const int SPORK_START = 10001;
static const int SPORK_END = 10013;
static const int SPORK_2_INSTANTSEND_ENABLED = 10001;
static const int SPORK_3_INSTANTSEND_BLOCK_FILTERING = 10002;
static const int SPORK_5_INSTANTSEND_MAX_VALUE = 10004;
static const int SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT = 10007;
static const int SPORK_9_SUPERBLOCKS_ENABLED = 10008;
static const int SPORK_10_MASTERNODE_PAY_UPDATED_NODES = 10009;
static const int SPORK_12_RECONSIDER_BLOCKS = 10011;
static const int SPORK_13_OLD_SUPERBLOCK_FLAG = 10012;
static const int SPORK_14_REQUIRE_SENTINEL_FLAG = 10013;
static const int64_t SPORK_2_INSTANTSEND_ENABLED_DEFAULT = 0; // ON
static const int64_t SPORK_3_INSTANTSEND_BLOCK_FILTERING_DEFAULT = 0; // ON
static const int64_t SPORK_5_INSTANTSEND_MAX_VALUE_DEFAULT = 1000; // 1000 NBY
static const int64_t SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT = 1654034400; // ON at 2022/06/01 @ 00:00 GMT + 2:00
static const int64_t SPORK_9_SUPERBLOCKS_ENABLED_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_12_RECONSIDER_BLOCKS_DEFAULT = 0; // 0 BLOCKS
static const int64_t SPORK_13_OLD_SUPERBLOCK_FLAG_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_14_REQUIRE_SENTINEL_FLAG_DEFAULT = 4070908800ULL;// OFF
extern std::map<uint256, CSporkMessage> mapSporks;
extern CSporkManager sporkManager;
//
// Spork classes
// Keep track of all of the network spork settings
//
class CSporkMessage
{
private:
std::vector<unsigned char> vchSig;
public:
int nSporkID;
int64_t nValue;
int64_t nTimeSigned;
CSporkMessage(int nSporkID, int64_t nValue, int64_t nTimeSigned) :
nSporkID(nSporkID),
nValue(nValue),
nTimeSigned(nTimeSigned)
{}
CSporkMessage() :
nSporkID(0),
nValue(0),
nTimeSigned(0)
{}
ADD_SERIALIZE_METHODS;
template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
READWRITE(nSporkID);
READWRITE(nValue);
READWRITE(nTimeSigned);
READWRITE(vchSig);
}
uint256 GetHash() const
{
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
ss << nSporkID;
ss << nValue;
ss << nTimeSigned;
return ss.GetHash();
}
bool Sign(std::string strSignKey);
bool CheckSignature();
void Relay();
};
class CSporkManager
{
private:
std::vector<unsigned char> vchSig;
std::string strMasterPrivKey;
std::map<int, CSporkMessage> mapSporksActive;
public:
CSporkManager() {}
void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
void ExecuteSpork(int nSporkID, int nValue);
bool UpdateSpork(int nSporkID, int64_t nValue);
bool IsSporkActive(int nSporkID);
int64_t GetSporkValue(int nSporkID);
int GetSporkIDByName(std::string strName);
std::string GetSporkNameByID(int nSporkID);
bool SetPrivKey(std::string strPrivKey);
};
#endif