diff --git a/src/masternode-payments.cpp b/src/masternode-payments.cpp index b7229b7f3d69..7dca88114ce4 100644 --- a/src/masternode-payments.cpp +++ b/src/masternode-payments.cpp @@ -351,8 +351,8 @@ void CMasternodePayments::ProcessMessage(CNode* pfrom, const std::string& strCom auto res = mapMasternodePaymentVotes.emplace(nHash, vote); - // Avoid processing same vote multiple times - if(!res.second) { + // Avoid processing same vote multiple times if it was already verified earlier + if(!res.second && res.first->second.IsVerified()) { LogPrint("mnpayments", "MASTERNODEPAYMENTVOTE -- hash=%s, nBlockHeight=%d/%d seen\n", nHash.ToString(), vote.nBlockHeight, nCachedBlockHeight); return; @@ -375,11 +375,6 @@ void CMasternodePayments::ProcessMessage(CNode* pfrom, const std::string& strCom return; } - if(!UpdateLastVote(vote)) { - LogPrintf("MASTERNODEPAYMENTVOTE -- masternode already voted, masternode=%s\n", vote.masternodeOutpoint.ToStringShort()); - return; - } - masternode_info_t mnInfo; if(!mnodeman.GetMasternodeInfo(vote.masternodeOutpoint, mnInfo)) { // mn was not found, so we can't check vote, some info is probably missing @@ -407,6 +402,11 @@ void CMasternodePayments::ProcessMessage(CNode* pfrom, const std::string& strCom return; } + if(!UpdateLastVote(vote)) { + LogPrintf("MASTERNODEPAYMENTVOTE -- masternode already voted, masternode=%s\n", vote.masternodeOutpoint.ToStringShort()); + return; + } + CTxDestination address1; ExtractDestination(vote.payee, address1); CBitcoinAddress address2(address1);