mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
Refactor CMasternodeBlockPayees
This commit is contained in:
parent
56aae1632d
commit
d239a13ee3
@ -19,7 +19,7 @@
|
|||||||
/** Object for who's going to get paid on which blocks */
|
/** Object for who's going to get paid on which blocks */
|
||||||
CMasternodePayments mnpayments;
|
CMasternodePayments mnpayments;
|
||||||
|
|
||||||
CCriticalSection cs_vecPayments;
|
CCriticalSection cs_vecPayees;
|
||||||
CCriticalSection cs_mapMasternodeBlocks;
|
CCriticalSection cs_mapMasternodeBlocks;
|
||||||
CCriticalSection cs_mapMasternodePayeeVotes;
|
CCriticalSection cs_mapMasternodePayeeVotes;
|
||||||
|
|
||||||
@ -420,14 +420,62 @@ bool CMasternodePayments::AddWinningMasternode(CMasternodePaymentWinner& winnerI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mapMasternodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn.payee, 1);
|
mapMasternodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMasternodeBlockPayees::AddPayee(CMasternodePaymentWinner winner)
|
||||||
|
{
|
||||||
|
LOCK(cs_vecPayees);
|
||||||
|
|
||||||
|
BOOST_FOREACH(CMasternodePayee& payee, vecPayees) {
|
||||||
|
if (payee.scriptPubKey == winner.payee) {
|
||||||
|
payee.nVotes++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CMasternodePayee payeeNew(winner.payee, 1);
|
||||||
|
vecPayees.push_back(payeeNew);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMasternodeBlockPayees::GetPayee(CScript& payeeRet)
|
||||||
|
{
|
||||||
|
LOCK(cs_vecPayees);
|
||||||
|
|
||||||
|
if(!vecPayees.size()) {
|
||||||
|
LogPrint("mnpayments", "CMasternodeBlockPayees::GetPayee -- ERROR: couldn't find any payee\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nVotes = -1;
|
||||||
|
BOOST_FOREACH(CMasternodePayee& payee, vecPayees) {
|
||||||
|
if (payee.nVotes > nVotes) {
|
||||||
|
payeeRet = payee.scriptPubKey;
|
||||||
|
nVotes = payee.nVotes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (nVotes > -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMasternodeBlockPayees::HasPayeeWithVotes(CScript payeeIn, int nVotesReq)
|
||||||
|
{
|
||||||
|
LOCK(cs_vecPayees);
|
||||||
|
|
||||||
|
BOOST_FOREACH(CMasternodePayee& payee, vecPayees) {
|
||||||
|
if (payee.nVotes >= nVotesReq && payee.scriptPubKey == payeeIn) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogPrint("mnpayments", "CMasternodeBlockPayees::HasPayeeWithVotes -- ERROR: couldn't find any payee with %d+ votes\n", nVotesReq);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool CMasternodeBlockPayees::IsTransactionValid(const CTransaction& txNew)
|
bool CMasternodeBlockPayees::IsTransactionValid(const CTransaction& txNew)
|
||||||
{
|
{
|
||||||
LOCK(cs_vecPayments);
|
LOCK(cs_vecPayees);
|
||||||
|
|
||||||
int nMaxSignatures = 0;
|
int nMaxSignatures = 0;
|
||||||
std::string strPayeesPossible = "";
|
std::string strPayeesPossible = "";
|
||||||
@ -472,24 +520,24 @@ bool CMasternodeBlockPayees::IsTransactionValid(const CTransaction& txNew)
|
|||||||
|
|
||||||
std::string CMasternodeBlockPayees::GetRequiredPaymentsString()
|
std::string CMasternodeBlockPayees::GetRequiredPaymentsString()
|
||||||
{
|
{
|
||||||
LOCK(cs_vecPayments);
|
LOCK(cs_vecPayees);
|
||||||
|
|
||||||
std::string ret = "Unknown";
|
std::string strRequiredPayments = "Unknown";
|
||||||
|
|
||||||
BOOST_FOREACH(CMasternodePayee& payee, vecPayments)
|
BOOST_FOREACH(CMasternodePayee& payee, vecPayees)
|
||||||
{
|
{
|
||||||
CTxDestination address1;
|
CTxDestination address1;
|
||||||
ExtractDestination(payee.scriptPubKey, address1);
|
ExtractDestination(payee.scriptPubKey, address1);
|
||||||
CBitcoinAddress address2(address1);
|
CBitcoinAddress address2(address1);
|
||||||
|
|
||||||
if(ret != "Unknown"){
|
if (strRequiredPayments != "Unknown") {
|
||||||
ret += ", " + address2.ToString() + ":" + boost::lexical_cast<std::string>(payee.nVotes);
|
strRequiredPayments += ", " + address2.ToString() + ":" + boost::lexical_cast<std::string>(payee.nVotes);
|
||||||
} else {
|
} else {
|
||||||
ret = address2.ToString() + ":" + boost::lexical_cast<std::string>(payee.nVotes);
|
strRequiredPayments = address2.ToString() + ":" + boost::lexical_cast<std::string>(payee.nVotes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return strRequiredPayments;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CMasternodePayments::GetRequiredPaymentsString(int nBlockHeight)
|
std::string CMasternodePayments::GetRequiredPaymentsString(int nBlockHeight)
|
||||||
|
@ -24,7 +24,7 @@ using namespace std;
|
|||||||
static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 70103;
|
static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 70103;
|
||||||
static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 70201;
|
static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 70201;
|
||||||
|
|
||||||
extern CCriticalSection cs_vecPayments;
|
extern CCriticalSection cs_vecPayees;
|
||||||
extern CCriticalSection cs_mapMasternodeBlocks;
|
extern CCriticalSection cs_mapMasternodeBlocks;
|
||||||
extern CCriticalSection cs_mapMasternodePayeeVotes;
|
extern CCriticalSection cs_mapMasternodePayeeVotes;
|
||||||
|
|
||||||
@ -75,67 +75,26 @@ class CMasternodeBlockPayees
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int nBlockHeight;
|
int nBlockHeight;
|
||||||
std::vector<CMasternodePayee> vecPayments;
|
std::vector<CMasternodePayee> vecPayees;
|
||||||
|
|
||||||
CMasternodeBlockPayees(){
|
CMasternodeBlockPayees() : nBlockHeight(0) {}
|
||||||
nBlockHeight = 0;
|
CMasternodeBlockPayees(int nBlockHeightIn) : nBlockHeight(nBlockHeightIn) {}
|
||||||
vecPayments.clear();
|
|
||||||
}
|
|
||||||
CMasternodeBlockPayees(int nBlockHeightIn) {
|
|
||||||
nBlockHeight = nBlockHeightIn;
|
|
||||||
vecPayments.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddPayee(CScript payeeIn, int nIncrement){
|
|
||||||
LOCK(cs_vecPayments);
|
|
||||||
|
|
||||||
BOOST_FOREACH(CMasternodePayee& payee, vecPayments){
|
|
||||||
if(payee.scriptPubKey == payeeIn) {
|
|
||||||
payee.nVotes += nIncrement;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CMasternodePayee c(payeeIn, nIncrement);
|
|
||||||
vecPayments.push_back(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GetPayee(CScript& payee)
|
|
||||||
{
|
|
||||||
LOCK(cs_vecPayments);
|
|
||||||
|
|
||||||
int nVotes = -1;
|
|
||||||
BOOST_FOREACH(CMasternodePayee& p, vecPayments){
|
|
||||||
if(p.nVotes > nVotes){
|
|
||||||
payee = p.scriptPubKey;
|
|
||||||
nVotes = p.nVotes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (nVotes > -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasPayeeWithVotes(CScript payee, int nVotesReq)
|
|
||||||
{
|
|
||||||
LOCK(cs_vecPayments);
|
|
||||||
|
|
||||||
BOOST_FOREACH(CMasternodePayee& p, vecPayments){
|
|
||||||
if(p.nVotes >= nVotesReq && p.scriptPubKey == payee) return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsTransactionValid(const CTransaction& txNew);
|
|
||||||
std::string GetRequiredPaymentsString();
|
|
||||||
|
|
||||||
ADD_SERIALIZE_METHODS;
|
ADD_SERIALIZE_METHODS;
|
||||||
|
|
||||||
template <typename Stream, typename Operation>
|
template <typename Stream, typename Operation>
|
||||||
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
|
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
|
||||||
READWRITE(nBlockHeight);
|
READWRITE(nBlockHeight);
|
||||||
READWRITE(vecPayments);
|
READWRITE(vecPayees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddPayee(CMasternodePaymentWinner winner);
|
||||||
|
bool GetPayee(CScript& payeeRet);
|
||||||
|
bool HasPayeeWithVotes(CScript payeeIn, int nVotesReq);
|
||||||
|
|
||||||
|
bool IsTransactionValid(const CTransaction& txNew);
|
||||||
|
|
||||||
|
std::string GetRequiredPaymentsString();
|
||||||
};
|
};
|
||||||
|
|
||||||
// for storing the winning payments
|
// for storing the winning payments
|
||||||
|
Loading…
Reference in New Issue
Block a user