mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
fix: expire triggers that are too far into the future (#5646)
## Issue being fixed or feature implemented `gobject count all` before: >Governance Objects: 1195 (Proposals: 9, Triggers: 1186, Other: 0; Erased: 1), Votes: 135064 after (in 10-ish minutes after gov sync is done): >Governance Objects: 11 (Proposals: 9, Triggers: 2, Other: 0; Erased: 1), Votes: 702 I _think_ it happens when a node can't follow the right chain for some reason but it keeps receiving triggers and votes from other nodes which means triggers never expire on such node. This wouldn't be a problem for us if we wouldn't reorg testnet/devnets from time to time. Once we reorg the stuck node happily spams us with all the triggers it saved in the meantime. ## What was done? 2 sb cycles into the future should be enough for all legit triggers, drop the ones that have their height even higher ## How Has This Been Tested? run a node, check rpc ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_
This commit is contained in:
parent
297b50ae6c
commit
3e732a9522
@ -127,7 +127,7 @@ bool CGovernanceTriggerManager::AddNewTrigger(uint256 nHash)
|
|||||||
|
|
||||||
mapTrigger.insert(std::make_pair(nHash, pSuperblock));
|
mapTrigger.insert(std::make_pair(nHash, pSuperblock));
|
||||||
|
|
||||||
return true;
|
return !pSuperblock->IsExpired(*governance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -724,6 +724,14 @@ bool CSuperblock::IsExpired(const CGovernanceManager& governanceManager) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Params().NetworkIDString() != CBaseChainParams::MAIN) {
|
||||||
|
// NOTE: this can happen on testnet/devnets due to reorgs, should never happen on mainnet
|
||||||
|
if (governanceManager.GetCachedBlockHeight() + Params().GetConsensus().nSuperblockCycle * 2 < nBlockHeight) {
|
||||||
|
LogPrint(BCLog::GOBJECT, "CSuperblock::IsExpired -- Trigger is too far into the future\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1203,8 +1203,8 @@ int CGovernanceManager::RequestGovernanceObjectVotes(Span<CNode*> vNodesCopy, CC
|
|||||||
|
|
||||||
if (mapObjects.empty()) return -2;
|
if (mapObjects.empty()) return -2;
|
||||||
|
|
||||||
for (const auto& objPair : mapObjects) {
|
for (const auto& [nHash, govobj] : mapObjects) {
|
||||||
uint256 nHash = objPair.first;
|
if (govobj.IsSetCachedDelete()) continue;
|
||||||
if (mapAskedRecently.count(nHash)) {
|
if (mapAskedRecently.count(nHash)) {
|
||||||
auto it = mapAskedRecently[nHash].begin();
|
auto it = mapAskedRecently[nHash].begin();
|
||||||
while (it != mapAskedRecently[nHash].end()) {
|
while (it != mapAskedRecently[nHash].end()) {
|
||||||
@ -1217,7 +1217,7 @@ int CGovernanceManager::RequestGovernanceObjectVotes(Span<CNode*> vNodesCopy, CC
|
|||||||
if (mapAskedRecently[nHash].size() >= nPeersPerHashMax) continue;
|
if (mapAskedRecently[nHash].size() >= nPeersPerHashMax) continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (objPair.second.GetObjectType() == GovernanceObject::TRIGGER) {
|
if (govobj.GetObjectType() == GovernanceObject::TRIGGER) {
|
||||||
vTriggerObjHashes.push_back(nHash);
|
vTriggerObjHashes.push_back(nHash);
|
||||||
} else {
|
} else {
|
||||||
vOtherObjHashes.push_back(nHash);
|
vOtherObjHashes.push_back(nHash);
|
||||||
|
Loading…
Reference in New Issue
Block a user