Fix payment cycle when network is in the process of updating
This commit is contained in:
parent
342522352d
commit
6b31970f13
@ -3,7 +3,7 @@ AC_PREREQ([2.60])
|
|||||||
define(_CLIENT_VERSION_MAJOR, 0)
|
define(_CLIENT_VERSION_MAJOR, 0)
|
||||||
define(_CLIENT_VERSION_MINOR, 12)
|
define(_CLIENT_VERSION_MINOR, 12)
|
||||||
define(_CLIENT_VERSION_REVISION, 0)
|
define(_CLIENT_VERSION_REVISION, 0)
|
||||||
define(_CLIENT_VERSION_BUILD, 46)
|
define(_CLIENT_VERSION_BUILD, 47)
|
||||||
define(_CLIENT_VERSION_IS_RELEASE, true)
|
define(_CLIENT_VERSION_IS_RELEASE, true)
|
||||||
define(_COPYRIGHT_YEAR, 2015)
|
define(_COPYRIGHT_YEAR, 2015)
|
||||||
AC_INIT([Dash Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@dashpay.io],[dash])
|
AC_INIT([Dash Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@dashpay.io],[dash])
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#define CLIENT_VERSION_MAJOR 0
|
#define CLIENT_VERSION_MAJOR 0
|
||||||
#define CLIENT_VERSION_MINOR 12
|
#define CLIENT_VERSION_MINOR 12
|
||||||
#define CLIENT_VERSION_REVISION 0
|
#define CLIENT_VERSION_REVISION 0
|
||||||
#define CLIENT_VERSION_BUILD 46
|
#define CLIENT_VERSION_BUILD 47
|
||||||
|
|
||||||
//! Set to true for release, false for prerelease or test build
|
//! Set to true for release, false for prerelease or test build
|
||||||
#define CLIENT_VERSION_IS_RELEASE true
|
#define CLIENT_VERSION_IS_RELEASE true
|
||||||
|
@ -686,8 +686,8 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight)
|
|||||||
LogPrintf("CMasternodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", nBlockHeight, activeMasternode.vin.ToString().c_str());
|
LogPrintf("CMasternodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", nBlockHeight, activeMasternode.vin.ToString().c_str());
|
||||||
|
|
||||||
// pay to the oldest MN that still had no payment but its input is old enough and it was active long enough
|
// pay to the oldest MN that still had no payment but its input is old enough and it was active long enough
|
||||||
CMasternode *pmn = mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, true);
|
int nCount = 0;
|
||||||
if(pmn == NULL) pmn = mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, false); // if no results, look for any node with a newer sigTime
|
CMasternode *pmn = mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, true, nCount);
|
||||||
|
|
||||||
if(pmn != NULL)
|
if(pmn != NULL)
|
||||||
{
|
{
|
||||||
|
@ -414,9 +414,10 @@ CMasternode *CMasternodeMan::Find(const CPubKey &pubKeyMasternode)
|
|||||||
//
|
//
|
||||||
// Deterministically select the oldest/best masternode to pay on the network
|
// Deterministically select the oldest/best masternode to pay on the network
|
||||||
//
|
//
|
||||||
CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime)
|
CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount)
|
||||||
{
|
{
|
||||||
LOCK(cs);
|
LOCK(cs);
|
||||||
|
nCount = 0;
|
||||||
|
|
||||||
CMasternode *pBestMasternode = NULL;
|
CMasternode *pBestMasternode = NULL;
|
||||||
std::vector<pair<int64_t, CTxIn> > vecMasternodeLastPaid;
|
std::vector<pair<int64_t, CTxIn> > vecMasternodeLastPaid;
|
||||||
@ -444,8 +445,12 @@ CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight
|
|||||||
if(mn.GetMasternodeInputAge() < nMnCount) continue;
|
if(mn.GetMasternodeInputAge() < nMnCount) continue;
|
||||||
|
|
||||||
vecMasternodeLastPaid.push_back(make_pair(mn.SecondsSincePayment(), mn.vin));
|
vecMasternodeLastPaid.push_back(make_pair(mn.SecondsSincePayment(), mn.vin));
|
||||||
|
nCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//when the network is in the process of upgrading, don't penalize nodes that recently restarted
|
||||||
|
if(fFilterSigTime && nCount < nMnCount/3) return GetNextMasternodeInQueueForPayment(nBlockHeight, false, nCount);
|
||||||
|
|
||||||
// Sort them low to high
|
// Sort them low to high
|
||||||
sort(vecMasternodeLastPaid.rbegin(), vecMasternodeLastPaid.rend(), CompareLastPaid());
|
sort(vecMasternodeLastPaid.rbegin(), vecMasternodeLastPaid.rend(), CompareLastPaid());
|
||||||
|
|
||||||
@ -454,7 +459,7 @@ CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight
|
|||||||
// -- 1/100 payments should be a double payment on mainnet - (1/(3000/10))*2
|
// -- 1/100 payments should be a double payment on mainnet - (1/(3000/10))*2
|
||||||
// -- (chance per block * chances before IsScheduled will fire)
|
// -- (chance per block * chances before IsScheduled will fire)
|
||||||
int nTenthNetwork = CountEnabled()/10;
|
int nTenthNetwork = CountEnabled()/10;
|
||||||
int nCount = 0;
|
int nCountTenth = 0;
|
||||||
uint256 nHigh = 0;
|
uint256 nHigh = 0;
|
||||||
BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn)& s, vecMasternodeLastPaid){
|
BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn)& s, vecMasternodeLastPaid){
|
||||||
CMasternode* pmn = Find(s.second);
|
CMasternode* pmn = Find(s.second);
|
||||||
@ -465,7 +470,7 @@ CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight
|
|||||||
nHigh = n;
|
nHigh = n;
|
||||||
pBestMasternode = pmn;
|
pBestMasternode = pmn;
|
||||||
}
|
}
|
||||||
nCount++;
|
nCountTenth++;
|
||||||
if(nCount >= nTenthNetwork) break;
|
if(nCount >= nTenthNetwork) break;
|
||||||
}
|
}
|
||||||
return pBestMasternode;
|
return pBestMasternode;
|
||||||
|
@ -116,7 +116,7 @@ public:
|
|||||||
CMasternode* Find(const CPubKey& pubKeyMasternode);
|
CMasternode* Find(const CPubKey& pubKeyMasternode);
|
||||||
|
|
||||||
/// Find an entry in the masternode list that is next to be paid
|
/// Find an entry in the masternode list that is next to be paid
|
||||||
CMasternode* GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime=true);
|
CMasternode* GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount);
|
||||||
|
|
||||||
/// Find a random entry
|
/// Find a random entry
|
||||||
CMasternode* FindRandomNotInVec(std::vector<CTxIn> &vecToExclude, int protocolVersion = -1);
|
CMasternode* FindRandomNotInVec(std::vector<CTxIn> &vecToExclude, int protocolVersion = -1);
|
||||||
|
@ -134,7 +134,7 @@ Value masternode(const Array& params, bool fHelp)
|
|||||||
"1. \"command\" (string or set of strings, required) The command to execute\n"
|
"1. \"command\" (string or set of strings, required) The command to execute\n"
|
||||||
"2. \"passphrase\" (string, optional) The wallet passphrase\n"
|
"2. \"passphrase\" (string, optional) The wallet passphrase\n"
|
||||||
"\nAvailable commands:\n"
|
"\nAvailable commands:\n"
|
||||||
" count - Print number of all known masternodes (optional: 'ds', 'enabled', 'all')\n"
|
" count - Print number of all known masternodes (optional: 'ds', 'enabled', 'all', 'qualify')\n"
|
||||||
" current - Print info on current masternode winner\n"
|
" current - Print info on current masternode winner\n"
|
||||||
" debug - Print masternode status\n"
|
" debug - Print masternode status\n"
|
||||||
" genkey - Generate new masternodeprivkey\n"
|
" genkey - Generate new masternodeprivkey\n"
|
||||||
@ -186,12 +186,19 @@ Value masternode(const Array& params, bool fHelp)
|
|||||||
}
|
}
|
||||||
if (params.size() == 2)
|
if (params.size() == 2)
|
||||||
{
|
{
|
||||||
|
int nCount = 0;
|
||||||
|
|
||||||
|
if(chainActive.Tip())
|
||||||
|
mnodeman.GetNextMasternodeInQueueForPayment(chainActive.Tip()->nHeight, true, nCount);
|
||||||
|
|
||||||
if(params[1] == "ds") return mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION);
|
if(params[1] == "ds") return mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION);
|
||||||
if(params[1] == "enabled") return mnodeman.CountEnabled();
|
if(params[1] == "enabled") return mnodeman.CountEnabled();
|
||||||
if(params[1] == "all") return strprintf("Total: %d (DS Compatible: %d / Enabled: %d)",
|
if(params[1] == "qualify") return nCount;
|
||||||
|
if(params[1] == "all") return strprintf("Total: %d (DS Compatible: %d / Enabled: %d / Qualify: %d)",
|
||||||
mnodeman.size(),
|
mnodeman.size(),
|
||||||
mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION),
|
mnodeman.CountEnabled(MIN_POOL_PEER_PROTO_VERSION),
|
||||||
mnodeman.CountEnabled());
|
mnodeman.CountEnabled(),
|
||||||
|
nCount);
|
||||||
}
|
}
|
||||||
return mnodeman.size();
|
return mnodeman.size();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user