neobytes/src/governance-vote.h

128 lines
4.0 KiB
C
Raw Normal View History

2016-04-08 19:47:00 +02:00
// Copyright (c) 2014-2016 The Dash Core developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
2016-04-14 00:41:40 +02:00
#ifndef GOVERANCE_VOTE_H
#define GOVERANCE_VOTE_H
2016-04-08 19:47:00 +02:00
#include "main.h"
2016-04-14 00:41:40 +02:00
#include "sync.h"
#include "net.h"
2016-04-08 19:47:00 +02:00
#include "key.h"
#include "util.h"
#include "base58.h"
#include "masternode.h"
#include <boost/lexical_cast.hpp>
2016-04-14 00:41:40 +02:00
#include "init.h"
2016-04-08 19:47:00 +02:00
using namespace std;
2016-04-14 00:41:40 +02:00
class CBudgetVote;
2016-04-08 19:47:00 +02:00
2016-04-14 22:01:15 +02:00
#define VOTE_OUTCOME_NONE 0
#define VOTE_OUTCOME_YES 1
#define VOTE_OUTCOME_NO 2
#define VOTE_OUTCOME_ABSTAIN 3
// INTENTION OF MASTERNODES REGARDING ITEM
#define VOTE_ACTION_NONE 0 // SIGNAL VARIOUS THINGS TO HAPPEN:
#define VOTE_ACTION_FUNDING 1 // -- fund this object for it's stated amount
#define VOTE_ACTION_VALID 2 // -- this object checks out to sentinel
#define VOTE_ACTION_DELETE 3 // -- this object should be deleted from memory entirely
#define VOTE_ACTION_CLEAR_REGISTERS 4 // -- this object's registers should be cleared (stored elsewhere, e.g. dashdrive)
#define VOTE_ACTION_ENDORSED 5 // -- officially endorsed by the network somehow (delegation)
#define VOTE_ACTION_RELEASE_BOUNTY1 6 // -- release the first bounty associated with this
#define VOTE_ACTION_RELEASE_BOUNTY2 7 // -- second
#define VOTE_ACTION_RELEASE_BOUNTY3 8 // -- third
#define VOTE_ACTION_NOOP1 9 // FOR FURTHER EXPANSION
#define VOTE_ACTION_NOOP2 10 //
#define VOTE_ACTION_NOOP3 11 //
#define VOTE_ACTION_NOOP4 12 //
#define VOTE_ACTION_NOOP5 13 //
#define VOTE_ACTION_NOOP6 14 //
#define VOTE_ACTION_NOOP7 15 //
#define VOTE_ACTION_CUSTOM_START 16 // SENTINEL CUSTOM ACTIONS
#define VOTE_ACTION_CUSTOM_END 35 // 16-35
2016-04-08 19:47:00 +02:00
//
2016-04-14 00:41:40 +02:00
// CBudgetVote - Allow a masternode node to vote and broadcast throughout the network
2016-04-08 19:47:00 +02:00
//
2016-04-14 00:41:40 +02:00
class CBudgetVote
{
//# ----
2016-04-08 19:47:00 +02:00
public:
bool fValid; //if the vote is currently valid / counted
bool fSynced; //if we've sent this to our peers
2016-04-26 06:08:36 +02:00
int nVoteAction; // see VOTE_ACTIONS above
2016-04-14 22:01:15 +02:00
CTxIn vinMasternode;
uint256 nParentHash;
2016-04-26 06:08:36 +02:00
int nVoteOutcome; // see VOTE_OUTCOMES above
2016-04-08 19:47:00 +02:00
int64_t nTime;
std::vector<unsigned char> vchSig;
2016-04-14 00:41:40 +02:00
CBudgetVote();
2016-04-26 19:45:06 +02:00
CBudgetVote(CTxIn vinMasternodeIn, uint256 nParentHashIn, int nVoteActionIn, int nVoteOutcomeIn);
2016-04-08 19:47:00 +02:00
bool Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode);
2016-04-14 00:41:40 +02:00
bool IsValid(bool fSignatureCheck);
void Relay();
2016-04-08 19:47:00 +02:00
std::string GetVoteString() {
2016-04-14 22:01:15 +02:00
std::string ret = "ERROR";
if(nVoteOutcome == VOTE_OUTCOME_NONE) ret = "NONE";
else if(nVoteOutcome == VOTE_OUTCOME_ABSTAIN) ret = "ABSTAIN";
else if(nVoteOutcome == VOTE_OUTCOME_YES) ret = "YES";
else if(nVoteOutcome == VOTE_OUTCOME_NO) ret = "NO";
2016-04-08 19:47:00 +02:00
return ret;
}
uint256 GetHash(){
CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION);
2016-04-14 22:01:15 +02:00
ss << vinMasternode;
ss << nParentHash;
2016-04-26 06:08:36 +02:00
ss << nVoteAction;
2016-04-14 22:01:15 +02:00
ss << nVoteOutcome;
2016-04-08 19:47:00 +02:00
ss << nTime;
return ss.GetHash();
}
ADD_SERIALIZE_METHODS;
template <typename Stream, typename Operation>
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
2016-04-14 22:01:15 +02:00
READWRITE(vinMasternode);
READWRITE(nParentHash);
READWRITE(nVoteOutcome);
2016-04-26 06:08:36 +02:00
READWRITE(nVoteAction);
2016-04-08 19:47:00 +02:00
READWRITE(nTime);
READWRITE(vchSig);
}
};
2016-04-14 20:53:46 +02:00
/**
* 12.1.1 - CGovernanceVoteManager
* -------------------------------
*
Class Structure:
// parent hash vote hash vote
std::map<uint256, std::map<uint256, CBudgetVote> > mapVotes;
GetVote(name, yes_no):
- caching function
- mark last accessed votes
- load serialized files from filesystem if needed
- calc answer
- return result
CacheUnused():
- Cache votes if lastused > 12h/24/48/etc
*/
2016-04-14 00:41:40 +02:00
#endif