mirror of
https://github.com/dashpay/dash.git
synced 2024-12-30 14:25:53 +01:00
f95aae2b30
* Remove CActiveLegacyMasternodeManager * Remove sentinelping RPC * Remove unused P2P messages and inv types There are still places where these are used in the code. The next commits will clean these up. * Remove MNB/MNP/MNVERIFY related code from masternode(man).h/cpp * Remove all legacy code regarding block MN payee voting * Remove MASTERNODE_SYNC_LIST and MASTERNODE_SYNC_MNW states Also replace all uses of IsMasternodeListSynced and IsWinnersListSynced with IsBlockchainSynced. * Remove unsupported masternode RPCs * Remove UpdateLastPaid methods * Remove duplicate deterministicmns.h include * Remove masternode.conf support * Remove legacy MN lists support from masternode list GUI * Remove unnecessary AskForMN call * Remove compatibility code in CPrivateSendQueue::GetSignatureHash * Don't add locally calculated MN payee in case GetBlockTxOuts failed This is not valid in DIP3 mode * Remove check for IsDeterministicMNsSporkActive in "masternode status" * Move CMasternode::IsValidNetAddr to CActiveDeterministicMasternodeManager * Remove use of CMasternode::CheckCollateral in governance code * Remove uses of MASTERNODE_SENTINEL_PING_MAX_SECONDS/MASTERNODE_SENTINEL_PING_MAX_SECONDS * Remove support for "-masternodeprivkey" * Remove pre-DIP3 vote cleanup * Remove compatibility code for quorumModifierHash/masternodeProTxHash * Remove check for invalid nBlockHeight in CMasternodePayments::GetBlockTxOuts ...and let it crash instead. We expect this method to be called with the correct height now (after DIP3 was fully deployed). * Remove ECDSA based Sign/CheckSignature from CGovernanceObject Only masternodes sign governance objects, so there is no need for ECDSA support here anymore. * Always add superblock and MN reward payments into new block * Always check block payees (except if fLiteMode==true) * Always allow superblock and MN payees in same block * Remove/Fix a few references to masternode.conf and related stuff Also delete guide-startmany.md and masternode_conf.md * Implement NotifyMasternodeListChanged signal and call governance maintenance * Remove non-DIP3 code path from CMasternodeMan::Find * Remove remaining unused code from CMasternode/CMasternodeMan * Always load governance.dat on startup * Mine an empty block instead of incrementing nHeight from chain tip in miner tests This test is crashing otherwise in GetBlockTxOuts as it tries to access a previous block that is not existing. * Skip MN payments verification on historical blocks (pre-DIP3 blocks) Even though DIP3 was active on BIP9 level, the spork was not active yet at that point meaning that payments were not enforced at that time. * Remove unused state and CollateralStatus enums * Unconditionally return false from IsBlockPayeeValid when IsTransactionValid returns false IsTransactionValid already handles the case where IsDIP3Active() returns false, making it return true. * Add override keyword to CDSNotificationInterface::NotifyMasternodeListChanged * Fix help for masternodelist status (POSE_BANNED and no OUTPOINT_SPENT)
77 lines
2.5 KiB
C++
77 lines
2.5 KiB
C++
// Copyright (c) 2014-2017 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.
|
|
#ifndef MASTERNODE_SYNC_H
|
|
#define MASTERNODE_SYNC_H
|
|
|
|
#include "chain.h"
|
|
#include "net.h"
|
|
|
|
class CMasternodeSync;
|
|
|
|
static const int MASTERNODE_SYNC_FAILED = -1;
|
|
static const int MASTERNODE_SYNC_INITIAL = 0; // sync just started, was reset recently or still in IDB
|
|
static const int MASTERNODE_SYNC_WAITING = 1; // waiting after initial to see if we can get more headers/blocks
|
|
static const int MASTERNODE_SYNC_GOVERNANCE = 4;
|
|
static const int MASTERNODE_SYNC_GOVOBJ = 10;
|
|
static const int MASTERNODE_SYNC_GOVOBJ_VOTE = 11;
|
|
static const int MASTERNODE_SYNC_FINISHED = 999;
|
|
|
|
static const int MASTERNODE_SYNC_TICK_SECONDS = 6;
|
|
static const int MASTERNODE_SYNC_TIMEOUT_SECONDS = 30; // our blocks are 2.5 minutes so 30 seconds should be fine
|
|
|
|
extern CMasternodeSync masternodeSync;
|
|
|
|
//
|
|
// CMasternodeSync : Sync masternode assets in stages
|
|
//
|
|
|
|
class CMasternodeSync
|
|
{
|
|
private:
|
|
// Keep track of current asset
|
|
int nCurrentAsset;
|
|
// Count peers we've requested the asset from
|
|
int nTriedPeerCount;
|
|
|
|
// Time when current masternode asset sync started
|
|
int64_t nTimeAssetSyncStarted;
|
|
// ... last bumped
|
|
int64_t nTimeLastBumped;
|
|
// ... or failed
|
|
int64_t nTimeLastFailure;
|
|
|
|
void Fail();
|
|
|
|
public:
|
|
CMasternodeSync() { Reset(); }
|
|
|
|
|
|
void SendGovernanceSyncRequest(CNode* pnode, CConnman& connman);
|
|
|
|
bool IsFailed() { return nCurrentAsset == MASTERNODE_SYNC_FAILED; }
|
|
bool IsBlockchainSynced() { return nCurrentAsset > MASTERNODE_SYNC_WAITING; }
|
|
bool IsSynced() { return nCurrentAsset == MASTERNODE_SYNC_FINISHED; }
|
|
|
|
int GetAssetID() { return nCurrentAsset; }
|
|
int GetAttempt() { return nTriedPeerCount; }
|
|
void BumpAssetLastTime(const std::string& strFuncName);
|
|
int64_t GetAssetStartTime() { return nTimeAssetSyncStarted; }
|
|
std::string GetAssetName();
|
|
std::string GetSyncStatus();
|
|
|
|
void Reset();
|
|
void SwitchToNextAsset(CConnman& connman);
|
|
|
|
void ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv);
|
|
void ProcessTick(CConnman& connman);
|
|
|
|
void AcceptedBlockHeader(const CBlockIndex *pindexNew);
|
|
void NotifyHeaderTip(const CBlockIndex *pindexNew, bool fInitialDownload, CConnman& connman);
|
|
void UpdatedBlockTip(const CBlockIndex *pindexNew, bool fInitialDownload, CConnman& connman);
|
|
|
|
void DoMaintenance(CConnman &connman);
|
|
};
|
|
|
|
#endif
|