dash/src/spork.h

111 lines
3.3 KiB
C
Raw Normal View History

2015-02-09 21:54:51 +01:00
2015-03-18 00:06:58 +01:00
// Copyright (c) 2009-2012 The Dash developers
2015-02-09 21:54:51 +01:00
// 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 "sync.h"
#include "net.h"
#include "key.h"
#include "util.h"
#include "base58.h"
#include "main.h"
2015-04-03 00:51:08 +02:00
#include "protocol.h"
#include "darksend.h"
#include <boost/lexical_cast.hpp>
2015-02-09 21:54:51 +01:00
using namespace std;
using namespace boost;
/*
Don't ever reuse these IDs for other sporks
- This would result in old clients getting confused about which spork is for what
*/
#define SPORK_START 10001
#define SPORK_END 10009
2015-02-09 21:54:51 +01:00
#define SPORK_2_INSTANTX 10001
#define SPORK_3_INSTANTX_BLOCK_FILTERING 10002
2015-02-11 15:47:21 +01:00
#define SPORK_5_MAX_VALUE 10004
#define SPORK_7_MASTERNODE_SCANNING 10006
#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT 10007
#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT 10008
#define SPORK_10_MASTERNODE_PAY_NEWEST_NODES 10009
2015-07-08 19:25:47 +02:00
#define SPORK_11_RESET_BUDGET 10010
2015-02-09 21:54:51 +01:00
#define SPORK_2_INSTANTX_DEFAULT 978307200 //2001-1-1
#define SPORK_3_INSTANTX_BLOCK_FILTERING_DEFAULT 1424217600 //2015-2-18
2015-03-18 00:06:58 +01:00
#define SPORK_5_MAX_VALUE_DEFAULT 1000 //1000 DASH
#define SPORK_7_MASTERNODE_SCANNING_DEFAULT 978307200 //2001-1-1
#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT 1444217600 //OFF
#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT 1444217600 //OFF
#define SPORK_10_MASTERNODE_PAY_NEWEST_NODES_DEFAULT 1444217600 //OFF
2015-07-08 19:25:47 +02:00
#define SPORK_11_RESET_BUDGET_DEFAULT 0
2015-07-08 19:17:16 +02:00
2015-02-09 21:54:51 +01:00
class CSporkMessage;
class CSporkManager;
extern std::map<uint256, CSporkMessage> mapSporks;
extern std::map<int, CSporkMessage> mapSporksActive;
extern CSporkManager sporkManager;
void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
2015-02-11 15:47:21 +01:00
int GetSporkValue(int nSporkID);
2015-02-09 21:54:51 +01:00
bool IsSporkActive(int nSporkID);
2015-02-12 05:05:09 +01:00
void ExecuteSpork(int nSporkID, int nValue);
2015-02-09 21:54:51 +01:00
//
// Spork Class
// Keeps track of all of the network spork settings
//
class CSporkMessage
{
public:
std::vector<unsigned char> vchSig;
int nSporkID;
2015-02-11 15:47:21 +01:00
int64_t nValue;
2015-02-09 21:54:51 +01:00
int64_t nTimeSigned;
uint256 GetHash(){
uint256 n = HashX11(BEGIN(nSporkID), END(nTimeSigned));
return n;
}
2015-04-03 00:51:08 +02:00
ADD_SERIALIZE_METHODS;
template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
2015-02-09 21:54:51 +01:00
READWRITE(nSporkID);
2015-02-11 15:47:21 +01:00
READWRITE(nValue);
2015-02-09 21:54:51 +01:00
READWRITE(nTimeSigned);
READWRITE(vchSig);
2015-04-03 00:51:08 +02:00
}
2015-02-09 21:54:51 +01:00
};
class CSporkManager
{
private:
std::vector<unsigned char> vchSig;
std::string strMasterPrivKey;
public:
CSporkManager() {
}
std::string GetSporkNameByID(int id);
int GetSporkIDByName(std::string strName);
2015-02-11 15:47:21 +01:00
bool UpdateSpork(int nSporkID, int64_t nValue);
2015-02-09 21:54:51 +01:00
bool SetPrivKey(std::string strPrivKey);
bool CheckSignature(CSporkMessage& spork);
bool Sign(CSporkMessage& spork);
void Relay(CSporkMessage& msg);
};
2015-04-03 00:51:08 +02:00
#endif