From d49c9f67362f0948950db84fc44df6353b87975b Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Tue, 28 May 2019 17:02:24 +0200 Subject: [PATCH 1/3] Only require valid collaterals for votes and triggers --- src/governance/governance-object.cpp | 8 -------- src/governance/governance-vote.cpp | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/governance/governance-object.cpp b/src/governance/governance-object.cpp index 69b95352e991..bd137c6caae5 100644 --- a/src/governance/governance-object.cpp +++ b/src/governance/governance-object.cpp @@ -498,14 +498,6 @@ bool CGovernanceObject::IsValidLocally(std::string& strError, bool& fMissingMast strError = "Failed to find Masternode by UTXO, missing masternode=" + strOutpoint; return false; } - if (!mnList.IsMNValid(dmn)) { - if (mnList.IsMNPoSeBanned(dmn)) { - strError = "Masternode is POSE_BANNED, masternode=" + strOutpoint; - } else { - strError = "Masternode is invalid for unknown reason, masternode=" + strOutpoint; - } - return false; - } // Check that we have a valid MN signature if (!CheckSignature(dmn->pdmnState->pubKeyOperator)) { diff --git a/src/governance/governance-vote.cpp b/src/governance/governance-vote.cpp index 53816bc8a30e..bf58cb12ab69 100644 --- a/src/governance/governance-vote.cpp +++ b/src/governance/governance-vote.cpp @@ -258,7 +258,7 @@ bool CGovernanceVote::IsValid(bool useVotingKey) const return false; } - auto dmn = deterministicMNManager->GetListAtChainTip().GetValidMNByCollateral(masternodeOutpoint); + auto dmn = deterministicMNManager->GetListAtChainTip().GetMNByCollateral(masternodeOutpoint); if (!dmn) { LogPrint(BCLog::GOBJECT, "CGovernanceVote::IsValid -- Unknown Masternode - %s\n", masternodeOutpoint.ToStringShort()); return false; From 02656ec1aeb951f0bc7eb971545622f423ca07bd Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Tue, 28 May 2019 18:19:12 +0200 Subject: [PATCH 2/3] Bump proto version --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 680c2a070d53..148cfd2e3645 100644 --- a/src/version.h +++ b/src/version.h @@ -11,7 +11,7 @@ */ -static const int PROTOCOL_VERSION = 70214; +static const int PROTOCOL_VERSION = 70215; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; From c3f29c1d095b2688a1e3b44ec16067efb38a5f8c Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Tue, 28 May 2019 18:19:43 +0200 Subject: [PATCH 3/3] Only announce votes from banned MNs to >= 70215 proto version nodes --- src/governance/governance-object.h | 1 + src/governance/governance-vote.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/governance/governance-object.h b/src/governance/governance-object.h index 30d7a66aec85..21659c275daf 100644 --- a/src/governance/governance-object.h +++ b/src/governance/governance-object.h @@ -25,6 +25,7 @@ class CGovernanceVote; static const int MIN_GOVERNANCE_PEER_PROTO_VERSION = 70213; static const int GOVERNANCE_FILTER_PROTO_VERSION = 70206; +static const int GOVERNANCE_POSE_BANNED_VOTES_VERSION = 70215; static const double GOVERNANCE_FILTER_FP_RATE = 0.001; diff --git a/src/governance/governance-vote.cpp b/src/governance/governance-vote.cpp index bf58cb12ab69..5836e78a9fb6 100644 --- a/src/governance/governance-vote.cpp +++ b/src/governance/governance-vote.cpp @@ -120,8 +120,21 @@ void CGovernanceVote::Relay(CConnman& connman) const return; } + auto mnList = deterministicMNManager->GetListAtChainTip(); + auto dmn = mnList.GetMNByCollateral(masternodeOutpoint); + if (!dmn) { + return; + } + + // When this vote is from non-valid (PoSe banned) MN, we should only announce it to v0.14.0.1 nodes as older nodes + // will ban us otherwise. + int minVersion = MIN_GOVERNANCE_PEER_PROTO_VERSION; + if (!mnList.IsMNValid(dmn)) { + minVersion = GOVERNANCE_POSE_BANNED_VOTES_VERSION; + } + CInv inv(MSG_GOVERNANCE_OBJECT_VOTE, GetHash()); - connman.RelayInv(inv, MIN_GOVERNANCE_PEER_PROTO_VERSION); + connman.RelayInv(inv, minVersion); } void CGovernanceVote::UpdateHash() const