Only require valid collaterals for votes and triggers (#2947)
* Only require valid collaterals for votes and triggers * Bump proto version * Only announce votes from banned MNs to >= 70215 proto version nodes
This commit is contained in:
parent
7c3fd254f4
commit
b74cd3e101
@ -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)) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
@ -258,7 +271,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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user