Skip next mn payments winners when selecting a MN to mix on (#1921)
This commit is contained in:
parent
0670695fea
commit
271c249e15
@ -427,14 +427,14 @@ bool CMasternodePayments::GetBlockPayee(int nBlockHeight, CScript& payee)
|
|||||||
|
|
||||||
// Is this masternode scheduled to get paid soon?
|
// Is this masternode scheduled to get paid soon?
|
||||||
// -- Only look ahead up to 8 blocks to allow for propagation of the latest 2 blocks of votes
|
// -- Only look ahead up to 8 blocks to allow for propagation of the latest 2 blocks of votes
|
||||||
bool CMasternodePayments::IsScheduled(const CMasternode& mn, int nNotBlockHeight)
|
bool CMasternodePayments::IsScheduled(const masternode_info_t& mnInfo, int nNotBlockHeight)
|
||||||
{
|
{
|
||||||
LOCK(cs_mapMasternodeBlocks);
|
LOCK(cs_mapMasternodeBlocks);
|
||||||
|
|
||||||
if(!masternodeSync.IsMasternodeListSynced()) return false;
|
if(!masternodeSync.IsMasternodeListSynced()) return false;
|
||||||
|
|
||||||
CScript mnpayee;
|
CScript mnpayee;
|
||||||
mnpayee = GetScriptForDestination(mn.pubKeyCollateralAddress.GetID());
|
mnpayee = GetScriptForDestination(mnInfo.pubKeyCollateralAddress.GetID());
|
||||||
|
|
||||||
CScript payee;
|
CScript payee;
|
||||||
for(int64_t h = nCachedBlockHeight; h <= nCachedBlockHeight + 8; h++){
|
for(int64_t h = nCachedBlockHeight; h <= nCachedBlockHeight + 8; h++){
|
||||||
|
@ -204,7 +204,7 @@ public:
|
|||||||
|
|
||||||
bool GetBlockPayee(int nBlockHeight, CScript& payee);
|
bool GetBlockPayee(int nBlockHeight, CScript& payee);
|
||||||
bool IsTransactionValid(const CTransaction& txNew, int nBlockHeight);
|
bool IsTransactionValid(const CTransaction& txNew, int nBlockHeight);
|
||||||
bool IsScheduled(const CMasternode& mn, int nNotBlockHeight);
|
bool IsScheduled(const masternode_info_t& mnInfo, int nNotBlockHeight);
|
||||||
|
|
||||||
bool CanVote(COutPoint outMasternode, int nBlockHeight);
|
bool CanVote(COutPoint outMasternode, int nBlockHeight);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "consensus/validation.h"
|
#include "consensus/validation.h"
|
||||||
#include "core_io.h"
|
#include "core_io.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
#include "masternode-payments.h"
|
||||||
#include "masternode-sync.h"
|
#include "masternode-sync.h"
|
||||||
#include "masternodeman.h"
|
#include "masternodeman.h"
|
||||||
#include "netmessagemaker.h"
|
#include "netmessagemaker.h"
|
||||||
@ -852,6 +853,12 @@ bool CPrivateSendClient::JoinExistingQueue(CAmount nBalanceNeedsAnonymized, CCon
|
|||||||
|
|
||||||
if(infoMn.nProtocolVersion < MIN_PRIVATESEND_PEER_PROTO_VERSION) continue;
|
if(infoMn.nProtocolVersion < MIN_PRIVATESEND_PEER_PROTO_VERSION) continue;
|
||||||
|
|
||||||
|
// skip next mn payments winners
|
||||||
|
if (mnpayments.IsScheduled(infoMn, 0)) {
|
||||||
|
LogPrintf("CPrivateSendClient::JoinExistingQueue -- skipping winner, masternode=%s\n", infoMn.vin.prevout.ToStringShort());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<int> vecBits;
|
std::vector<int> vecBits;
|
||||||
if(!CPrivateSend::GetDenominationsBits(dsq.nDenom, vecBits)) {
|
if(!CPrivateSend::GetDenominationsBits(dsq.nDenom, vecBits)) {
|
||||||
// incompatible denom
|
// incompatible denom
|
||||||
@ -915,11 +922,20 @@ bool CPrivateSendClient::StartNewQueue(CAmount nValueMin, CAmount nBalanceNeedsA
|
|||||||
// otherwise, try one randomly
|
// otherwise, try one randomly
|
||||||
while(nTries < 10) {
|
while(nTries < 10) {
|
||||||
masternode_info_t infoMn = mnodeman.FindRandomNotInVec(vecMasternodesUsed, MIN_PRIVATESEND_PEER_PROTO_VERSION);
|
masternode_info_t infoMn = mnodeman.FindRandomNotInVec(vecMasternodesUsed, MIN_PRIVATESEND_PEER_PROTO_VERSION);
|
||||||
|
|
||||||
if(!infoMn.fInfoValid) {
|
if(!infoMn.fInfoValid) {
|
||||||
LogPrintf("CPrivateSendClient::StartNewQueue -- Can't find random masternode!\n");
|
LogPrintf("CPrivateSendClient::StartNewQueue -- Can't find random masternode!\n");
|
||||||
strAutoDenomResult = _("Can't find random Masternode.");
|
strAutoDenomResult = _("Can't find random Masternode.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// skip next mn payments winners
|
||||||
|
if (mnpayments.IsScheduled(infoMn, 0)) {
|
||||||
|
LogPrintf("CPrivateSendClient::StartNewQueue -- skipping winner, masternode=%s\n", infoMn.vin.prevout.ToStringShort());
|
||||||
|
nTries++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
vecMasternodesUsed.push_back(infoMn.vin.prevout);
|
vecMasternodesUsed.push_back(infoMn.vin.prevout);
|
||||||
|
|
||||||
if(infoMn.nLastDsq != 0 && infoMn.nLastDsq + nMnCountEnabled/5 > mnodeman.nDsqCount) {
|
if(infoMn.nLastDsq != 0 && infoMn.nLastDsq + nMnCountEnabled/5 > mnodeman.nDsqCount) {
|
||||||
|
Loading…
Reference in New Issue
Block a user