2016-12-20 14:26:45 +01:00
|
|
|
// Copyright (c) 2014-2017 The Dash Core developers
|
2015-07-15 04:44:58 +02:00
|
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef MASTERNODE_SYNC_H
|
|
|
|
#define MASTERNODE_SYNC_H
|
|
|
|
|
2016-08-28 12:12:14 +02:00
|
|
|
#include "chain.h"
|
|
|
|
#include "net.h"
|
2015-07-15 04:44:58 +02:00
|
|
|
|
2016-08-28 12:12:14 +02:00
|
|
|
#include <univalue.h>
|
2015-07-17 11:17:15 +02:00
|
|
|
|
2015-07-15 04:44:58 +02:00
|
|
|
class CMasternodeSync;
|
2016-08-28 12:12:14 +02:00
|
|
|
|
2016-08-29 21:11:34 +02:00
|
|
|
static const int MASTERNODE_SYNC_FAILED = -1;
|
2016-08-28 12:12:14 +02:00
|
|
|
static const int MASTERNODE_SYNC_INITIAL = 0;
|
|
|
|
static const int MASTERNODE_SYNC_SPORKS = 1;
|
|
|
|
static const int MASTERNODE_SYNC_LIST = 2;
|
|
|
|
static const int MASTERNODE_SYNC_MNW = 3;
|
|
|
|
static const int MASTERNODE_SYNC_GOVERNANCE = 4;
|
|
|
|
static const int MASTERNODE_SYNC_GOVOBJ = 10;
|
2016-12-06 17:40:37 +01:00
|
|
|
static const int MASTERNODE_SYNC_GOVOBJ_VOTE = 11;
|
2016-08-28 12:12:14 +02:00
|
|
|
static const int MASTERNODE_SYNC_FINISHED = 999;
|
|
|
|
|
2016-12-26 07:44:36 +01:00
|
|
|
static const int MASTERNODE_SYNC_TICK_SECONDS = 6;
|
2016-08-28 12:12:14 +02:00
|
|
|
static const int MASTERNODE_SYNC_TIMEOUT_SECONDS = 30; // our blocks are 2.5 minutes so 30 seconds should be fine
|
|
|
|
|
2017-01-11 00:33:14 +01:00
|
|
|
static const int MASTERNODE_SYNC_ENOUGH_PEERS = 6;
|
|
|
|
|
2015-07-15 04:44:58 +02:00
|
|
|
extern CMasternodeSync masternodeSync;
|
|
|
|
|
|
|
|
//
|
|
|
|
// CMasternodeSync : Sync masternode assets in stages
|
|
|
|
//
|
|
|
|
|
|
|
|
class CMasternodeSync
|
|
|
|
{
|
2016-08-28 12:12:14 +02:00
|
|
|
private:
|
|
|
|
// Keep track of current asset
|
|
|
|
int nRequestedMasternodeAssets;
|
|
|
|
// Count peers we've requested the asset from
|
|
|
|
int nRequestedMasternodeAttempt;
|
|
|
|
|
|
|
|
// Time when current masternode asset sync started
|
|
|
|
int64_t nTimeAssetSyncStarted;
|
|
|
|
|
|
|
|
// Last time when we received some masternode asset ...
|
|
|
|
int64_t nTimeLastMasternodeList;
|
2016-09-21 16:45:29 +02:00
|
|
|
int64_t nTimeLastPaymentVote;
|
2016-12-06 17:40:37 +01:00
|
|
|
int64_t nTimeLastGovernanceItem;
|
2016-08-28 12:12:14 +02:00
|
|
|
// ... or failed
|
|
|
|
int64_t nTimeLastFailure;
|
2015-08-05 02:54:02 +02:00
|
|
|
|
2016-08-28 12:12:14 +02:00
|
|
|
// How many times we failed
|
2015-07-29 06:16:11 +02:00
|
|
|
int nCountFailures;
|
|
|
|
|
2016-03-02 22:20:04 +01:00
|
|
|
// Keep track of current block index
|
|
|
|
const CBlockIndex *pCurrentBlockIndex;
|
|
|
|
|
2017-01-11 00:33:14 +01:00
|
|
|
bool CheckNodeHeight(CNode* pnode, bool fDisconnectStuckNodes = false);
|
2016-08-28 12:12:14 +02:00
|
|
|
void Fail();
|
2016-09-27 09:50:04 +02:00
|
|
|
void ClearFulfilledRequests();
|
2016-08-28 12:12:14 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
CMasternodeSync() { Reset(); }
|
2015-07-15 04:44:58 +02:00
|
|
|
|
2016-09-11 19:49:40 +02:00
|
|
|
void AddedMasternodeList() { nTimeLastMasternodeList = GetTime(); }
|
2016-09-21 16:45:29 +02:00
|
|
|
void AddedPaymentVote() { nTimeLastPaymentVote = GetTime(); }
|
2016-12-06 17:40:37 +01:00
|
|
|
void AddedGovernanceItem() { nTimeLastGovernanceItem = GetTime(); };
|
2016-08-28 12:12:14 +02:00
|
|
|
|
|
|
|
bool IsFailed() { return nRequestedMasternodeAssets == MASTERNODE_SYNC_FAILED; }
|
2016-12-26 07:44:36 +01:00
|
|
|
bool IsBlockchainSynced(bool fBlockAccepted = false);
|
2016-08-29 21:11:34 +02:00
|
|
|
bool IsMasternodeListSynced() { return nRequestedMasternodeAssets > MASTERNODE_SYNC_LIST; }
|
|
|
|
bool IsWinnersListSynced() { return nRequestedMasternodeAssets > MASTERNODE_SYNC_MNW; }
|
|
|
|
bool IsSynced() { return nRequestedMasternodeAssets == MASTERNODE_SYNC_FINISHED; }
|
2016-08-28 12:12:14 +02:00
|
|
|
|
|
|
|
int GetAssetID() { return nRequestedMasternodeAssets; }
|
|
|
|
int GetAttempt() { return nRequestedMasternodeAttempt; }
|
2016-06-08 08:57:16 +02:00
|
|
|
std::string GetAssetName();
|
2015-08-15 17:53:55 +02:00
|
|
|
std::string GetSyncStatus();
|
2015-07-29 10:08:15 +02:00
|
|
|
|
2015-08-04 20:21:27 +02:00
|
|
|
void Reset();
|
2016-08-28 12:12:14 +02:00
|
|
|
void SwitchToNextAsset();
|
|
|
|
|
|
|
|
void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv);
|
|
|
|
void ProcessTick();
|
2016-03-02 22:20:04 +01:00
|
|
|
|
|
|
|
void UpdatedBlockTip(const CBlockIndex *pindex);
|
2015-07-15 04:44:58 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|