From b5414e1c3c86e9f99d5a331f41a73191173045aa Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Fri, 6 Mar 2015 20:25:48 +0300 Subject: [PATCH] save nDsqCount in mncache.dat --- src/darksend.cpp | 12 ++++++------ src/darksend.h | 4 ---- src/masternodeman.cpp | 8 ++++++-- src/masternodeman.h | 3 +++ 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/darksend.cpp b/src/darksend.cpp index a226c0f2c677..d69143d63530 100644 --- a/src/darksend.cpp +++ b/src/darksend.cpp @@ -83,7 +83,7 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand if(sessionUsers == 0) { if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > nDsqCount){ + pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ LogPrintf("dsa -- last dsq too recent, must wait. %s \n", pmn->addr.ToString().c_str()); std::string strError = _("Last Darksend was too recent."); pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, strError); @@ -141,15 +141,15 @@ void CDarksendPool::ProcessMessageDarksend(CNode* pfrom, std::string& strCommand if(q.vin == dsq.vin) return; } - if(fDebug) LogPrintf("dsq last %d last2 %d count %d\n", pmn->nLastDsq, pmn->nLastDsq + mnodeman.size()/5, nDsqCount); + if(fDebug) LogPrintf("dsq last %d last2 %d count %d\n", pmn->nLastDsq, pmn->nLastDsq + mnodeman.size()/5, mnodeman.nDsqCount); //don't allow a few nodes to dominate the queuing process if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > nDsqCount){ + pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ if(fDebug) LogPrintf("dsq -- Masternode sending too many dsq messages. %s \n", pmn->addr.ToString().c_str()); return; } - nDsqCount++; - pmn->nLastDsq = nDsqCount; + mnodeman.nDsqCount++; + pmn->nLastDsq = mnodeman.nDsqCount; pmn->allowFreeTx = true; if(fDebug) LogPrintf("dsq - new Darksend queue object - %s\n", addr.ToString().c_str()); @@ -1783,7 +1783,7 @@ bool CDarksendPool::DoAutomaticDenominating(bool fDryRun, bool ready) } if(pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > darkSendPool.nDsqCount){ + pmn->nLastDsq + mnodeman.CountMasternodesAboveProtocol(MIN_POOL_PEER_PROTO_VERSION)/5 > mnodeman.nDsqCount){ i++; continue; } diff --git a/src/darksend.h b/src/darksend.h index fa6922e1d058..7b997f06abfe 100644 --- a/src/darksend.h +++ b/src/darksend.h @@ -316,9 +316,6 @@ class CDarksendPool std::string strMasternodeSharedKey; bool fResentInputsOutputs; - //incremented whenever a DSQ comes through - int64_t nDsqCount; - CDarksendPool() { /* Darksend uses collateral addresses to trust parties entering the pool @@ -329,7 +326,6 @@ class CDarksendPool unitTest = false; txCollateral = CTransaction(); minBlockSpacing = 1; - nDsqCount = 0; lastNewBlock = 0; strMasternodeSharedKey = ""; fResentInputsOutputs = false; diff --git a/src/masternodeman.cpp b/src/masternodeman.cpp index c83f83b33588..b707482fc22f 100644 --- a/src/masternodeman.cpp +++ b/src/masternodeman.cpp @@ -160,7 +160,9 @@ void DumpMasternodes() LogPrintf("Masternode dump finished %dms\n", GetTimeMillis() - nStart); } -CMasternodeMan::CMasternodeMan() {} +CMasternodeMan::CMasternodeMan() { + nDsqCount = 0; +} bool CMasternodeMan::Add(CMasternode &mn) { @@ -245,6 +247,7 @@ void CMasternodeMan::Clear() mAskedUsForMasternodeList.clear(); mWeAskedForMasternodeList.clear(); mWeAskedForMasternodeListEntry.clear(); + nDsqCount = 0; } int CMasternodeMan::CountEnabled() @@ -765,7 +768,8 @@ std::string CMasternodeMan::ToString() const info << "Masternodes: " << (int)vMasternodes.size() << ", peers who asked us for Masternode list: " << (int)mAskedUsForMasternodeList.size() << ", peers we asked for Masternode list: " << (int)mWeAskedForMasternodeList.size() << - ", entries in Masternode list we asked for: " << (int)mWeAskedForMasternodeListEntry.size(); + ", entries in Masternode list we asked for: " << (int)mWeAskedForMasternodeListEntry.size() << + ", nDsqCount: " << (int)nDsqCount; return info.str(); } diff --git a/src/masternodeman.h b/src/masternodeman.h index ea3430cdc818..0327c3471257 100644 --- a/src/masternodeman.h +++ b/src/masternodeman.h @@ -63,6 +63,8 @@ class CMasternodeMan std::map mWeAskedForMasternodeListEntry; public: + // keep track of dsq count to prevent masternodes from gaming darksend queue + int64_t nDsqCount; IMPLEMENT_SERIALIZE ( @@ -77,6 +79,7 @@ class CMasternodeMan READWRITE(mAskedUsForMasternodeList); READWRITE(mWeAskedForMasternodeList); READWRITE(mWeAskedForMasternodeListEntry); + READWRITE(nDsqCount); } )